shoryuken 7.0.2 → 7.0.4
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/.github/workflows/push.yml +3 -3
- data/.github/workflows/specs.yml +32 -5
- data/.github/workflows/verify-action-pins.yml +1 -1
- data/.ruby-version +1 -1
- data/.yard-lint.yml +29 -1
- data/CHANGELOG.md +171 -0
- data/Gemfile.lint.lock +8 -7
- data/bin/cli/sqs.rb +67 -3
- data/bin/integrations +52 -34
- data/lib/active_job/extensions.rb +5 -8
- data/lib/active_job/queue_adapters/shoryuken_adapter.rb +6 -5
- data/lib/shoryuken/active_job/current_attributes.rb +33 -7
- data/lib/shoryuken/body_parser.rb +1 -2
- data/lib/shoryuken/client.rb +15 -6
- data/lib/shoryuken/default_exception_handler.rb +2 -3
- data/lib/shoryuken/errors.rb +2 -4
- data/lib/shoryuken/fetcher.rb +7 -1
- data/lib/shoryuken/helpers/atomic_counter.rb +6 -9
- data/lib/shoryuken/helpers/atomic_hash.rb +9 -15
- data/lib/shoryuken/helpers/hash_utils.rb +5 -7
- data/lib/shoryuken/helpers/string_utils.rb +6 -8
- data/lib/shoryuken/helpers/timer_task.rb +19 -2
- data/lib/shoryuken/inline_message.rb +3 -4
- data/lib/shoryuken/launcher.rb +19 -8
- data/lib/shoryuken/manager.rb +65 -6
- data/lib/shoryuken/message.rb +2 -3
- data/lib/shoryuken/middleware/chain.rb +7 -13
- data/lib/shoryuken/middleware/entry.rb +1 -2
- data/lib/shoryuken/middleware/server/auto_extend_visibility.rb +30 -2
- data/lib/shoryuken/middleware/server/exponential_backoff_retry.rb +40 -18
- data/lib/shoryuken/middleware/server/non_retryable_exception.rb +17 -8
- data/lib/shoryuken/middleware/server/timing.rb +2 -3
- data/lib/shoryuken/options.rb +37 -4
- data/lib/shoryuken/polling/base_strategy.rb +16 -23
- data/lib/shoryuken/polling/queue_configuration.rb +8 -12
- data/lib/shoryuken/polling/strict_priority.rb +26 -14
- data/lib/shoryuken/polling/weighted_round_robin.rb +40 -27
- data/lib/shoryuken/queue.rb +41 -4
- data/lib/shoryuken/util.rb +4 -1
- data/lib/shoryuken/version.rb +1 -1
- data/lib/shoryuken/worker/default_executor.rb +11 -5
- data/lib/shoryuken/worker/inline_executor.rb +10 -5
- data/lib/shoryuken/worker.rb +15 -13
- data/lib/shoryuken.rb +6 -3
- data/renovate.json +16 -2
- data/shoryuken.gemspec +9 -0
- data/spec/integration/active_job/current_attributes/cross_job_reset_spec.rb +47 -0
- data/spec/integration/active_job/current_attributes/incremental_persist_spec.rb +76 -0
- data/spec/integration/active_job/fifo_dedup_opt_out/fifo_dedup_opt_out_spec.rb +67 -0
- data/spec/integration/auto_extend_visibility/short_visibility_timeout_spec.rb +52 -0
- data/spec/integration/cli/find_all_spec.rb +120 -0
- data/spec/integration/concurrent_processing/processor_accounting_spec.rb +94 -0
- data/spec/integration/fifo_ordering/fifo_max_messages_cap_spec.rb +96 -0
- data/spec/integration/launcher/double_graceful_stop_spec.rb +71 -0
- data/spec/integration/launcher/embedded_dispatch_error_spec.rb +85 -0
- data/spec/integration/launcher/global_executor_preserved_spec.rb +76 -0
- data/spec/integration/launcher/graceful_stop_timeout_spec.rb +74 -0
- data/spec/integration/message_operations/partial_batch_delete_spec.rb +67 -0
- data/spec/integration/non_retryable_exception/non_retryable_exception_spec.rb +1 -1
- data/spec/integration/non_retryable_exception/with_retry_intervals_spec.rb +115 -0
- data/spec/integrations_helper.rb +10 -9
- data/spec/lib/shoryuken/client_spec.rb +62 -0
- data/spec/lib/shoryuken/fetcher_spec.rb +13 -0
- data/spec/lib/shoryuken/helpers/timer_task_spec.rb +24 -0
- data/spec/lib/shoryuken/launcher_spec.rb +38 -0
- data/spec/lib/shoryuken/manager_spec.rb +147 -0
- data/spec/lib/shoryuken/middleware/server/auto_extend_visibility_spec.rb +35 -0
- data/spec/lib/shoryuken/middleware/server/exponential_backoff_retry_spec.rb +88 -0
- data/spec/lib/shoryuken/polling/strict_priority_spec.rb +25 -0
- data/spec/lib/shoryuken/polling/weighted_round_robin_spec.rb +50 -0
- data/spec/lib/shoryuken/queue_spec.rb +123 -0
- data/spec/lib/shoryuken/util_spec.rb +26 -0
- data/spec/lib/shoryuken/worker/default_executor_spec.rb +13 -0
- data/spec/lib/shoryuken/worker/inline_executor_spec.rb +12 -0
- data/spec/shared_examples_for_active_job.rb +18 -0
- data/spec/spec_helper.rb +40 -20
- metadata +35 -3
|
@@ -99,6 +99,43 @@ RSpec.describe Shoryuken::Queue do
|
|
|
99
99
|
|
|
100
100
|
subject.delete_messages(entries: entries)
|
|
101
101
|
end
|
|
102
|
+
|
|
103
|
+
it 'returns true' do
|
|
104
|
+
failure = double(id: 'id', code: 'code', message: '...', sender_fault: false)
|
|
105
|
+
allow(sqs).to receive(:delete_message_batch).and_return(double(failed: [failure]))
|
|
106
|
+
allow(subject).to receive(:logger).and_return(double('Logger', error: nil))
|
|
107
|
+
|
|
108
|
+
expect(subject.delete_messages(entries: entries)).to be true
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
context 'when several deletes fail' do
|
|
113
|
+
let(:failures) do
|
|
114
|
+
[
|
|
115
|
+
double(id: '1', code: 'c1', message: 'm1', sender_fault: false),
|
|
116
|
+
double(id: '2', code: 'c2', message: 'm2', sender_fault: true)
|
|
117
|
+
]
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it 'logs every failure, not just the first' do
|
|
121
|
+
logger = double('Logger')
|
|
122
|
+
allow(sqs).to receive(:delete_message_batch).and_return(double(failed: failures))
|
|
123
|
+
allow(subject).to receive(:logger).and_return(logger)
|
|
124
|
+
|
|
125
|
+
# Real Logger#error returns true; that truthy return made the old `any?`
|
|
126
|
+
# short-circuit after the first failure, so the rest went unlogged.
|
|
127
|
+
expect(logger).to receive(:error).twice.and_return(true)
|
|
128
|
+
|
|
129
|
+
subject.delete_messages(entries: entries)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
context 'when all deletes succeed' do
|
|
134
|
+
it 'returns false' do
|
|
135
|
+
allow(sqs).to receive(:delete_message_batch).and_return(double(failed: []))
|
|
136
|
+
|
|
137
|
+
expect(subject.delete_messages(entries: entries)).to be false
|
|
138
|
+
end
|
|
102
139
|
end
|
|
103
140
|
end
|
|
104
141
|
|
|
@@ -150,6 +187,32 @@ RSpec.describe Shoryuken::Queue do
|
|
|
150
187
|
subject.send_message(message_body: 'original')
|
|
151
188
|
end
|
|
152
189
|
end
|
|
190
|
+
|
|
191
|
+
context 'when FIFO' do
|
|
192
|
+
before { allow(subject).to receive(:fifo?).and_return(true) }
|
|
193
|
+
|
|
194
|
+
it 'auto-generates message_group_id and message_deduplication_id by default' do
|
|
195
|
+
expect(sqs).to receive(:send_message) do |arg|
|
|
196
|
+
expect(arg[:message_group_id]).to eq described_class::MESSAGE_GROUP_ID
|
|
197
|
+
expect(arg[:message_deduplication_id]).to be
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
subject.send_message(message_body: 'msg1')
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
context 'and Shoryuken.fifo_message_deduplication is disabled' do
|
|
204
|
+
before { Shoryuken.fifo_message_deduplication = false }
|
|
205
|
+
|
|
206
|
+
it 'does not auto-generate a message_deduplication_id' do
|
|
207
|
+
expect(sqs).to receive(:send_message) do |arg|
|
|
208
|
+
expect(arg[:message_group_id]).to eq described_class::MESSAGE_GROUP_ID
|
|
209
|
+
expect(arg).not_to have_key(:message_deduplication_id)
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
subject.send_message(message_body: 'msg1')
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
end
|
|
153
216
|
end
|
|
154
217
|
|
|
155
218
|
describe '#send_messages' do
|
|
@@ -196,6 +259,26 @@ RSpec.describe Shoryuken::Queue do
|
|
|
196
259
|
|
|
197
260
|
subject.send_messages([{ message_body: 'msg1', message_attributes: { attr: 'attr1' } }])
|
|
198
261
|
end
|
|
262
|
+
|
|
263
|
+
it 'derives the id from the full body, so bodies differing only in an embedded id are not deduplicated' do
|
|
264
|
+
# Guards the ActiveJob opt-out path: when the adapter omits its own id
|
|
265
|
+
# (active_job dedup disabled), this fallback still hashes the full body
|
|
266
|
+
# - which for ActiveJob includes the per-enqueue job_id - so distinct
|
|
267
|
+
# enqueues get distinct ids and are NOT silently collapsed by SQS.
|
|
268
|
+
expect(sqs).to receive(:send_message_batch) do |arg|
|
|
269
|
+
ids = arg[:entries].map { |e| e[:message_deduplication_id] }
|
|
270
|
+
|
|
271
|
+
expect(ids).to all(be)
|
|
272
|
+
expect(ids.uniq.length).to eq(2)
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
subject.send_messages(
|
|
276
|
+
[
|
|
277
|
+
{ message_body: JSON.dump('job_id' => 'a', 'arguments' => ['same']) },
|
|
278
|
+
{ message_body: JSON.dump('job_id' => 'b', 'arguments' => ['same']) }
|
|
279
|
+
]
|
|
280
|
+
)
|
|
281
|
+
end
|
|
199
282
|
end
|
|
200
283
|
|
|
201
284
|
context 'and message_group_id and message_deduplication_id are present' do
|
|
@@ -217,6 +300,33 @@ RSpec.describe Shoryuken::Queue do
|
|
|
217
300
|
)
|
|
218
301
|
end
|
|
219
302
|
end
|
|
303
|
+
|
|
304
|
+
context 'and Shoryuken.fifo_message_deduplication is disabled' do
|
|
305
|
+
before { Shoryuken.fifo_message_deduplication = false }
|
|
306
|
+
|
|
307
|
+
it 'does not auto-generate a message_deduplication_id' do
|
|
308
|
+
expect(sqs).to receive(:send_message_batch) do |arg|
|
|
309
|
+
first_entry = arg[:entries].first
|
|
310
|
+
|
|
311
|
+
expect(first_entry[:message_group_id]).to eq described_class::MESSAGE_GROUP_ID
|
|
312
|
+
expect(first_entry).not_to have_key(:message_deduplication_id)
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
subject.send_messages([{ message_body: 'msg1', message_attributes: { attr: 'attr1' } }])
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
it 'still honors an explicit message_deduplication_id' do
|
|
319
|
+
expect(sqs).to receive(:send_message_batch) do |arg|
|
|
320
|
+
first_entry = arg[:entries].first
|
|
321
|
+
|
|
322
|
+
expect(first_entry[:message_deduplication_id]).to eq 'my id'
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
subject.send_messages(
|
|
326
|
+
[{ message_body: 'msg1', message_attributes: { attr: 'attr1' }, message_deduplication_id: 'my id' }]
|
|
327
|
+
)
|
|
328
|
+
end
|
|
329
|
+
end
|
|
220
330
|
end
|
|
221
331
|
|
|
222
332
|
it 'accepts an array of string' do
|
|
@@ -228,6 +338,19 @@ RSpec.describe Shoryuken::Queue do
|
|
|
228
338
|
|
|
229
339
|
subject.send_messages(%w[msg1 msg2])
|
|
230
340
|
end
|
|
341
|
+
|
|
342
|
+
context 'when some sends fail' do
|
|
343
|
+
it 'logs each failure (so bulk/enqueue_all drops are not silent)' do
|
|
344
|
+
failure = double(id: '1', code: 'code', message: '...', sender_fault: false)
|
|
345
|
+
logger = double('Logger')
|
|
346
|
+
allow(sqs).to receive(:send_message_batch).and_return(double(failed: [failure]))
|
|
347
|
+
allow(subject).to receive(:logger).and_return(logger)
|
|
348
|
+
|
|
349
|
+
expect(logger).to receive(:error)
|
|
350
|
+
|
|
351
|
+
subject.send_messages(entries: [{ id: '0', message_body: 'msg1' }])
|
|
352
|
+
end
|
|
353
|
+
end
|
|
231
354
|
end
|
|
232
355
|
|
|
233
356
|
describe '#fifo?' do
|
|
@@ -69,5 +69,31 @@ describe 'Shoryuken::Util' do
|
|
|
69
69
|
expect(value_holder).to receive(:value=).with([:with_options, { my_option: :some_option }])
|
|
70
70
|
subject.fire_event(:some_event, false, my_option: :some_option)
|
|
71
71
|
end
|
|
72
|
+
|
|
73
|
+
it 'fires handlers in reverse order consistently across repeated reverse firings' do
|
|
74
|
+
order = []
|
|
75
|
+
Shoryuken.options[:lifecycle_events][:some_event] = [
|
|
76
|
+
->(_) { order << :a },
|
|
77
|
+
->(_) { order << :b },
|
|
78
|
+
->(_) { order << :c }
|
|
79
|
+
]
|
|
80
|
+
|
|
81
|
+
# e.g. :shutdown is fired with reverse: true and can fire more than once
|
|
82
|
+
# (stop then stop!); every firing must use the same reversed order.
|
|
83
|
+
subject.fire_event(:some_event, true)
|
|
84
|
+
subject.fire_event(:some_event, true)
|
|
85
|
+
|
|
86
|
+
expect(order).to eq(%i[c b a c b a])
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it 'does not mutate the stored handler array when firing in reverse' do
|
|
90
|
+
handlers = [->(_) {}, ->(_) {}]
|
|
91
|
+
original = handlers.dup
|
|
92
|
+
Shoryuken.options[:lifecycle_events][:some_event] = handlers
|
|
93
|
+
|
|
94
|
+
subject.fire_event(:some_event, true)
|
|
95
|
+
|
|
96
|
+
expect(Shoryuken.options[:lifecycle_events][:some_event]).to eq(original)
|
|
97
|
+
end
|
|
72
98
|
end
|
|
73
99
|
end
|
|
@@ -101,5 +101,18 @@ RSpec.describe Shoryuken::Worker::DefaultExecutor do
|
|
|
101
101
|
|
|
102
102
|
TestWorker.perform_async('delayed message', queue: new_queue)
|
|
103
103
|
end
|
|
104
|
+
|
|
105
|
+
it 'does not mutate the caller-supplied options hash' do
|
|
106
|
+
allow(sqs_queue).to receive(:send_message)
|
|
107
|
+
|
|
108
|
+
options = { queue: queue, message_attributes: { 'custom' => { string_value: 'v', data_type: 'String' } } }
|
|
109
|
+
|
|
110
|
+
TestWorker.perform_async('message', options)
|
|
111
|
+
|
|
112
|
+
# :queue must not be deleted, :message_body must not be injected, and the
|
|
113
|
+
# nested message_attributes must not gain shoryuken_class - otherwise a
|
|
114
|
+
# reused options hash would reroute/corrupt later enqueues.
|
|
115
|
+
expect(options).to eq(queue: queue, message_attributes: { 'custom' => { string_value: 'v', data_type: 'String' } })
|
|
116
|
+
end
|
|
104
117
|
end
|
|
105
118
|
end
|
|
@@ -25,6 +25,18 @@ RSpec.describe Shoryuken::Worker::InlineExecutor do
|
|
|
25
25
|
|
|
26
26
|
TestWorker.perform_async('test', message_attributes: custom_attributes)
|
|
27
27
|
end
|
|
28
|
+
|
|
29
|
+
it 'does not mutate the caller-supplied options hash' do
|
|
30
|
+
allow_any_instance_of(TestWorker).to receive(:perform)
|
|
31
|
+
|
|
32
|
+
options = { queue: 'a_queue', message_attributes: { 'custom' => { string_value: 'v', data_type: 'String' } } }
|
|
33
|
+
|
|
34
|
+
TestWorker.perform_async('test', options)
|
|
35
|
+
|
|
36
|
+
# :queue and :message_attributes must survive intact so a reused options
|
|
37
|
+
# hash routes later jobs correctly instead of falling back to the default.
|
|
38
|
+
expect(options).to eq(queue: 'a_queue', message_attributes: { 'custom' => { string_value: 'v', data_type: 'String' } })
|
|
39
|
+
end
|
|
28
40
|
end
|
|
29
41
|
|
|
30
42
|
describe '.perform_in' do
|
|
@@ -55,6 +55,24 @@ RSpec.shared_examples 'active_job_adapters' do
|
|
|
55
55
|
subject.enqueue(job)
|
|
56
56
|
end
|
|
57
57
|
|
|
58
|
+
context 'when active_job_fifo_message_deduplication is disabled' do
|
|
59
|
+
before { Shoryuken.active_job_fifo_message_deduplication = false }
|
|
60
|
+
|
|
61
|
+
it 'does not set an auto-generated message_deduplication_id' do
|
|
62
|
+
expect(queue).to receive(:send_message) do |hash|
|
|
63
|
+
expect(hash).not_to have_key(:message_deduplication_id)
|
|
64
|
+
end
|
|
65
|
+
subject.enqueue(job)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'still honors an explicit message_deduplication_id' do
|
|
69
|
+
expect(queue).to receive(:send_message) do |hash|
|
|
70
|
+
expect(hash[:message_deduplication_id]).to eq('explicit-id')
|
|
71
|
+
end
|
|
72
|
+
subject.enqueue(job, message_deduplication_id: 'explicit-id')
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
58
76
|
context 'with message_deduplication_id' do
|
|
59
77
|
context 'when message_deduplication_id is specified in options' do
|
|
60
78
|
it 'should enqueue a message with the deduplication_id specified in options' do
|
data/spec/spec_helper.rb
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
require 'warning'
|
|
4
|
+
|
|
5
5
|
$VERBOSE = true
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
if Warning.respond_to?(:categories)
|
|
8
|
+
(Warning.categories - %i[experimental]).each do |cat|
|
|
9
|
+
Warning[cat] = true
|
|
10
|
+
end
|
|
11
|
+
end
|
|
8
12
|
|
|
9
13
|
Warning.process do |warning|
|
|
10
14
|
# Only check warnings from our code (not dependencies)
|
|
@@ -13,10 +17,6 @@ Warning.process do |warning|
|
|
|
13
17
|
# Filter out warnings we don't care about in specs
|
|
14
18
|
next if warning.include?('_spec')
|
|
15
19
|
|
|
16
|
-
# We redefine methods to simulate various scenarios in tests
|
|
17
|
-
next if warning.include?('previous definition of')
|
|
18
|
-
next if warning.include?('method redefined')
|
|
19
|
-
|
|
20
20
|
# Ignore vendor and bundle directories
|
|
21
21
|
next if warning.include?('vendor/')
|
|
22
22
|
next if warning.include?('bundle/')
|
|
@@ -43,23 +43,23 @@ Dotenv.load
|
|
|
43
43
|
unless ENV['SIMPLECOV_DISABLED']
|
|
44
44
|
require 'simplecov'
|
|
45
45
|
SimpleCov.start do
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
46
|
+
skip '/spec/'
|
|
47
|
+
skip '/test_workers/'
|
|
48
|
+
skip '/examples/'
|
|
49
|
+
skip '/vendor/'
|
|
50
|
+
skip '/.bundle/'
|
|
51
|
+
|
|
52
|
+
group 'Library', 'lib/'
|
|
53
|
+
group 'ActiveJob', 'lib/active_job'
|
|
54
|
+
group 'Middleware', 'lib/shoryuken/middleware'
|
|
55
|
+
group 'Polling', 'lib/shoryuken/polling'
|
|
56
|
+
group 'Workers', 'lib/shoryuken/worker'
|
|
57
|
+
group 'Helpers', 'lib/shoryuken/helpers'
|
|
58
58
|
|
|
59
59
|
enable_coverage :branch
|
|
60
60
|
|
|
61
61
|
minimum_coverage 89
|
|
62
|
-
|
|
62
|
+
coverage(:line) { minimum 60, per: :file }
|
|
63
63
|
end
|
|
64
64
|
end
|
|
65
65
|
|
|
@@ -77,6 +77,24 @@ class TestWorker
|
|
|
77
77
|
def perform(sqs_msg, body); end
|
|
78
78
|
end
|
|
79
79
|
|
|
80
|
+
# Emit a full Ruby thread dump when the process receives USR1. The CI
|
|
81
|
+
# watchdog (specs.yml) sends this signal when unit specs run longer than
|
|
82
|
+
# expected so we can see exactly which thread is stuck without waiting for the
|
|
83
|
+
# job-level timeout to kill the process silently.
|
|
84
|
+
if Signal.list.key?('USR1')
|
|
85
|
+
Signal.trap('USR1') do
|
|
86
|
+
# Signal handlers run in a restricted context; use a plain IO write
|
|
87
|
+
# rather than puts/logger to stay async-signal safe.
|
|
88
|
+
output = +"\n=== Thread dump (USR1 watchdog) ===\n"
|
|
89
|
+
Thread.list.each do |t|
|
|
90
|
+
output << "--- Thread #{t.object_id} [#{t.status}] ---\n"
|
|
91
|
+
output << ((t.backtrace || ['(no backtrace)']).join("\n")) << "\n"
|
|
92
|
+
end
|
|
93
|
+
output << "=== End thread dump ===\n"
|
|
94
|
+
$stderr.write(output)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
80
98
|
RSpec.configure do |config|
|
|
81
99
|
config.before do
|
|
82
100
|
Shoryuken::Client.class_variable_set :@@queues, {}
|
|
@@ -98,6 +116,8 @@ RSpec.configure do |config|
|
|
|
98
116
|
TestWorker.get_shoryuken_options['queue'] = 'default'
|
|
99
117
|
|
|
100
118
|
Shoryuken.active_job_queue_name_prefixing = false
|
|
119
|
+
Shoryuken.active_job_fifo_message_deduplication = true
|
|
120
|
+
Shoryuken.fifo_message_deduplication = true
|
|
101
121
|
|
|
102
122
|
Shoryuken.worker_registry.clear
|
|
103
123
|
Shoryuken.register_worker('default', TestWorker)
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: shoryuken
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 7.0.
|
|
4
|
+
version: 7.0.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Pablo Cantero
|
|
@@ -223,13 +223,16 @@ files:
|
|
|
223
223
|
- spec/integration/active_job/bulk_enqueue/bulk_enqueue_spec.rb
|
|
224
224
|
- spec/integration/active_job/current_attributes/bulk_enqueue_spec.rb
|
|
225
225
|
- spec/integration/active_job/current_attributes/complex_types_spec.rb
|
|
226
|
+
- spec/integration/active_job/current_attributes/cross_job_reset_spec.rb
|
|
226
227
|
- spec/integration/active_job/current_attributes/empty_context_spec.rb
|
|
227
228
|
- spec/integration/active_job/current_attributes/full_context_spec.rb
|
|
229
|
+
- spec/integration/active_job/current_attributes/incremental_persist_spec.rb
|
|
228
230
|
- spec/integration/active_job/current_attributes/partial_context_spec.rb
|
|
229
231
|
- spec/integration/active_job/custom_attributes/number_attributes_spec.rb
|
|
230
232
|
- spec/integration/active_job/custom_attributes/string_attributes_spec.rb
|
|
231
233
|
- spec/integration/active_job/error_handling/job_wrapper_spec.rb
|
|
232
234
|
- spec/integration/active_job/fifo_and_attributes/deduplication_spec.rb
|
|
235
|
+
- spec/integration/active_job/fifo_dedup_opt_out/fifo_dedup_opt_out_spec.rb
|
|
233
236
|
- spec/integration/active_job/keyword_arguments/keyword_arguments_spec.rb
|
|
234
237
|
- spec/integration/active_job/retry/discard_on_spec.rb
|
|
235
238
|
- spec/integration/active_job/retry/retry_on_spec.rb
|
|
@@ -238,26 +241,36 @@ files:
|
|
|
238
241
|
- spec/integration/active_record_middleware/active_record_middleware_spec.rb
|
|
239
242
|
- spec/integration/auto_delete/auto_delete_spec.rb
|
|
240
243
|
- spec/integration/auto_extend_visibility/auto_extend_visibility_spec.rb
|
|
244
|
+
- spec/integration/auto_extend_visibility/short_visibility_timeout_spec.rb
|
|
241
245
|
- spec/integration/aws_config/aws_config_spec.rb
|
|
242
246
|
- spec/integration/batch_processing/batch_processing_spec.rb
|
|
243
247
|
- spec/integration/body_parser/json_parser_spec.rb
|
|
244
248
|
- spec/integration/body_parser/proc_parser_spec.rb
|
|
245
249
|
- spec/integration/body_parser/text_parser_spec.rb
|
|
250
|
+
- spec/integration/cli/find_all_spec.rb
|
|
246
251
|
- spec/integration/concurrent_processing/concurrent_processing_spec.rb
|
|
252
|
+
- spec/integration/concurrent_processing/processor_accounting_spec.rb
|
|
247
253
|
- spec/integration/custom_group_polling_strategy/custom_group_polling_strategy_spec.rb
|
|
248
254
|
- spec/integration/dead_letter_queue/dead_letter_queue_spec.rb
|
|
249
255
|
- spec/integration/exception_handlers/exception_handlers_spec.rb
|
|
250
256
|
- spec/integration/exponential_backoff/exponential_backoff_spec.rb
|
|
257
|
+
- spec/integration/fifo_ordering/fifo_max_messages_cap_spec.rb
|
|
251
258
|
- spec/integration/fifo_ordering/fifo_ordering_spec.rb
|
|
252
259
|
- spec/integration/large_payloads/large_payloads_spec.rb
|
|
260
|
+
- spec/integration/launcher/double_graceful_stop_spec.rb
|
|
261
|
+
- spec/integration/launcher/embedded_dispatch_error_spec.rb
|
|
262
|
+
- spec/integration/launcher/global_executor_preserved_spec.rb
|
|
263
|
+
- spec/integration/launcher/graceful_stop_timeout_spec.rb
|
|
253
264
|
- spec/integration/launcher/launcher_spec.rb
|
|
254
265
|
- spec/integration/message_attributes/message_attributes_spec.rb
|
|
255
266
|
- spec/integration/message_operations/message_operations_spec.rb
|
|
267
|
+
- spec/integration/message_operations/partial_batch_delete_spec.rb
|
|
256
268
|
- spec/integration/middleware_chain/empty_chain_spec.rb
|
|
257
269
|
- spec/integration/middleware_chain/execution_order_spec.rb
|
|
258
270
|
- spec/integration/middleware_chain/removal_spec.rb
|
|
259
271
|
- spec/integration/middleware_chain/short_circuit_spec.rb
|
|
260
272
|
- spec/integration/non_retryable_exception/non_retryable_exception_spec.rb
|
|
273
|
+
- spec/integration/non_retryable_exception/with_retry_intervals_spec.rb
|
|
261
274
|
- spec/integration/polling_strategies/polling_strategies_spec.rb
|
|
262
275
|
- spec/integration/queue_operations/queue_operations_spec.rb
|
|
263
276
|
- spec/integration/rails/rails_72/Gemfile
|
|
@@ -329,7 +342,13 @@ files:
|
|
|
329
342
|
homepage: https://github.com/ruby-shoryuken/shoryuken
|
|
330
343
|
licenses:
|
|
331
344
|
- LGPL-3.0
|
|
332
|
-
metadata:
|
|
345
|
+
metadata:
|
|
346
|
+
homepage_uri: https://github.com/ruby-shoryuken/shoryuken
|
|
347
|
+
source_code_uri: https://github.com/ruby-shoryuken/shoryuken
|
|
348
|
+
changelog_uri: https://github.com/ruby-shoryuken/shoryuken/blob/main/CHANGELOG.md
|
|
349
|
+
bug_tracker_uri: https://github.com/ruby-shoryuken/shoryuken/issues
|
|
350
|
+
documentation_uri: https://github.com/ruby-shoryuken/shoryuken
|
|
351
|
+
rubygems_mfa_required: 'true'
|
|
333
352
|
rdoc_options: []
|
|
334
353
|
require_paths:
|
|
335
354
|
- lib
|
|
@@ -344,7 +363,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
344
363
|
- !ruby/object:Gem::Version
|
|
345
364
|
version: '0'
|
|
346
365
|
requirements: []
|
|
347
|
-
rubygems_version: 4.0.
|
|
366
|
+
rubygems_version: 4.0.20
|
|
348
367
|
specification_version: 4
|
|
349
368
|
summary: Shoryuken is a super efficient AWS SQS thread based message processor
|
|
350
369
|
test_files:
|
|
@@ -353,13 +372,16 @@ test_files:
|
|
|
353
372
|
- spec/integration/active_job/bulk_enqueue/bulk_enqueue_spec.rb
|
|
354
373
|
- spec/integration/active_job/current_attributes/bulk_enqueue_spec.rb
|
|
355
374
|
- spec/integration/active_job/current_attributes/complex_types_spec.rb
|
|
375
|
+
- spec/integration/active_job/current_attributes/cross_job_reset_spec.rb
|
|
356
376
|
- spec/integration/active_job/current_attributes/empty_context_spec.rb
|
|
357
377
|
- spec/integration/active_job/current_attributes/full_context_spec.rb
|
|
378
|
+
- spec/integration/active_job/current_attributes/incremental_persist_spec.rb
|
|
358
379
|
- spec/integration/active_job/current_attributes/partial_context_spec.rb
|
|
359
380
|
- spec/integration/active_job/custom_attributes/number_attributes_spec.rb
|
|
360
381
|
- spec/integration/active_job/custom_attributes/string_attributes_spec.rb
|
|
361
382
|
- spec/integration/active_job/error_handling/job_wrapper_spec.rb
|
|
362
383
|
- spec/integration/active_job/fifo_and_attributes/deduplication_spec.rb
|
|
384
|
+
- spec/integration/active_job/fifo_dedup_opt_out/fifo_dedup_opt_out_spec.rb
|
|
363
385
|
- spec/integration/active_job/keyword_arguments/keyword_arguments_spec.rb
|
|
364
386
|
- spec/integration/active_job/retry/discard_on_spec.rb
|
|
365
387
|
- spec/integration/active_job/retry/retry_on_spec.rb
|
|
@@ -368,26 +390,36 @@ test_files:
|
|
|
368
390
|
- spec/integration/active_record_middleware/active_record_middleware_spec.rb
|
|
369
391
|
- spec/integration/auto_delete/auto_delete_spec.rb
|
|
370
392
|
- spec/integration/auto_extend_visibility/auto_extend_visibility_spec.rb
|
|
393
|
+
- spec/integration/auto_extend_visibility/short_visibility_timeout_spec.rb
|
|
371
394
|
- spec/integration/aws_config/aws_config_spec.rb
|
|
372
395
|
- spec/integration/batch_processing/batch_processing_spec.rb
|
|
373
396
|
- spec/integration/body_parser/json_parser_spec.rb
|
|
374
397
|
- spec/integration/body_parser/proc_parser_spec.rb
|
|
375
398
|
- spec/integration/body_parser/text_parser_spec.rb
|
|
399
|
+
- spec/integration/cli/find_all_spec.rb
|
|
376
400
|
- spec/integration/concurrent_processing/concurrent_processing_spec.rb
|
|
401
|
+
- spec/integration/concurrent_processing/processor_accounting_spec.rb
|
|
377
402
|
- spec/integration/custom_group_polling_strategy/custom_group_polling_strategy_spec.rb
|
|
378
403
|
- spec/integration/dead_letter_queue/dead_letter_queue_spec.rb
|
|
379
404
|
- spec/integration/exception_handlers/exception_handlers_spec.rb
|
|
380
405
|
- spec/integration/exponential_backoff/exponential_backoff_spec.rb
|
|
406
|
+
- spec/integration/fifo_ordering/fifo_max_messages_cap_spec.rb
|
|
381
407
|
- spec/integration/fifo_ordering/fifo_ordering_spec.rb
|
|
382
408
|
- spec/integration/large_payloads/large_payloads_spec.rb
|
|
409
|
+
- spec/integration/launcher/double_graceful_stop_spec.rb
|
|
410
|
+
- spec/integration/launcher/embedded_dispatch_error_spec.rb
|
|
411
|
+
- spec/integration/launcher/global_executor_preserved_spec.rb
|
|
412
|
+
- spec/integration/launcher/graceful_stop_timeout_spec.rb
|
|
383
413
|
- spec/integration/launcher/launcher_spec.rb
|
|
384
414
|
- spec/integration/message_attributes/message_attributes_spec.rb
|
|
385
415
|
- spec/integration/message_operations/message_operations_spec.rb
|
|
416
|
+
- spec/integration/message_operations/partial_batch_delete_spec.rb
|
|
386
417
|
- spec/integration/middleware_chain/empty_chain_spec.rb
|
|
387
418
|
- spec/integration/middleware_chain/execution_order_spec.rb
|
|
388
419
|
- spec/integration/middleware_chain/removal_spec.rb
|
|
389
420
|
- spec/integration/middleware_chain/short_circuit_spec.rb
|
|
390
421
|
- spec/integration/non_retryable_exception/non_retryable_exception_spec.rb
|
|
422
|
+
- spec/integration/non_retryable_exception/with_retry_intervals_spec.rb
|
|
391
423
|
- spec/integration/polling_strategies/polling_strategies_spec.rb
|
|
392
424
|
- spec/integration/queue_operations/queue_operations_spec.rb
|
|
393
425
|
- spec/integration/rails/rails_72/Gemfile
|