From 90c3abf3d4e2061e02cfe7d14e9b594c2e0467ef Mon Sep 17 00:00:00 2001 From: mhenrixon Date: Sat, 30 Jul 2022 10:51:52 +0200 Subject: [PATCH 1/3] Chore(deps): Add redis-namespace for debugging --- Gemfile | 1 + gemfiles/sidekiq_5.0.gemfile | 1 + gemfiles/sidekiq_5.1.gemfile | 1 + gemfiles/sidekiq_5.2.gemfile | 1 + gemfiles/sidekiq_6.0.gemfile | 1 + gemfiles/sidekiq_6.1.gemfile | 1 + gemfiles/sidekiq_6.2.gemfile | 1 + gemfiles/sidekiq_6.3.gemfile | 1 + gemfiles/sidekiq_6.4.gemfile | 1 + gemfiles/sidekiq_6.5.gemfile | 1 + gemfiles/sidekiq_develop.gemfile | 1 + spec/integration/until_and_while_executing_spec.rb | 4 ++++ 12 files changed, 15 insertions(+) diff --git a/Gemfile b/Gemfile index 31652ddb..a577a4ec 100644 --- a/Gemfile +++ b/Gemfile @@ -12,6 +12,7 @@ gem "gem-release" gem "github-markup" gem "rack-test" gem "rake", "13.0.3" +gem "redis-namespace" gem "reek", ">= 5.3" gem "rspec" gem "rspec-benchmark" diff --git a/gemfiles/sidekiq_5.0.gemfile b/gemfiles/sidekiq_5.0.gemfile index 739e1abf..af8ebc99 100644 --- a/gemfiles/sidekiq_5.0.gemfile +++ b/gemfiles/sidekiq_5.0.gemfile @@ -7,6 +7,7 @@ gem "gem-release" gem "github-markup" gem "rack-test" gem "rake", "13.0.3" +gem "redis-namespace" gem "reek", ">= 5.3" gem "rspec" gem "rspec-benchmark" diff --git a/gemfiles/sidekiq_5.1.gemfile b/gemfiles/sidekiq_5.1.gemfile index 4dffd0f4..087b813e 100644 --- a/gemfiles/sidekiq_5.1.gemfile +++ b/gemfiles/sidekiq_5.1.gemfile @@ -7,6 +7,7 @@ gem "gem-release" gem "github-markup" gem "rack-test" gem "rake", "13.0.3" +gem "redis-namespace" gem "reek", ">= 5.3" gem "rspec" gem "rspec-benchmark" diff --git a/gemfiles/sidekiq_5.2.gemfile b/gemfiles/sidekiq_5.2.gemfile index c3057680..5d62faac 100644 --- a/gemfiles/sidekiq_5.2.gemfile +++ b/gemfiles/sidekiq_5.2.gemfile @@ -7,6 +7,7 @@ gem "gem-release" gem "github-markup" gem "rack-test" gem "rake", "13.0.3" +gem "redis-namespace" gem "reek", ">= 5.3" gem "rspec" gem "rspec-benchmark" diff --git a/gemfiles/sidekiq_6.0.gemfile b/gemfiles/sidekiq_6.0.gemfile index 74dc7161..b9115dae 100644 --- a/gemfiles/sidekiq_6.0.gemfile +++ b/gemfiles/sidekiq_6.0.gemfile @@ -7,6 +7,7 @@ gem "gem-release" gem "github-markup" gem "rack-test" gem "rake", "13.0.3" +gem "redis-namespace" gem "reek", ">= 5.3" gem "rspec" gem "rspec-benchmark" diff --git a/gemfiles/sidekiq_6.1.gemfile b/gemfiles/sidekiq_6.1.gemfile index a52dc234..19fb993c 100644 --- a/gemfiles/sidekiq_6.1.gemfile +++ b/gemfiles/sidekiq_6.1.gemfile @@ -7,6 +7,7 @@ gem "gem-release" gem "github-markup" gem "rack-test" gem "rake", "13.0.3" +gem "redis-namespace" gem "reek", ">= 5.3" gem "rspec" gem "rspec-benchmark" diff --git a/gemfiles/sidekiq_6.2.gemfile b/gemfiles/sidekiq_6.2.gemfile index a6a70b73..b370ca0c 100644 --- a/gemfiles/sidekiq_6.2.gemfile +++ b/gemfiles/sidekiq_6.2.gemfile @@ -7,6 +7,7 @@ gem "gem-release" gem "github-markup" gem "rack-test" gem "rake", "13.0.3" +gem "redis-namespace" gem "reek", ">= 5.3" gem "rspec" gem "rspec-benchmark" diff --git a/gemfiles/sidekiq_6.3.gemfile b/gemfiles/sidekiq_6.3.gemfile index ecebfe3f..9d6b2f2c 100644 --- a/gemfiles/sidekiq_6.3.gemfile +++ b/gemfiles/sidekiq_6.3.gemfile @@ -7,6 +7,7 @@ gem "gem-release" gem "github-markup" gem "rack-test" gem "rake", "13.0.3" +gem "redis-namespace" gem "reek", ">= 5.3" gem "rspec" gem "rspec-benchmark" diff --git a/gemfiles/sidekiq_6.4.gemfile b/gemfiles/sidekiq_6.4.gemfile index dab1cd9e..c8dde6d2 100644 --- a/gemfiles/sidekiq_6.4.gemfile +++ b/gemfiles/sidekiq_6.4.gemfile @@ -7,6 +7,7 @@ gem "gem-release" gem "github-markup" gem "rack-test" gem "rake", "13.0.3" +gem "redis-namespace" gem "reek", ">= 5.3" gem "rspec" gem "rspec-benchmark" diff --git a/gemfiles/sidekiq_6.5.gemfile b/gemfiles/sidekiq_6.5.gemfile index 6679d5fd..7dfeda09 100644 --- a/gemfiles/sidekiq_6.5.gemfile +++ b/gemfiles/sidekiq_6.5.gemfile @@ -7,6 +7,7 @@ gem "gem-release" gem "github-markup" gem "rack-test" gem "rake", "13.0.3" +gem "redis-namespace" gem "reek", ">= 5.3" gem "rspec" gem "rspec-benchmark" diff --git a/gemfiles/sidekiq_develop.gemfile b/gemfiles/sidekiq_develop.gemfile index cdfb8087..c1d31c9b 100644 --- a/gemfiles/sidekiq_develop.gemfile +++ b/gemfiles/sidekiq_develop.gemfile @@ -7,6 +7,7 @@ gem "gem-release" gem "github-markup" gem "rack-test" gem "rake", "13.0.3" +gem "redis-namespace" gem "reek", ">= 5.3" gem "rspec" gem "rspec-benchmark" diff --git a/spec/integration/until_and_while_executing_spec.rb b/spec/integration/until_and_while_executing_spec.rb index 90e445b5..0861ee0a 100644 --- a/spec/integration/until_and_while_executing_spec.rb +++ b/spec/integration/until_and_while_executing_spec.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true unless ENV.fetch("CI", false) + # require "redis-namespace" + RSpec.describe "SidekiqUniqueJobs::Lock::UntilAndWhileExecuting" do before do digests.delete_by_pattern("*") @@ -20,10 +22,12 @@ end Sidekiq.configure_server do |config| + # config.redis = { port: 21_212, db: 9, namespace: "foo" } config.redis = { port: 21_212, db: 9 } end Sidekiq.configure_client do |config| + # config.redis = { port: 21_212, db: 9, namespace: "foo" } config.redis = { port: 21_212, db: 9 } end From b3c2f2cd9d6dab51fa37b8d6204612b63ea63e10 Mon Sep 17 00:00:00 2001 From: mhenrixon Date: Sat, 30 Jul 2022 10:52:21 +0200 Subject: [PATCH 2/3] Fix(namespace): Ensure compatible with namespaces --- lib/sidekiq_unique_jobs/locksmith.rb | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/sidekiq_unique_jobs/locksmith.rb b/lib/sidekiq_unique_jobs/locksmith.rb index 2f39ce9c..5d93a7d5 100644 --- a/lib/sidekiq_unique_jobs/locksmith.rb +++ b/lib/sidekiq_unique_jobs/locksmith.rb @@ -298,10 +298,15 @@ def pop_queued(conn, wait = 1) # @api private # def brpoplpush(conn, wait) + # passing timeout 0 to brpoplpush causes it to block indefinitely raise InvalidArgument, "wait must be an integer" unless wait.is_a?(Integer) + return conn.brpoplpush(key.queued, key.primed, wait) if conn.class.to_s == "Redis::Namespace" - # passing timeout 0 to brpoplpush causes it to block indefinitely - conn.brpoplpush(key.queued, key.primed, timeout: wait) + if VersionCheck.satisfied?(redis_version, ">= 6.2.0") && conn.respond_to?(:blmove) + conn.blmove(key.queued, key.primed, "RIGHT", "LEFT", timeout: wait) + else + conn.brpoplpush(key.queued, key.primed, timeout: wait) + end end # @@ -370,5 +375,9 @@ def lock_info TIME => now_f, ) end + + def redis_version + @redis_version ||= SidekiqUniqueJobs.config.redis_version + end end end From 1f44ecb0dc5cbe0bd22adc57b9708523006d1b91 Mon Sep 17 00:00:00 2001 From: mhenrixon Date: Sat, 30 Jul 2022 10:55:57 +0200 Subject: [PATCH 3/3] Chore(lint): Address code smells --- .reek.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.reek.yml b/.reek.yml index 0e38b0df..b528d272 100644 --- a/.reek.yml +++ b/.reek.yml @@ -38,6 +38,7 @@ detectors: - SidekiqUniqueJobs::Lock#del - SidekiqUniqueJobs::Lock#lock - SidekiqUniqueJobs::Lock::WhileExecuting#execute + - SidekiqUniqueJobs::Locksmith#brpoplpush - SidekiqUniqueJobs::Locksmith#enqueue - SidekiqUniqueJobs::Locksmith#lock_sync - SidekiqUniqueJobs::Locksmith#set_lock_info @@ -91,6 +92,7 @@ detectors: - Sidekiq#self.use_options - Sidekiq::Worker::ClassMethods#use_options - SidekiqUniqueJobs::LockArgs#default_job_options + - SidekiqUniqueJobs::Locksmith#brpoplpush - SidekiqUniqueJobs::Logging#logger_respond_to_with_context? - SidekiqUniqueJobs::OnConflict::Reject#deadset_kill? - SidekiqUniqueJobs::Orphans::RubyReaper#active?