module Sidekiq::Worker::ClassMethods::Overrides
def self.included(base)
def self.included(base) override_methods(base) unless base.method_defined?(:execute_job) base.class_eval do alias_method :execute_job_orig, :execute_job alias_method :execute_job, :execute_job_ext alias_method :clear_orig, :clear alias_method :clear, :clear_ext end end
def clear_ext
def clear_ext payload_hashes = jobs.map { |job| job['unique_hash'] } clear_orig return if payload_hashes.empty? Sidekiq.redis { |conn| conn.del(*payload_hashes) } end
def execute_job_ext(worker, args)
def execute_job_ext(worker, args) execute_job_orig(worker, args) payload_hash = SidekiqUniqueJobs::PayloadHelper.get_payload( worker.class.name, get_sidekiq_options['queue'], args ) Sidekiq.redis { |conn| conn.del(payload_hash) } end
def override_methods(base)
Disable rubocop because methods are lifted directly out of Sidekiq
def override_methods(base) base.class_eval do define_method(:drain) do while job = jobs.shift do worker = new worker.jid = job['jid'] execute_job(worker, job['args']) end end define_method(:perform_one) do raise(EmptyQueueError, "perform_one called with empty job queue") if jobs.empty? job = jobs.shift worker = new worker.jid = job['jid'] execute_job(worker, job['args']) end define_method(:execute_job) do |worker, args| worker.perform(*args) end end end