module Dynflow::Executors::Sidekiq::RedisLocking
Constants
- ACQUIRE_MISSING
- ACQUIRE_OK
- ACQUIRE_TAKEN
- REACQUIRE_SCRIPT
- REDIS_LOCK_KEY
- REDIS_LOCK_POLL_INTERVAL
- REDIS_LOCK_TTL
- RELEASE_SCRIPT
Public Instance Methods
reacquire_orchestrator_lock()
click to toggle source
# File lib/dynflow/executors/sidekiq/redis_locking.rb, line 57 def reacquire_orchestrator_lock case ::Sidekiq.redis { |conn| conn.eval REACQUIRE_SCRIPT, [REDIS_LOCK_KEY], [@world.id] } when ACQUIRE_MISSING @logger.error('The orchestrator lock was lost, reacquired') when ACQUIRE_TAKEN owner = ::Sidekiq.redis { |conn| conn.get REDIS_LOCK_KEY } @logger.fatal("The orchestrator lock was stolen by #{owner}, aborting.") Process.kill('INT', Process.pid) end end
release_orchestrator_lock()
click to toggle source
# File lib/dynflow/executors/sidekiq/redis_locking.rb, line 37 def release_orchestrator_lock ::Sidekiq.redis { |conn| conn.eval RELEASE_SCRIPT, [REDIS_LOCK_KEY], [@world.id] } end
wait_for_orchestrator_lock()
click to toggle source
# File lib/dynflow/executors/sidekiq/redis_locking.rb, line 41 def wait_for_orchestrator_lock mode = nil loop do active = ::Sidekiq.redis do |conn| conn.set(REDIS_LOCK_KEY, @world.id, :ex => REDIS_LOCK_TTL, :nx => true) end break if active if mode.nil? mode = :passive @logger.info('Orchestrator lock already taken, entering passive mode.') end sleep REDIS_LOCK_POLL_INTERVAL end @logger.info('Acquired orchestrator lock, entering active mode.') end