Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/redis/duplicate_jobs.rb')
-rw-r--r--lib/gitlab/redis/duplicate_jobs.rb30
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/gitlab/redis/duplicate_jobs.rb b/lib/gitlab/redis/duplicate_jobs.rb
new file mode 100644
index 00000000000..beb3ba1abee
--- /dev/null
+++ b/lib/gitlab/redis/duplicate_jobs.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Redis
+ # Pseudo-store to transition `Gitlab::SidekiqMiddleware::DuplicateJobs` from
+ # using `Sidekiq.redis` to using the `SharedState` redis store.
+ class DuplicateJobs < ::Gitlab::Redis::Wrapper
+ class << self
+ def store_name
+ 'SharedState'
+ end
+
+ private
+
+ def redis
+ primary_store = ::Redis.new(Gitlab::Redis::SharedState.params)
+
+ # `Sidekiq.redis` is a namespaced redis connection. This means keys are actually being stored under
+ # "resque:gitlab:resque:gitlab:duplicate:". For backwards compatibility, we make the secondary store
+ # namespaced in the same way, but omit it from the primary so keys have proper format there.
+ secondary_store = ::Redis::Namespace.new(
+ Gitlab::Redis::Queues::SIDEKIQ_NAMESPACE, redis: ::Redis.new(Gitlab::Redis::Queues.params)
+ )
+
+ MultiStore.new(primary_store, secondary_store, name.demodulize)
+ end
+ end
+ end
+ end
+end