class SidekiqUniqueJobs::OnConflict::Replace

@author Mikael Henriksson <mikael@mhenrixon.com>
Strategy to replace the job on conflict

def call(&block)

Other tags:
    Yield: - to retry the lock after deleting the old one

Returns:
  • (void) -
def call(&block)
  return unless (deleted_job = delete_job_by_digest)
  log_info("Deleting job: #{deleted_job}")
  if (del_count = delete_lock)
    log_info("Deleted `#{del_count}` keys for #{unique_digest}")
  end
  block&.call
end

def delete_job_by_digest

Returns:
  • (nil) - when deleting nothing
  • (String) - the deleted job hash
def delete_job_by_digest
  call_script(:delete_job_by_digest,
              keys: ["#{QUEUE}:#{queue}", SCHEDULE, RETRY],
              argv: [unique_digest])
end

def delete_lock

Returns:
  • (Integer) - the number of keys deleted
def delete_lock
  digests.delete_by_digest(unique_digest)
end

def digests

Returns:
  • (Digests) - and instance with digests
def digests
  @digests ||= SidekiqUniqueJobs::Digests.new
end

def initialize(item, redis_pool = nil)

Parameters:
  • item (Hash) -- sidekiq job hash
def initialize(item, redis_pool = nil)
  super(item, redis_pool)
  @queue         = item[QUEUE]
  @unique_digest = item[LOCK_DIGEST]
end