Class: Sidekiq::DeadSet

Inherits:
JobSet show all
Defined in:
lib/sidekiq/api.rb

Overview

The set of dead jobs within Sidekiq. Dead jobs have failed all of their retries and are helding in this set pending some sort of manual fix. They will be removed after 6 months (dead_timeout) if not.

Instance Attribute Summary

Attributes inherited from SortedSet

#Name, #name

Instance Method Summary collapse

Methods inherited from JobSet

#delete_by_jid, #delete_by_value, #each, #fetch, #find_job, #kill_all, #pop_each, #remove_job, #retry_all, #schedule

Methods inherited from SortedSet

#as_json, #clear, #scan, #size

Constructor Details

#initializeDeadSet

Returns a new instance of DeadSet.



927
928
929
# File 'lib/sidekiq/api.rb', line 927

def initialize
  super("dead")
end

Instance Method Details

#kill(message, opts = {}) ⇒ Object

Add the given job to the Dead set.

Parameters:

  • message (String)

    the job data as JSON

  • opts (Hash) (defaults to: {})

    a customizable set of options

Options Hash (opts):

  • :notify_failure (Boolean) — default: true

    Whether death handlers should be called

  • :trim (Boolean) — default: true

    Whether Sidekiq should trim the structure to keep it within configuration

  • :ex (Exception) — default: RuntimeError

    An exception to pass to the death handlers



948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
# File 'lib/sidekiq/api.rb', line 948

def kill(message, opts = {})
  now = Time.now.to_f
  Sidekiq.redis do |conn|
    conn.zadd(name, now.to_s, message)
  end

  trim if opts[:trim] != false

  if opts[:notify_failure] != false
    job = Sidekiq.load_json(message)
    if opts[:ex]
      ex = opts[:ex]
    else
      ex = RuntimeError.new("Job killed by API")
      ex.set_backtrace(caller)
    end
    Sidekiq.default_configuration.death_handlers.each do |handle|
      handle.call(job, ex)
    end
  end
  true
end

#trimObject

Trim dead jobs which are over our storage limits



932
933
934
935
936
937
938
939
940
941
# File 'lib/sidekiq/api.rb', line 932

def trim
  hash = Sidekiq.default_configuration
  now = Time.now.to_f
  Sidekiq.redis do |conn|
    conn.multi do |transaction|
      transaction.zremrangebyscore(name, "-inf", now - hash[:dead_timeout_in_seconds])
      transaction.zremrangebyrank(name, 0, - hash[:dead_max_jobs])
    end
  end
end