Provide provider_job_id to qu adapter.

Further work to provide provider_job_id for queue adapters.
This commit is contained in:
Kevin Deisz 2015-05-07 18:32:15 -04:00
parent 6d951bda36
commit 221a411fd7
4 changed files with 16 additions and 9 deletions

View File

@ -1,4 +1,4 @@
* Allow `DelayedJob`, `Sidekiq` and `que` to report the job id back to
* Allow `DelayedJob`, `Sidekiq`, `qu`, and `que` to report the job id back to
`ActiveJob::Base` as `provider_job_id`.
Fixes #18821.

View File

@ -17,9 +17,13 @@ module ActiveJob
# Rails.application.config.active_job.queue_adapter = :qu
class QuAdapter
def enqueue(job, *args) #:nodoc:
Qu::Payload.new(klass: JobWrapper, args: [job.serialize]).tap do |payload|
qu_job = Qu::Payload.new(klass: JobWrapper, args: [job.serialize]).tap do |payload|
payload.instance_variable_set(:@queue, job.queue_name)
end.push
# qu_job can be nil depending on the configured backend
job.provider_job_id = qu_job.id unless qu_job.nil?
qu_job
end
def enqueue_at(job, timestamp, *args) #:nodoc:

View File

@ -11,7 +11,7 @@ class QueuingTest < ActiveSupport::TestCase
end
test 'should not run jobs queued on a non-listening queue' do
skip if adapter_is?(:inline) || adapter_is?(:sucker_punch) || adapter_is?(:que)
skip if adapter_is?(:inline, :sucker_punch, :que)
old_queue = TestJob.queue_name
begin
@ -56,13 +56,16 @@ class QueuingTest < ActiveSupport::TestCase
end
end
test 'should supply a provider_job_id when available' do
skip unless adapter_is?(:sidekiq) || adapter_is?(:que) || adapter_is?(:delayed_job)
test 'should supply a provider_job_id when available for immediate jobs' do
skip unless adapter_is?(:delayed_job, :sidekiq, :qu, :que)
test_job = TestJob.perform_later @id
refute test_job.provider_job_id.nil?, "Provider job id should be set by provider"
refute test_job.provider_job_id.nil?, 'Provider job id should be set by provider'
end
test 'should supply a provider_job_id when available for delayed jobs' do
skip unless adapter_is?(:delayed_job, :sidekiq, :que)
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 provider"
'Provider job id should by set for delayed jobs by provider'
end
end

View File

@ -27,8 +27,8 @@ module TestCaseHelpers
jobs_manager.clear_jobs
end
def adapter_is?(adapter_class_symbol)
ActiveJob::Base.queue_adapter.class.name.split("::").last.gsub(/Adapter$/, '').underscore == adapter_class_symbol.to_s
def adapter_is?(*adapter_class_symbols)
adapter_class_symbols.map(&:to_s).include?(ActiveJob::Base.queue_adapter.class.name.split("::").last.gsub(/Adapter$/, '').underscore)
end
def wait_for_jobs_to_finish_for(seconds=60)