class SidekiqUniqueJobs::OnConflict::Reject

Strategy to send jobs to dead queue

@author Mikael Henriksson <mikael@mhenrixon.com>

Public Instance Methods

call() click to toggle source

Send jobs to dead queue

# File lib/sidekiq_unique_jobs/on_conflict/reject.rb, line 12
def call
  log_info { "Adding dead #{item[CLASS]} job #{item[JID]}" }

  if deadset_kill?
    deadset_kill
  else
    push_to_deadset
  end
end
deadset() click to toggle source

An instance of Sidekiq::Deadset @api private

@return [Sidekiq::Deadset]>

# File lib/sidekiq_unique_jobs/on_conflict/reject.rb, line 87
def deadset
  @deadset ||= Sidekiq::DeadSet.new
end
deadset_kill() click to toggle source

Use Sidekiqs built in Sidekiq::DeadSet#kill

to get rid of the job

@api private

@return [void]

# File lib/sidekiq_unique_jobs/on_conflict/reject.rb, line 41
def deadset_kill
  if kill_with_options?
    kill_job_with_options
  else
    kill_job_without_options
  end
end
deadset_kill?() click to toggle source

Sidekiq version compatibility check @api private

@return [true, false] depending on if Sidekiq::Deadset responds to kill

# File lib/sidekiq_unique_jobs/on_conflict/reject.rb, line 29
def deadset_kill?
  deadset.respond_to?(:kill)
end
kill_job_with_options() click to toggle source

Executes the kill instructions with arguments @api private

@return [void]

# File lib/sidekiq_unique_jobs/on_conflict/reject.rb, line 77
def kill_job_with_options
  deadset.kill(payload, notify_failure: false)
end
kill_job_without_options() click to toggle source

Executes the kill instructions without arguments @api private

@return [void]

# File lib/sidekiq_unique_jobs/on_conflict/reject.rb, line 67
def kill_job_without_options
  deadset.kill(payload)
end
kill_with_options?() click to toggle source

Sidekiq version compatibility check @api private

@return [true] when Sidekiq::Deadset#kill takes more than 1 argument @return [false] when Sidekiq::Deadset#kill does not take multiple arguments

# File lib/sidekiq_unique_jobs/on_conflict/reject.rb, line 57
def kill_with_options?
  Sidekiq::DeadSet.instance_method(:kill).arity > 1
end
payload() click to toggle source

The Sidekiq job hash as JSON

@return [String] a JSON formatted string

# File lib/sidekiq_unique_jobs/on_conflict/reject.rb, line 113
def payload
  @payload ||= dump_json(item)
end
push_to_deadset() click to toggle source

Used for compatibility with older Sidekiq versions

@return [void]

# File lib/sidekiq_unique_jobs/on_conflict/reject.rb, line 97
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