diff --git a/lib/sidekiq/middleware/server/retry_jobs.rb b/lib/sidekiq/middleware/server/retry_jobs.rb index ffabd34b..55352046 100644 --- a/lib/sidekiq/middleware/server/retry_jobs.rb +++ b/lib/sidekiq/middleware/server/retry_jobs.rb @@ -51,7 +51,11 @@ module Sidekiq raise e unless msg['retry'] max_retry_attempts = retry_attempts_from(msg['retry'], DEFAULT_MAX_RETRY_ATTEMPTS) - msg['queue'] = queue + msg['queue'] = if msg['retry_queue'] + msg['retry_queue'] + else + queue + end msg['error_message'] = e.message msg['error_class'] = e.class.name count = if msg['retry_count'] diff --git a/test/test_retry.rb b/test/test_retry.rb index 6d742dda..1331a285 100644 --- a/test/test_retry.rb +++ b/test/test_retry.rb @@ -86,6 +86,24 @@ class TestRetry < MiniTest::Unit::TestCase @redis.verify end + it 'allows a retry queue' do + @redis.expect :zadd, 1, ['retry', String, String] + msg = { 'class' => 'Bob', 'args' => [1,2,'foo'], 'retry' => true, 'retry_queue' => 'retry' } + handler = Sidekiq::Middleware::Server::RetryJobs.new + assert_raises RuntimeError do + handler.call('', msg, 'default') do + raise "kerblammo!" + end + end + assert_equal 'retry', msg["queue"] + assert_equal 'kerblammo!', msg["error_message"] + assert_equal 'RuntimeError', msg["error_class"] + assert_equal 0, msg["retry_count"] + refute msg["error_backtrace"] + assert msg["failed_at"] + @redis.verify + end + it 'handles a recurring failed message' do @redis.expect :zadd, 1, ['retry', String, String] now = Time.now.utc