class ProcessBalancer::Lock::SimpleRedis::LockHandler
class to wrap the lock handling and provide the “extend!” method contract
Public Class Methods
new(key, value, ttl)
click to toggle source
# File lib/process_balancer/lock/simple_redis.rb, line 20 def initialize(key, value, ttl) @key = key @value = value @ttl = ttl @acquired = false end
Public Instance Methods
acquire!()
click to toggle source
# File lib/process_balancer/lock/simple_redis.rb, line 27 def acquire! time_source = ProcessBalancer::Lock::SimpleRedis.time_source timeout_ms = 5000 wait_time = 0.02..0.1 start = time_source.call sleep(rand(wait_time)) while !(@acquired = try_lock) && (time_source.call - start) < timeout_ms end
acquired?()
click to toggle source
# File lib/process_balancer/lock/simple_redis.rb, line 43 def acquired? @acquired end
extend!()
click to toggle source
# File lib/process_balancer/lock/simple_redis.rb, line 53 def extend! ProcessBalancer.redis do |c| c.watch(@key) if c.get(@key) == @value c.multi do c.set(@key, @value, ex: @ttl) end end end end
release!()
click to toggle source
# File lib/process_balancer/lock/simple_redis.rb, line 37 def release! ProcessBalancer.redis do |c| c.del(@key) end end
try_lock()
click to toggle source
# File lib/process_balancer/lock/simple_redis.rb, line 47 def try_lock ProcessBalancer.redis do |c| c.set(@key, @value, nx: true, ex: @ttl) end end