diff options
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.rb | 38 |
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 |