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.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/push.yml +3 -3
  3. data/.github/workflows/specs.yml +32 -5
  4. data/.github/workflows/verify-action-pins.yml +1 -1
  5. data/.ruby-version +1 -1
  6. data/.yard-lint.yml +29 -1
  7. data/CHANGELOG.md +171 -0
  8. data/Gemfile.lint.lock +8 -7
  9. data/bin/cli/sqs.rb +67 -3
  10. data/bin/integrations +52 -34
  11. data/lib/active_job/extensions.rb +5 -8
  12. data/lib/active_job/queue_adapters/shoryuken_adapter.rb +6 -5
  13. data/lib/shoryuken/active_job/current_attributes.rb +33 -7
  14. data/lib/shoryuken/body_parser.rb +1 -2
  15. data/lib/shoryuken/client.rb +15 -6
  16. data/lib/shoryuken/default_exception_handler.rb +2 -3
  17. data/lib/shoryuken/errors.rb +2 -4
  18. data/lib/shoryuken/fetcher.rb +7 -1
  19. data/lib/shoryuken/helpers/atomic_counter.rb +6 -9
  20. data/lib/shoryuken/helpers/atomic_hash.rb +9 -15
  21. data/lib/shoryuken/helpers/hash_utils.rb +5 -7
  22. data/lib/shoryuken/helpers/string_utils.rb +6 -8
  23. data/lib/shoryuken/helpers/timer_task.rb +19 -2
  24. data/lib/shoryuken/inline_message.rb +3 -4
  25. data/lib/shoryuken/launcher.rb +19 -8
  26. data/lib/shoryuken/manager.rb +65 -6
  27. data/lib/shoryuken/message.rb +2 -3
  28. data/lib/shoryuken/middleware/chain.rb +7 -13
  29. data/lib/shoryuken/middleware/entry.rb +1 -2
  30. data/lib/shoryuken/middleware/server/auto_extend_visibility.rb +30 -2
  31. data/lib/shoryuken/middleware/server/exponential_backoff_retry.rb +40 -18
  32. data/lib/shoryuken/middleware/server/non_retryable_exception.rb +17 -8
  33. data/lib/shoryuken/middleware/server/timing.rb +2 -3
  34. data/lib/shoryuken/options.rb +37 -4
  35. data/lib/shoryuken/polling/base_strategy.rb +16 -23
  36. data/lib/shoryuken/polling/queue_configuration.rb +8 -12
  37. data/lib/shoryuken/polling/strict_priority.rb +26 -14
  38. data/lib/shoryuken/polling/weighted_round_robin.rb +40 -27
  39. data/lib/shoryuken/queue.rb +41 -4
  40. data/lib/shoryuken/util.rb +4 -1
  41. data/lib/shoryuken/version.rb +1 -1
  42. data/lib/shoryuken/worker/default_executor.rb +11 -5
  43. data/lib/shoryuken/worker/inline_executor.rb +10 -5
  44. data/lib/shoryuken/worker.rb +15 -13
  45. data/lib/shoryuken.rb +6 -3
  46. data/renovate.json +16 -2
  47. data/shoryuken.gemspec +9 -0
  48. data/spec/integration/active_job/current_attributes/cross_job_reset_spec.rb +47 -0
  49. data/spec/integration/active_job/current_attributes/incremental_persist_spec.rb +76 -0
  50. data/spec/integration/active_job/fifo_dedup_opt_out/fifo_dedup_opt_out_spec.rb +67 -0
  51. data/spec/integration/auto_extend_visibility/short_visibility_timeout_spec.rb +52 -0
  52. data/spec/integration/cli/find_all_spec.rb +120 -0
  53. data/spec/integration/concurrent_processing/processor_accounting_spec.rb +94 -0
  54. data/spec/integration/fifo_ordering/fifo_max_messages_cap_spec.rb +96 -0
  55. data/spec/integration/launcher/double_graceful_stop_spec.rb +71 -0
  56. data/spec/integration/launcher/embedded_dispatch_error_spec.rb +85 -0
  57. data/spec/integration/launcher/global_executor_preserved_spec.rb +76 -0
  58. data/spec/integration/launcher/graceful_stop_timeout_spec.rb +74 -0
  59. data/spec/integration/message_operations/partial_batch_delete_spec.rb +67 -0
  60. data/spec/integration/non_retryable_exception/non_retryable_exception_spec.rb +1 -1
  61. data/spec/integration/non_retryable_exception/with_retry_intervals_spec.rb +115 -0
  62. data/spec/integrations_helper.rb +10 -9
  63. data/spec/lib/shoryuken/client_spec.rb +62 -0
  64. data/spec/lib/shoryuken/fetcher_spec.rb +13 -0
  65. data/spec/lib/shoryuken/helpers/timer_task_spec.rb +24 -0
  66. data/spec/lib/shoryuken/launcher_spec.rb +38 -0
  67. data/spec/lib/shoryuken/manager_spec.rb +147 -0
  68. data/spec/lib/shoryuken/middleware/server/auto_extend_visibility_spec.rb +35 -0
  69. data/spec/lib/shoryuken/middleware/server/exponential_backoff_retry_spec.rb +88 -0
  70. data/spec/lib/shoryuken/polling/strict_priority_spec.rb +25 -0
  71. data/spec/lib/shoryuken/polling/weighted_round_robin_spec.rb +50 -0
  72. data/spec/lib/shoryuken/queue_spec.rb +123 -0
  73. data/spec/lib/shoryuken/util_spec.rb +26 -0
  74. data/spec/lib/shoryuken/worker/default_executor_spec.rb +13 -0
  75. data/spec/lib/shoryuken/worker/inline_executor_spec.rb +12 -0
  76. data/spec/shared_examples_for_active_job.rb +18 -0
  77. data/spec/spec_helper.rb +40 -20
  78. 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
- Warning[:performance] = true if RUBY_VERSION >= '3.3'
4
- Warning[:deprecated] = true
3
+ require 'warning'
4
+
5
5
  $VERBOSE = true
6
6
 
7
- require 'warning'
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
- add_filter '/spec/'
47
- add_filter '/test_workers/'
48
- add_filter '/examples/'
49
- add_filter '/vendor/'
50
- add_filter '/.bundle/'
51
-
52
- add_group 'Library', 'lib/'
53
- add_group 'ActiveJob', 'lib/active_job'
54
- add_group 'Middleware', 'lib/shoryuken/middleware'
55
- add_group 'Polling', 'lib/shoryuken/polling'
56
- add_group 'Workers', 'lib/shoryuken/worker'
57
- add_group 'Helpers', 'lib/shoryuken/helpers'
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
- minimum_coverage_by_file 60
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.2
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.6
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