debian-mirror-gitlab/vendor/gems/sidekiq-reliable-fetch/lib/sidekiq/reliable_fetch.rb
2023-06-20 00:43:36 +05:30

38 lines
948 B
Ruby

# 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