about summary refs log tree commit diff
path: root/lib/mastodon/unique_retry_job_middleware.rb
blob: 75da8a0c9411dd44cbbbaec161a30b4a04dd7d87 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# frozen_string_literal: true

class Mastodon::UniqueRetryJobMiddleware
  def call(_worker_class, item, _queue, _redis_pool)
    return if item['unique_retry'] && retried?(item)
    yield
  end

  private

  def retried?(item)
    # Use unique digest key of SidekiqUniqueJobs
    unique_key = SidekiqUniqueJobs::UNIQUE_DIGEST_KEY
    unique_digest = item[unique_key]
    class_name = item['class']
    retries = Sidekiq::RetrySet.new

    retries.any? { |job| job.item['class'] == class_name && job.item[unique_key] == unique_digest }
  end
end