sneakers 2.4.0 → 2.5.0
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/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
|