-
Notifications
You must be signed in to change notification settings - Fork 27
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
When: - all Sidekiq attempts were unsuccessful - job is deleted manually from Sidekiq::Web
- Loading branch information
Showing
2 changed files
with
97 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
# frozen_string_literal: true | ||
|
||
module ActiveJob | ||
module Uniqueness | ||
module Patch | ||
def self.delete_sidekiq_job!(job) | ||
ActiveJob::Uniqueness.unlock!( | ||
job_class_name: job.fetch('wrapped'), | ||
arguments: job.fetch('args').first.fetch('arguments') | ||
) | ||
end | ||
end | ||
end | ||
end | ||
|
||
require 'sidekiq/api' | ||
|
||
Sidekiq.configure_server do |config| | ||
config.death_handlers << ->(job, _ex) do | ||
ActiveJob::Uniqueness::Patch.delete_sidekiq_job!(job) | ||
end | ||
end | ||
|
||
module Sidekiq | ||
class SortedEntry | ||
module UniqueExtension | ||
def delete | ||
ActiveJob::Uniqueness::Patch.delete_sidekiq_job!(item) if super | ||
item | ||
end | ||
|
||
private | ||
|
||
def remove_job | ||
super do |message| | ||
ActiveJob::Uniqueness::Patch.delete_sidekiq_job!(Sidekiq.load_json(message)) | ||
yield message | ||
end | ||
end | ||
end | ||
|
||
prepend UniqueExtension | ||
end | ||
|
||
class ScheduledSet | ||
module UniqueExtension | ||
def delete(score, job_id) | ||
entry = find_job(job_id) | ||
ActiveJob::Uniqueness::Patch.delete_sidekiq_job!(entry.item) if super(score, job_id) | ||
entry | ||
end | ||
end | ||
|
||
prepend UniqueExtension | ||
end | ||
|
||
class Job | ||
module UniqueExtension | ||
def delete | ||
ActiveJob::Uniqueness::Patch.delete_sidekiq_job!(item) | ||
super | ||
end | ||
end | ||
|
||
prepend UniqueExtension | ||
end | ||
|
||
class Queue | ||
module UniqueExtension | ||
def clear | ||
each(&:delete) | ||
super | ||
end | ||
end | ||
|
||
prepend UniqueExtension | ||
end | ||
|
||
class JobSet | ||
module UniqueExtension | ||
def clear | ||
each(&:delete) | ||
super | ||
end | ||
|
||
def delete_by_value(name, value) | ||
ActiveJob::Uniqueness::Patch.delete_sidekiq_job!(Sidekiq.load_json(value)) if super(name, value) | ||
end | ||
end | ||
|
||
prepend UniqueExtension | ||
end | ||
end |