can_enqueue? propagation detection that does not depend on Rails (#1672)

This commit is contained in:
Karol Bucek 2016-09-09 15:50:32 +02:00 committed by Andrew Cantino
parent f42ad96ed6
commit c6a17c90fe

View file

@ -6,14 +6,15 @@ class AgentPropagateJob < ActiveJob::Base
end
def self.can_enqueue?
if Rails.configuration.active_job.queue_adapter == :delayed_job &&
Delayed::Job.where(failed_at: nil, queue: 'propagation').count > 0
return false
elsif Rails.configuration.active_job.queue_adapter == :resque &&
(Resque.size('propagation') > 0 ||
Resque.workers.select { |w| w.job && w.job['queue'] && w.job['queue']['propagation'] }.count > 0)
return false
case queue_adapter.name # not using class since it would load adapter dependent gems
when 'ActiveJob::QueueAdapters::DelayedJobAdapter'
return Delayed::Job.where(failed_at: nil, queue: 'propagation').count == 0
when 'ActiveJob::QueueAdapters::ResqueAdapter'
return Resque.size('propagation') == 0 &&
Resque.workers.select { |w| w.job && w.job['queue'] && w.job['queue']['propagation'] }.count == 0
else
raise NotImplementedError, "unsupported adapter: #{queue_adapter}"
end
true
end
end