class Sidekiq::ThrottledWorker::Fetch

Public Instance Methods

original_retrieve_work()
Alias for: retrieve_work
retrieve_work() click to toggle source
# File lib/sidekiq/throttled_worker/fetch.rb, line 6
def retrieve_work
  work = original_retrieve_work
  return work if work.nil?

  job_hash = Sidekiq.load_json(work.job)
  worker_class = Object.const_get(job_hash['class'])
  return work if worker_class.get_sidekiq_options["concurrency"].nil?

  if Concurrency.limit?(worker_class, job_hash['jid'])
    job_hash["concurrency_limit_count"] ||= 0
    job_hash["concurrency_limit_count"] += 1
    sleep(rand * [(job_hash["concurrency_limit_count"] - 1) * 0.01, 0.1].min)
    Sidekiq.redis do |conn|
      conn.lpush("queue:#{work.queue_name}", Sidekiq.dump_json(job_hash)) # put in queue end to auto wait some time in busy sidekiq cluster
    end
    nil
  else
    work
  end
end
Also aliased as: original_retrieve_work