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 'vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/reliable_fetch.rb')
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/reliable_fetch.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/reliable_fetch.rb b/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/reliable_fetch.rb
new file mode 100644
index 00000000000..e3088ab70a4
--- /dev/null
+++ b/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/reliable_fetch.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+module Sidekiq
+ class ReliableFetch < BaseReliableFetch
+ # For reliable fetch we don't use Redis' blocking operations so
+ # we inject a regular sleep into the loop.
+ RELIABLE_FETCH_IDLE_TIMEOUT = 5 # seconds
+
+ attr_reader :queues_size
+
+ def initialize(options)
+ super
+
+ @queues = queues.uniq if strictly_ordered_queues
+ @queues_size = queues.size
+ end
+
+ private
+
+ def retrieve_unit_of_work
+ queues_list = strictly_ordered_queues ? queues : queues.shuffle
+
+ queues_list.each do |queue|
+ work = Sidekiq.redis do |conn|
+ conn.rpoplpush(queue, self.class.working_queue_name(queue))
+ end
+
+ return UnitOfWork.new(queue, work) if work
+ end
+
+ # We didn't find a job in any of the configured queues. Let's sleep a bit
+ # to avoid uselessly burning too much CPU
+ sleep(RELIABLE_FETCH_IDLE_TIMEOUT)
+
+ nil
+ end
+ end
+end