class Sidekiq::LockableJob::Middleware::Server::HandleLockedBy

Public Instance Methods

call(worker, job, queue) { || ... } click to toggle source

@param [Object] worker the worker instance @param [Hash] job the full job payload

* @see https://github.com/mperham/sidekiq/wiki/Job-Format

@param [String] queue the name of the queue the job was pulled from @yield the next middleware in the chain or worker `perform` method @return [Void]

# File lib/sidekiq/lockable_job/middleware/server/handle_locked_by.rb, line 14
def call(worker, job, queue)
  worker_klass = worker.class
  if worker_klass.respond_to?(:lockable_job_locked_by_keys)
    keys = worker_klass.send(:lockable_job_locked_by_keys, job['args'])
    keys = [keys] unless keys.nil? || keys.is_a?(Array)
    locked = worker_klass.current_lockable_job_lock_service.handle_locked_by(keys, worker_instance: worker, job: job)
    # LockableJobService && MultiLockService raise if job is lock
    # but a CustomLockService could decide to re-enqueued the job
    # if the service return true, it mean the job is lock and we skip it's processing (don't yield)
    return if locked
  end
  yield
end