From 621f81f9867ffafe0f9dabcd59ffec610176e658 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paco=20Guzma=CC=81n?= Date: Tue, 13 Nov 2018 19:20:39 +0100 Subject: [PATCH 1/2] Do not build keys on lua scripts On this way users of sidekiq-unique-jobs that made use of redis-namespace < 2.0 could use it. --- lib/sidekiq_unique_jobs/constants.rb | 2 ++ lib/sidekiq_unique_jobs/on_conflict/replace.rb | 6 +++++- redis/delete_job_by_digest.lua | 10 ++++++---- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/sidekiq_unique_jobs/constants.rb b/lib/sidekiq_unique_jobs/constants.rb index 3d5bdfd05..effc7d572 100644 --- a/lib/sidekiq_unique_jobs/constants.rb +++ b/lib/sidekiq_unique_jobs/constants.rb @@ -19,4 +19,6 @@ module SidekiqUniqueJobs ON_CONFLICT_KEY ||= 'on_conflict' UNIQUE_ON_ALL_QUEUES_KEY ||= 'unique_on_all_queues' # TODO: Remove in v6.1 UNIQUE_PREFIX_KEY ||= 'unique_prefix' + RETRY_SET ||= 'retry' + SCHEDULE_SET ||= 'schedule' end diff --git a/lib/sidekiq_unique_jobs/on_conflict/replace.rb b/lib/sidekiq_unique_jobs/on_conflict/replace.rb index 405c02ccf..54367c939 100644 --- a/lib/sidekiq_unique_jobs/on_conflict/replace.rb +++ b/lib/sidekiq_unique_jobs/on_conflict/replace.rb @@ -25,7 +25,11 @@ def call(&block) # Delete the job from either schedule, retry or the queue def delete_job_by_digest - Scripts.call(:delete_job_by_digest, nil, keys: [queue, unique_digest]) + Scripts.call( + :delete_job_by_digest, + nil, + keys: ["#{QUEUE_KEY}:#{queue}", SCHEDULE_SET, RETRY_SET], argv: [unique_digest] + ) end # Delete the keys belonging to the job diff --git a/redis/delete_job_by_digest.lua b/redis/delete_job_by_digest.lua index 868dae1ad..033548ff5 100644 --- a/redis/delete_job_by_digest.lua +++ b/redis/delete_job_by_digest.lua @@ -1,5 +1,7 @@ -local queue = "queue:" .. KEYS[1] -local unique_digest = KEYS[2] +local queue = KEYS[1] +local schedule_set = KEYS[2] +local retry_set = KEYS[3] +local unique_digest = ARGV[1] local function delete_from_sorted_set(name, digest) local per = 50 @@ -49,10 +51,10 @@ if result then return result end -result = delete_from_sorted_set('schedule', unique_digest) +result = delete_from_sorted_set(schedule_set, unique_digest) if result then return result end -result = delete_from_sorted_set('retry', unique_digest) +result = delete_from_sorted_set(retry_set, unique_digest) return result From 8a4ae905d6baf57b288d1296a22b3ed812e5d444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paco=20Guzm=C3=A1n?= Date: Wed, 14 Nov 2018 06:55:04 +0100 Subject: [PATCH 2/2] RSpec: use schedule_count helper method instead just redis command --- spec/examples/my_unique_job_spec.rb | 2 +- .../integration/sidekiq_unique_jobs/client/middleware_spec.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/examples/my_unique_job_spec.rb b/spec/examples/my_unique_job_spec.rb index d4a490f48..d98c3d07f 100644 --- a/spec/examples/my_unique_job_spec.rb +++ b/spec/examples/my_unique_job_spec.rb @@ -29,7 +29,7 @@ described_class.perform_in(3600, 1, 2) expect(1).to be_enqueued_in('customqueue') expect(1).to be_enqueued_in('schedule') - expect(zcard('schedule')).to eq(1) + expect(schedule_count).to eq(1) expect(1).to be_scheduled_at(Time.now.to_f + 2 * 3600) end diff --git a/spec/integration/sidekiq_unique_jobs/client/middleware_spec.rb b/spec/integration/sidekiq_unique_jobs/client/middleware_spec.rb index d97a78875..c9c2607d1 100644 --- a/spec/integration/sidekiq_unique_jobs/client/middleware_spec.rb +++ b/spec/integration/sidekiq_unique_jobs/client/middleware_spec.rb @@ -8,7 +8,7 @@ jid = NotifyWorker.perform_in(1, 183, 'xxxx') expect(jid).not_to eq(nil) - expect(zcard('schedule')).to eq(1) + expect(schedule_count).to eq(1) expected = %w[ uniquejobs:6e47d668ad22db2a3ba0afd331514ce2:EXISTS @@ -23,7 +23,7 @@ expect(SimpleWorker.perform_in(60, 1)).to eq(nil) expect(SimpleWorker.perform_in(60, 1)).to eq(nil) expect(SimpleWorker.perform_in(60, 1)).to eq(nil) - expect(zcard('schedule')).to eq(0) + expect(schedule_count).to eq(0) expect(SpawnSimpleWorker.perform_async(1)).not_to eq(nil) expect(queue_count('default')).to eq(1)