class Stockpile::Lock
Stockpile::Lock
¶ ↑
Attempts to set up exclusive lock to execute a block of code. Returns Stockpile::LockedExcutionResult
holding result of execution. If lock can not be established (someone else is executing the code) then Stockpile::LockedExcutionResult
will hold Stockpile::FailedLockExecution
as a result of execution
Attributes
db[R]
lock_key[R]
Public Class Methods
new(db, lock_key)
click to toggle source
# File lib/stockpile/lock.rb, line 32 def initialize(db, lock_key) @db = db @lock_key = lock_key end
perform_locked(db: :default, lock_key:, &block)
click to toggle source
# File lib/stockpile/lock.rb, line 28 def self.perform_locked(db: :default, lock_key:, &block) new(db, lock_key).perform_locked(&block) end
Public Instance Methods
perform_locked(&block)
click to toggle source
# File lib/stockpile/lock.rb, line 37 def perform_locked(&block) if lock successful_execution(&block) else failed_execution end end
Private Instance Methods
failed_execution()
click to toggle source
# File lib/stockpile/lock.rb, line 47 def failed_execution Stockpile::LockedExcutionResult.new(db: db, result: failed_lock, lock_key: lock_key) end
failed_lock()
click to toggle source
# File lib/stockpile/lock.rb, line 51 def failed_lock Stockpile::FailedLockExecution.new end
lock()
click to toggle source
# File lib/stockpile/lock.rb, line 55 def lock Stockpile.redis(db: db) { |r| r.set(lock_key, 1, nx: true, ex: Stockpile.configuration.lock_expiration) } end
successful_execution() { || ... }
click to toggle source
# File lib/stockpile/lock.rb, line 59 def successful_execution Stockpile::LockedExcutionResult.new(db: db, result: yield, lock_key: lock_key) end