Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions lib/active_job/queue_adapters/shoryuken_adapter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ def enqueue(job, options = {}) # :nodoc:
# @param job [ActiveJob::Base] the job to enqueue
# @param timestamp [Float] Unix timestamp when the job should be processed
# @return [Aws::SQS::Types::SendMessageResult] the send result
# @raise [ArgumentError] if delay is used with a FIFO queue
# @raise [Shoryuken::Errors::FifoDelayNotSupportedError] if delay is used with a FIFO queue
def enqueue_at(job, timestamp) # :nodoc:
delay = calculate_delay(timestamp)

Expand All @@ -110,7 +110,7 @@ def enqueue_at(job, timestamp) # :nodoc:
if delay.positive?
queue = Shoryuken::Client.queues(job.queue_name)
if queue.fifo?
raise ArgumentError,
raise Shoryuken::Errors::FifoDelayNotSupportedError,
"FIFO queue '#{queue.name}' does not support per-message delays. " \
'When using ActiveJob retry_on with FIFO queues, set `wait: 0`.'
end
Expand Down
3 changes: 3 additions & 0 deletions lib/shoryuken/errors.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ module Errors
# Raised when a delay exceeds the maximum allowed by SQS (15 minutes)
InvalidDelayError = Class.new(BaseError)

# Raised when a delay is used with a FIFO queue
FifoDelayNotSupportedError = Class.new(BaseError)

# Raised when an ARN format is invalid
InvalidArnError = Class.new(BaseError)
end
Expand Down
4 changes: 2 additions & 2 deletions spec/shared_examples_for_active_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -285,13 +285,13 @@ class TestJob < ActiveJob::Base; end
context 'when fifo' do
let(:fifo) { true }

it 'raises ArgumentError when delay is positive' do
it 'raises FifoDelayNotSupportedError when delay is positive' do
allow(subject).to receive(:calculate_delay).and_return(3)
allow(queue).to receive(:name).and_return('test.fifo')
expect(queue).not_to receive(:send_message)

expect { subject.enqueue_at(job, nil) }.to raise_error(
ArgumentError, /FIFO queue.*does not support per-message delays/
Shoryuken::Errors::FifoDelayNotSupportedError, /FIFO queue.*does not support per-message delays/
)
end

Expand Down
Loading