sqewer 2.0.1 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/DETAILS.md +17 -3
- data/lib/sqewer/connection.rb +2 -1
- data/lib/sqewer/version.rb +1 -1
- data/lib/sqewer/worker.rb +11 -12
- data/sqewer.gemspec +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b0587cd9025e697b5a59b65e9a332d847896cc4d
|
4
|
+
data.tar.gz: b8387600d676de06a137ffa7adb83a63eb0cae71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d40e03010b39caaac013142b3ebe29ec4f9de15371c4a43f8943635d2e8953ee69ab1c0d3da415c4556a24d7ec7b3a07bd41d46b26584a6d032eb4a6b870cce
|
7
|
+
data.tar.gz: 710bfe3a794e01bfbf0b07acd41edebb8ecbaf8ba9cf7efa6700feda9e280ccb2a2039b2a717c10687b30173186ffb8b775880ce17d721cd2bb995b70ac02346
|
data/DETAILS.md
CHANGED
@@ -128,7 +128,9 @@ The very minimal executable for running jobs would be this:
|
|
128
128
|
require 'my_applicaion'
|
129
129
|
Sqewer::CLI.run
|
130
130
|
|
131
|
-
This will connect to the queue at the URL set in the `SQS_QUEUE_URL` environment variable
|
131
|
+
This will connect to the queue at the URL set in the `SQS_QUEUE_URL` environment variable, and
|
132
|
+
use all the default parameters. The `CLI` module will also set up a signal handler to terminate
|
133
|
+
the current jobs cleanly if the commandline app receives a USR1 and TERM.
|
132
134
|
|
133
135
|
You can also run a worker without signal handling, for example in test
|
134
136
|
environments. Note that the worker is asynchronous, it has worker threads
|
@@ -152,8 +154,20 @@ S3 bucket notifications coming into the same queue):
|
|
152
154
|
|
153
155
|
worker = Sqewer::Worker.new(serializer: CustomSerializer.new)
|
154
156
|
|
155
|
-
|
156
|
-
|
157
|
+
You can also elect to inherit from the `Worker` class and override some default constructor
|
158
|
+
arguments:
|
159
|
+
|
160
|
+
class CustomWorker < Sqewer::Worker
|
161
|
+
def initialize(**kwargs)
|
162
|
+
super(serializer: CustomSerializer.mnew, ..., **kwargs)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
The `Sqewer::CLI` module that you run from the commandline handler application can be
|
167
|
+
started with your custom Worker of choice:
|
168
|
+
|
169
|
+
custom_worker = Sqewer::Worker.new(logger: special_logger)
|
170
|
+
Sqewer::CLI.start(custom_worker)
|
157
171
|
|
158
172
|
## Threads versus processes
|
159
173
|
|
data/lib/sqewer/connection.rb
CHANGED
@@ -41,7 +41,8 @@ class Sqewer::Connection
|
|
41
41
|
# @return [Array<Message>] an array of Message objects
|
42
42
|
def receive_messages
|
43
43
|
client = ::Aws::SQS::Client.new
|
44
|
-
response = client.receive_message(queue_url: @queue_url,
|
44
|
+
response = client.receive_message(queue_url: @queue_url,
|
45
|
+
wait_time_seconds: DEFAULT_TIMEOUT_SECONDS, max_number_of_messages: 10)
|
45
46
|
response.messages.map do | message |
|
46
47
|
Message.new(message.receipt_handle, message.body)
|
47
48
|
end
|
data/lib/sqewer/version.rb
CHANGED
data/lib/sqewer/worker.rb
CHANGED
@@ -124,18 +124,7 @@ class Sqewer::Worker
|
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
127
|
-
|
128
|
-
# We will perform a full GC cycle after the same number of jobs as our consumer thread
|
129
|
-
# count - so not on every job, but still as often as we can to keep the memory use in check.
|
130
|
-
gc = Thread.new do
|
131
|
-
loop do
|
132
|
-
break if stopping?
|
133
|
-
GC.start if (@execution_counter.to_i % @num_threads).zero?
|
134
|
-
sleep 0.5
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
@threads = [provider, gc] + consumers
|
127
|
+
@threads = consumers + [provider]
|
139
128
|
|
140
129
|
# If any of our threads are already dead, it means there is some misconfiguration and startup failed
|
141
130
|
if @threads.any?{|t| !t.alive? }
|
@@ -153,6 +142,16 @@ class Sqewer::Worker
|
|
153
142
|
def stop
|
154
143
|
@state.transition! :stopping
|
155
144
|
@logger.info { '[worker] Stopping (clean shutdown), will wait for threads to terminate'}
|
145
|
+
loop do
|
146
|
+
n_live = @threads.select(&:alive?).length
|
147
|
+
break if n_live.zero?
|
148
|
+
|
149
|
+
n_dead = @threads.length - n_live
|
150
|
+
@logger.info {"Waiting on threads to terminate, %d still alive, %d quit" % [n_live, n_dead] }
|
151
|
+
|
152
|
+
sleep 2
|
153
|
+
end
|
154
|
+
|
156
155
|
@threads.map(&:join)
|
157
156
|
@logger.info { '[worker] Stopped'}
|
158
157
|
@state.transition! :stopped
|
data/sqewer.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: sqewer 2.0.
|
5
|
+
# stub: sqewer 2.0.2 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "sqewer"
|
9
|
-
s.version = "2.0.
|
9
|
+
s.version = "2.0.2"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Julik Tarkhanov"]
|
14
|
-
s.date = "2016-01-
|
14
|
+
s.date = "2016-01-23"
|
15
15
|
s.description = "Process jobs from SQS"
|
16
16
|
s.email = "me@julik.nl"
|
17
17
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sqewer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Julik Tarkhanov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|