class SidekiqUniqueJobs::Lock::WhileExecuting
Locks jobs while the job is executing in the server process
-
Locks before yielding to the worker’s perform method
-
Unlocks after yielding to the worker’s perform method
See {#lock} for more information about the client. See {#execute} for more information about the server
@author Mikael Henriksson <mikael@mhenrixon.com>
Constants
- RUN_SUFFIX
-
@return [String] returns :RUN
Public Class Methods
Source
# File lib/sidekiq_unique_jobs/lock/while_executing.rb, line 25 def initialize(item, callback, redis_pool = nil) super append_unique_key_suffix end
@param [Hash] item the Sidekiq
job hash @param [Proc] callback callback to call after unlock @param [Sidekiq::RedisConnection, ConnectionPool] redis_pool the redis connection
Calls superclass method
SidekiqUniqueJobs::Lock::BaseLock::new
Public Instance Methods
Source
# File lib/sidekiq_unique_jobs/lock/while_executing.rb, line 43 def execute(&block) with_logging_context do executed = locksmith.execute do yield item[JID] ensure unlock_and_callback end unless executed reflect(:execution_failed, item) call_strategy(origin: :server, &block) end end end
Executes in the Sidekiq
server process.
These jobs are locked in the server process not from the client
@yield to the worker class perform method
Source
# File lib/sidekiq_unique_jobs/lock/while_executing.rb, line 33 def lock job_id = item[JID] yield if block_given? job_id end
Simulate that a client lock was achieved.
These locks should only ever be created in the server process.
@return [true] always returns true
Private Instance Methods
Source
# File lib/sidekiq_unique_jobs/lock/while_executing.rb, line 63 def append_unique_key_suffix return if (lock_digest = item[LOCK_DIGEST]).end_with?(RUN_SUFFIX) item[LOCK_DIGEST] = lock_digest + RUN_SUFFIX end
This is safe as the base_lock always creates a new digest
The append there for needs to be done every time