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