class SidekiqUniqueJobs::Middleware::Server::UniqueJobs
def after_yield?
def after_yield? unlock_order == :after_yield end
def before_yield?
def before_yield? unlock_order == :before_yield end
def call(worker, item, _queue, redis_pool = nil)
def call(worker, item, _queue, redis_pool = nil) @redis_pool = redis_pool decide_unlock_order(worker.class) lock_key = payload_hash(item) unlocked = before_yield? ? unlock(lock_key).inspect : 0 yield ensure if after_yield? || !defined? unlocked || unlocked != 1 unlock(lock_key) end end
def connection(&block)
def connection(&block) SidekiqUniqueJobs::Connectors.connection(redis_pool, &block) end
def decide_unlock_order(klass)
def decide_unlock_order(klass) @unlock_order = if unlock_order_configured?(klass) klass.get_sidekiq_options['unique_unlock_order'] else default_unlock_order end end
def default_unlock_order
def default_unlock_order SidekiqUniqueJobs.config.default_unlock_order end
def logger
def logger Sidekiq.logger end
def payload_hash(item)
def payload_hash(item) SidekiqUniqueJobs::PayloadHelper.get_payload(item['class'], item['queue'], item['args']) end
def unlock(payload_hash)
def unlock(payload_hash) connection { |c| c.del(payload_hash) } end
def unlock_order_configured?(klass)
def unlock_order_configured?(klass) klass.respond_to?(:get_sidekiq_options) && !klass.get_sidekiq_options['unique_unlock_order'].nil? end