class Resque::Scheduler::Lock::Resilient
Public Instance Methods
acquire!()
click to toggle source
# File lib/resque/scheduler/lock/resilient.rb, line 8 def acquire! evalsha(:acquire, [key], [value]).to_i == 1 end
locked?()
click to toggle source
# File lib/resque/scheduler/lock/resilient.rb, line 12 def locked? evalsha(:locked, [key], [value]).to_i == 1 end
timeout=(seconds)
click to toggle source
# File lib/resque/scheduler/lock/resilient.rb, line 16 def timeout=(seconds) if locked? @timeout = seconds @locked_sha = nil @acquire_sha = nil end @timeout end
Private Instance Methods
acquire_sha(refresh = false)
click to toggle source
# File lib/resque/scheduler/lock/resilient.rb, line 61 def acquire_sha(refresh = false) @acquire_sha = nil if refresh @acquire_sha ||= Resque.data_store.redis.script(:load, <<-EOF.gsub(/^ {14}/, '')) if redis.call('SETNX', KEYS[1], ARGV[1]) == 1 then redis.call('EXPIRE', KEYS[1], #{timeout}) return 1 else return 0 end EOF end
evalsha(script, keys, argv, refresh: false)
click to toggle source
# File lib/resque/scheduler/lock/resilient.rb, line 27 def evalsha(script, keys, argv, refresh: false) sha_method_name = "#{script}_sha" Resque.redis.evalsha( send(sha_method_name, refresh), keys: keys, argv: argv ) rescue Redis::CommandError => e if e.message =~ /NOSCRIPT/ refresh = true retry end raise end
locked_sha(refresh = false)
click to toggle source
# File lib/resque/scheduler/lock/resilient.rb, line 42 def locked_sha(refresh = false) @locked_sha = nil if refresh @locked_sha ||= Resque.data_store.redis.script(:load, <<-EOF.gsub(/^ {14}/, '')) if redis.call('GET', KEYS[1]) == ARGV[1] then redis.call('EXPIRE', KEYS[1], #{timeout}) if redis.call('GET', KEYS[1]) == ARGV[1] then return 1 end end return 0 EOF end