class ExcessFlow::GlobalMutex
ExcessFlow::GlobalMutex
¶ ↑
Attempts to set up exclusive lock to execute a block of code. If another lock is in place then GlobalMutex
will wait till lock is available. Always returns result of execution. GlobalMutex
does not guarantee order of execution; it will only guarantee that only one thread for a given lock_key
is running to avoid race conditions.
Attributes
lock_key[R]
Public Class Methods
locked(lock_key:, &block)
click to toggle source
# File lib/excess_flow/global_mutex.rb, line 28 def self.locked(lock_key:, &block) new(lock_key).locked(&block) end
new(lock_key)
click to toggle source
# File lib/excess_flow/global_mutex.rb, line 32 def initialize(lock_key) @lock_key = lock_key end
Public Instance Methods
locked(&block)
click to toggle source
# File lib/excess_flow/global_mutex.rb, line 36 def locked(&block) sleep(ExcessFlow::MUTEX_SLEEP_TIME) until lock result = block.call unlock result end
Private Instance Methods
lock()
click to toggle source
# File lib/excess_flow/global_mutex.rb, line 46 def lock ExcessFlow.redis { |r| r.set(lock_key, 1, nx: true, ex: ExcessFlow::MUTEX_LOCK_TIME) } end
unlock()
click to toggle source
# File lib/excess_flow/global_mutex.rb, line 50 def unlock ExcessFlow.redis { |r| r.expire(lock_key, 0) } end