class SidekiqUniqueJobs::OnConflict::Reject

@author Mikael Henriksson <mikael@mhenrixon.com>
Strategy to send jobs to dead queue

def call

Send jobs to dead queue
def call
  log_info { "Adding dead #{item[CLASS]} job #{item[JID]}" }
  if deadset_kill?
    deadset_kill
  else
    push_to_deadset
  end
end

def deadset

Returns:
  • (Sidekiq::Deadset) - >

Other tags:
    Api: - private
def deadset
  @deadset ||= Sidekiq::DeadSet.new
end

def deadset_kill

Returns:
  • (void) -

Other tags:
    Api: - private
def deadset_kill
  if kill_with_options?
    kill_job_with_options
  else
    kill_job_without_options
  end
end

def deadset_kill?

Returns:
  • (true, false) - depending on if Sidekiq::Deadset responds to kill

Other tags:
    Api: - private
def deadset_kill?
  deadset.respond_to?(:kill)
end

def kill_job_with_options

Returns:
  • (void) -

Other tags:
    Api: - private
def kill_job_with_options
  deadset.kill(payload, notify_failure: false)
end

def kill_job_without_options

Returns:
  • (void) -

Other tags:
    Api: - private
def kill_job_without_options
  deadset.kill(payload)
end

def kill_with_options?

Returns:
  • (false) - when Sidekiq::Deadset#kill does not take multiple arguments
  • (true) - when Sidekiq::Deadset#kill takes more than 1 argument

Other tags:
    Api: - private
def kill_with_options?
  Sidekiq::DeadSet.instance_method(:kill).arity > 1
end

def payload

Returns:
  • (String) - a JSON formatted string
def payload
  @payload ||= dump_json(item)
end

def push_to_deadset

Returns:
  • (void) -
def push_to_deadset
  redis do |conn|
    conn.multi do
      conn.zadd("dead", now_f, payload)
      conn.zremrangebyscore("dead", "-inf", now_f - Sidekiq::DeadSet.timeout)
      conn.zremrangebyrank("dead", 0, -Sidekiq::DeadSet.max_jobs)
    end
  end
end