From 7db2083d4553001acbb12771a261e8dc61151eaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Fri, 12 Aug 2016 13:10:52 +0200 Subject: [PATCH] FIX: 'cancel_scheduled_job' was deleting all jobs in multisite --- app/jobs/base.rb | 14 +++++++++----- spec/jobs/jobs_spec.rb | 14 ++++++++++---- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/app/jobs/base.rb b/app/jobs/base.rb index 5827b1308..4445c78aa 100644 --- a/app/jobs/base.rb +++ b/app/jobs/base.rb @@ -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, params={}) - params = params.with_indifferent_access + 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 + 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 diff --git a/spec/jobs/jobs_spec.rb b/spec/jobs/jobs_spec.rb index 57d2717b2..64de988b7 100644 --- a/spec/jobs/jobs_spec.rb +++ b/spec/jobs/jobs_spec.rb @@ -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