sneakers 2.4.0 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/sneakers.rb +1 -0
- data/lib/sneakers/errors.rb +5 -0
- data/lib/sneakers/handlers/maxretry.rb +4 -2
- data/lib/sneakers/version.rb +1 -1
- data/lib/sneakers/worker.rb +11 -6
- data/sneakers.gemspec +1 -1
- data/spec/sneakers/worker_handlers_spec.rb +5 -0
- data/spec/sneakers/worker_spec.rb +8 -11
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e8f7e984a402f29c32f62b919a5ba0be9db25c1
|
4
|
+
data.tar.gz: 9502698889301eacdfa4fa94d9b7ae575e407ca7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 842cabff8a0f3c2375533061b32a665d9e81102e53fee32eceb96f14d3126c78499a29e80efb0f247b10ed4de9fdb52f8aea57e7ccf65a7641ac020a28ab804c
|
7
|
+
data.tar.gz: 17e5b565b4162c7bbf4ddeffc8801309291c00684fe1c13914b0bae64bc81dce50772ce9874971cdabee462afe506a10b99f751636fc38d0ddc8e13080813ad9
|
data/lib/sneakers.rb
CHANGED
@@ -46,6 +46,7 @@ module Sneakers
|
|
46
46
|
retry_name = @opts[:retry_exchange] || "#{@worker_queue_name}-retry"
|
47
47
|
error_name = @opts[:retry_error_exchange] || "#{@worker_queue_name}-error"
|
48
48
|
requeue_name = @opts[:retry_requeue_exchange] || "#{@worker_queue_name}-retry-requeue"
|
49
|
+
retry_routing_key = @opts[:retry_routing_key] || "#"
|
49
50
|
|
50
51
|
# Create the exchanges
|
51
52
|
@retry_exchange, @error_exchange, @requeue_exchange = [retry_name, error_name, requeue_name].map do |name|
|
@@ -75,7 +76,7 @@ module Sneakers
|
|
75
76
|
@error_queue.bind(@error_exchange, :routing_key => '#')
|
76
77
|
|
77
78
|
# Finally, bind the worker queue to our requeue exchange
|
78
|
-
queue.bind(@requeue_exchange, :routing_key =>
|
79
|
+
queue.bind(@requeue_exchange, :routing_key => retry_routing_key)
|
79
80
|
|
80
81
|
@max_retries = @opts[:retry_max_times] || 5
|
81
82
|
|
@@ -137,7 +138,8 @@ module Sneakers
|
|
137
138
|
error: reason,
|
138
139
|
num_attempts: num_attempts,
|
139
140
|
failed_at: Time.now.iso8601,
|
140
|
-
payload: Base64.encode64(msg.to_s)
|
141
|
+
payload: Base64.encode64(msg.to_s),
|
142
|
+
properties: Base64.encode64(props.to_json)
|
141
143
|
}.tap do |hash|
|
142
144
|
if reason.is_a?(Exception)
|
143
145
|
hash[:error_class] = reason.class.to_s
|
data/lib/sneakers/version.rb
CHANGED
data/lib/sneakers/worker.rb
CHANGED
@@ -51,7 +51,7 @@ module Sneakers
|
|
51
51
|
|
52
52
|
begin
|
53
53
|
metrics.increment("work.#{self.class.name}.started")
|
54
|
-
Timeout.timeout(@timeout_after,
|
54
|
+
Timeout.timeout(@timeout_after, WorkerTimeout) do
|
55
55
|
metrics.timing("work.#{self.class.name}.time") do
|
56
56
|
if @call_with_params
|
57
57
|
res = work_with_params(msg, delivery_info, metadata)
|
@@ -60,13 +60,15 @@ module Sneakers
|
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|
63
|
-
rescue
|
63
|
+
rescue WorkerTimeout => ex
|
64
64
|
res = :timeout
|
65
|
-
worker_error(ex, log_msg: log_msg(msg),
|
65
|
+
worker_error(ex, log_msg: log_msg(msg), class: self.class.name,
|
66
|
+
message: msg, delivery_info: delivery_info, metadata: metadata)
|
66
67
|
rescue => ex
|
67
68
|
res = :error
|
68
69
|
error = ex
|
69
|
-
worker_error(ex, log_msg: log_msg(msg),
|
70
|
+
worker_error(ex, log_msg: log_msg(msg), class: self.class.name,
|
71
|
+
message: msg, delivery_info: delivery_info, metadata: metadata)
|
70
72
|
end
|
71
73
|
|
72
74
|
if @should_ack
|
@@ -131,8 +133,11 @@ module Sneakers
|
|
131
133
|
@queue_opts = opts
|
132
134
|
end
|
133
135
|
|
134
|
-
def enqueue(msg)
|
135
|
-
|
136
|
+
def enqueue(msg, opts={})
|
137
|
+
opts[:routing_key] ||= @queue_opts[:routing_key]
|
138
|
+
opts[:to_queue] ||= @queue_name
|
139
|
+
|
140
|
+
publisher.publish(msg, opts)
|
136
141
|
end
|
137
142
|
|
138
143
|
private
|
data/sneakers.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.test_files = gem.files.grep(/^(test|spec|features)\//)
|
19
19
|
gem.require_paths = ['lib']
|
20
20
|
gem.add_dependency 'serverengine', '~> 1.5.11'
|
21
|
-
gem.add_dependency 'bunny', '~> 2.6'
|
21
|
+
gem.add_dependency 'bunny', '~> 2.6.4'
|
22
22
|
gem.add_dependency 'thread', '~> 0.1.7'
|
23
23
|
gem.add_dependency 'thor'
|
24
24
|
|
@@ -252,6 +252,7 @@ describe 'Handlers' do
|
|
252
252
|
data['error'].must_equal('reject')
|
253
253
|
data['num_attempts'].must_equal(2)
|
254
254
|
data['payload'].must_equal(Base64.encode64(:reject.to_s))
|
255
|
+
data['properties'].must_equal(Base64.encode64(@props_with_x_death.to_json))
|
255
256
|
Time.parse(data['failed_at']).wont_be_nil
|
256
257
|
end
|
257
258
|
|
@@ -267,6 +268,7 @@ describe 'Handlers' do
|
|
267
268
|
data['error'].must_equal('reject')
|
268
269
|
data['num_attempts'].must_equal(4)
|
269
270
|
data['payload'].must_equal(Base64.encode64(:reject.to_s))
|
271
|
+
data['properties'].must_equal(Base64.encode64(props_with_x_death_count.to_json))
|
270
272
|
Time.parse(data['failed_at']).wont_be_nil
|
271
273
|
end
|
272
274
|
|
@@ -316,6 +318,7 @@ describe 'Handlers' do
|
|
316
318
|
data['error'].must_equal('timeout')
|
317
319
|
data['num_attempts'].must_equal(2)
|
318
320
|
data['payload'].must_equal(Base64.encode64(:timeout.to_s))
|
321
|
+
data['properties'].must_equal(Base64.encode64(@props_with_x_death.to_json))
|
319
322
|
Time.parse(data['failed_at']).wont_be_nil
|
320
323
|
end
|
321
324
|
end
|
@@ -347,6 +350,7 @@ describe 'Handlers' do
|
|
347
350
|
data['backtrace'].wont_be_nil
|
348
351
|
data['num_attempts'].must_equal(2)
|
349
352
|
data['payload'].must_equal(Base64.encode64('boom!'))
|
353
|
+
data['properties'].must_equal(Base64.encode64(@props_with_x_death.to_json))
|
350
354
|
Time.parse(data['failed_at']).wont_be_nil
|
351
355
|
end
|
352
356
|
end
|
@@ -383,6 +387,7 @@ describe 'Handlers' do
|
|
383
387
|
data['error'].must_equal('timeout')
|
384
388
|
data['num_attempts'].must_equal(2)
|
385
389
|
data['payload'].must_equal(Base64.encode64(payload.to_json))
|
390
|
+
data['properties'].must_equal(Base64.encode64(@props_with_x_death.to_json))
|
386
391
|
end
|
387
392
|
|
388
393
|
end
|
@@ -159,19 +159,16 @@ describe Sneakers::Worker do
|
|
159
159
|
|
160
160
|
describe ".enqueue" do
|
161
161
|
it "publishes a message to the class queue" do
|
162
|
-
message =
|
163
|
-
mock = MiniTest::Mock.new
|
162
|
+
message = 'test message'
|
164
163
|
|
165
|
-
mock.
|
166
|
-
|
167
|
-
|
164
|
+
mock(Sneakers::Publisher).new(DummyWorker.queue_opts) do
|
165
|
+
mock(Object.new).publish(message, {
|
166
|
+
:routing_key => 'test.routing.key',
|
167
|
+
:to_queue => 'downloads'
|
168
|
+
})
|
168
169
|
end
|
169
|
-
end
|
170
170
|
|
171
|
-
|
172
|
-
opts = DummyWorker.queue_opts
|
173
|
-
mock(Sneakers::Publisher).new(opts) { mock(Object.new).publish(anything, anything) }
|
174
|
-
DummyWorker.enqueue(message)
|
171
|
+
DummyWorker.enqueue(message, :routing_key => 'test.routing.key')
|
175
172
|
end
|
176
173
|
end
|
177
174
|
|
@@ -361,7 +358,7 @@ describe Sneakers::Worker do
|
|
361
358
|
header = Object.new
|
362
359
|
|
363
360
|
mock(handler).timeout(header, nil, "msg")
|
364
|
-
mock(w.logger).error(/error="execution expired" error_class=
|
361
|
+
mock(w.logger).error(/error="execution expired" error_class=Sneakers::WorkerTimeout backtrace=/)
|
365
362
|
|
366
363
|
w.do_work(header, nil, "msg", handler)
|
367
364
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sneakers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dotan Nahum
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: serverengine
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 2.6.4
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 2.6.4
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: thread
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -268,6 +268,7 @@ files:
|
|
268
268
|
- lib/sneakers/concerns/metrics.rb
|
269
269
|
- lib/sneakers/configuration.rb
|
270
270
|
- lib/sneakers/error_reporter.rb
|
271
|
+
- lib/sneakers/errors.rb
|
271
272
|
- lib/sneakers/handlers/maxretry.rb
|
272
273
|
- lib/sneakers/handlers/oneshot.rb
|
273
274
|
- lib/sneakers/metrics/logging_metrics.rb
|
@@ -321,7 +322,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
321
322
|
version: '0'
|
322
323
|
requirements: []
|
323
324
|
rubyforge_project:
|
324
|
-
rubygems_version: 2.5
|
325
|
+
rubygems_version: 2.4.5
|
325
326
|
signing_key:
|
326
327
|
specification_version: 4
|
327
328
|
summary: Fast background processing framework for Ruby and RabbitMQ
|