FIX: 'cancel_scheduled_job' was deleting all jobs in multisite

This commit is contained in:
Régis Hanol 2016-08-12 13:10:52 +02:00
parent 7e4503dd99
commit 7db2083d45
2 changed files with 19 additions and 9 deletions

View File

@ -236,18 +236,22 @@ module Jobs
enqueue_in(secs, job_name, opts)
end
def self.cancel_scheduled_job(job_name, params={})
scheduled_for(job_name, params).each(&:delete)
def self.cancel_scheduled_job(job_name, opts={})
scheduled_for(job_name, opts).each(&:delete)
end
def self.scheduled_for(job_name, opts={})
opts = opts.with_indifferent_access
unless opts.delete(:all_sites)
opts[:current_site_id] ||= RailsMultisite::ConnectionManagement.current_db
end
def self.scheduled_for(job_name, params={})
params = params.with_indifferent_access
job_class = "Jobs::#{job_name.to_s.camelcase}"
Sidekiq::ScheduledSet.new.select do |scheduled_job|
if scheduled_job.klass.to_s == job_class
matched = true
job_params = scheduled_job.item["args"][0].with_indifferent_access
params.each do |key, value|
opts.each do |key, value|
if job_params[key] != value
matched = false
break

View File

@ -87,12 +87,18 @@ describe Jobs do
expect(scheduled_jobs.size).to eq(0)
Jobs.enqueue_in(1.year, :run_heartbeat, topic_id: 1234)
Jobs.enqueue_in(2.years, :run_heartbeat, topic_id: 5678)
Jobs.enqueue_in(1.year, :run_heartbeat, topic_id: 123)
Jobs.enqueue_in(2.years, :run_heartbeat, topic_id: 456)
Jobs.enqueue_in(3.years, :run_heartbeat, topic_id: 123, current_site_id: 'foo')
Jobs.enqueue_in(4.years, :run_heartbeat, topic_id: 123, current_site_id: 'bar')
expect(scheduled_jobs.size).to eq(2)
expect(scheduled_jobs.size).to eq(4)
Jobs.cancel_scheduled_job(:run_heartbeat, topic_id: 1234)
Jobs.cancel_scheduled_job(:run_heartbeat, topic_id: 123)
expect(scheduled_jobs.size).to eq(3)
Jobs.cancel_scheduled_job(:run_heartbeat, topic_id: 123, all_sites: true)
expect(scheduled_jobs.size).to eq(1)
end