How to delete jobs from Sidekiq Retries

… and check why 5600+ Rails engineers read also this

Hi future-me! This is just a list of snippets I might be looking for next time I suddenly have to deal with a huge list of failing Sidekiq jobs being retried over and over.

List job classes sitting in the retries list

Sidekiq::RetrySet.new
  .map(&:display_class)
  .uniq

Number of jobs being retried for a specific class

Sidekiq::RetrySet.new
  .select { |j| j.display_class == "AJob" }
  .count

Delete all jobs for a class from the retries list

Sidekiq::RetrySet.new
  .select { |j| j.display_class == "AJob" }
  .map(&:delete)

(similarly, there’s &:kill, &:retry)

(similarly, there’s Sidekiq::DeadSet, Sidekiq::ScheduledSet)

If the jobs are RES async handlers, list the events:

Sidekiq::RetrySet.new
  .select  { |j| j.display_class == "MyAsyncHandler" }
  .collect { |j| j.args[0]["arguments"][0]["event_id"] }
  .collect { |id| Rails.configuration.event_store.read.event(id) }

(warning: the details depend on your RES async scheduler implementation)

Unique error messages for a class of jobs

Sidekiq::RetrySet.new
  .select { _1.display_class == "AJob" }
  .map    { _1.item["error_message"] }
  .uniq

More

You might also like