|
|
@ -0,0 +1,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 |