diff options
author | Jeroen van Baarsen <jeroenvanbaarsen@gmail.com> | 2015-05-07 15:57:33 +0200 |
---|---|---|
committer | Jeroen van Baarsen <jeroenvanbaarsen@gmail.com> | 2015-05-07 21:48:50 +0200 |
commit | 52d131826e46d1a4606b71ddbf57db0f75f040e0 (patch) | |
tree | be507d4c0fa5f2dfc0dcba6210099d7d1b75f6bf | |
parent | d84bfaa8530e42188f0361efb5a61c73948192e6 (diff) | |
download | rails-52d131826e46d1a4606b71ddbf57db0f75f040e0.tar.gz rails-52d131826e46d1a4606b71ddbf57db0f75f040e0.tar.bz2 rails-52d131826e46d1a4606b71ddbf57db0f75f040e0.zip |
Let Sidekiq set provider_job_id
When a job is added to Sidekiq by ActiveJob, make sure we still can get the
original job_id provider by Sidekiq. We do this by adding the sidekiq jid to
provider_job_id field on the job object.
Partly fixes #18821
Signed-off-by: Jeroen van Baarsen <jeroenvanbaarsen@gmail.com>
-rw-r--r-- | activejob/CHANGELOG.md | 5 | ||||
-rw-r--r-- | activejob/lib/active_job/queue_adapters/sidekiq_adapter.rb | 8 | ||||
-rw-r--r-- | activejob/test/integration/queuing_test.rb | 10 |
3 files changed, 21 insertions, 2 deletions
diff --git a/activejob/CHANGELOG.md b/activejob/CHANGELOG.md index 6f9aa76a1f..9c5806a4db 100644 --- a/activejob/CHANGELOG.md +++ b/activejob/CHANGELOG.md @@ -1,3 +1,8 @@ +* Allow `Sidekiq` to report the job id back to `ActiveJob::Base` as + `provider_job_id` + + *Jeroen van Baarsen* + * Allow `DelayedJob` to report id back to `ActiveJob::Base` as `provider_job_id`. diff --git a/activejob/lib/active_job/queue_adapters/sidekiq_adapter.rb b/activejob/lib/active_job/queue_adapters/sidekiq_adapter.rb index 743d5ea333..7a2dd3e9fc 100644 --- a/activejob/lib/active_job/queue_adapters/sidekiq_adapter.rb +++ b/activejob/lib/active_job/queue_adapters/sidekiq_adapter.rb @@ -17,20 +17,24 @@ module ActiveJob class SidekiqAdapter def enqueue(job) #:nodoc: #Sidekiq::Client does not support symbols as keys - Sidekiq::Client.push \ + sidekiq_job_id = Sidekiq::Client.push \ 'class' => JobWrapper, 'wrapped' => job.class.to_s, 'queue' => job.queue_name, 'args' => [ job.serialize ] + job.provider_job_id = sidekiq_job_id + sidekiq_job_id end def enqueue_at(job, timestamp) #:nodoc: - Sidekiq::Client.push \ + sidekiq_job_id = Sidekiq::Client.push \ 'class' => JobWrapper, 'wrapped' => job.class.to_s, 'queue' => job.queue_name, 'args' => [ job.serialize ], 'at' => timestamp + job.provider_job_id = sidekiq_job_id + sidekiq_job_id end class JobWrapper #:nodoc: diff --git a/activejob/test/integration/queuing_test.rb b/activejob/test/integration/queuing_test.rb index 403b803558..f2665221b8 100644 --- a/activejob/test/integration/queuing_test.rb +++ b/activejob/test/integration/queuing_test.rb @@ -61,4 +61,14 @@ class QueuingTest < ActiveSupport::TestCase test_job = TestJob.perform_later @id assert_kind_of Fixnum, test_job.provider_job_id end + + test 'should supply a provider_job_id to Sidekiq' do + skip unless adapter_is?(:sidekiq) + test_job = TestJob.perform_later @id + refute test_job.provider_job_id.nil?, "Provider job id should be set by Sidekiq" + + delayed_test_job = TestJob.set(wait: 1.minute).perform_later @id + refute delayed_test_job.provider_job_id.nil?, + "Provider job id should by set for delayed jobs by sidekiq" + end end |