module Resque::Scheduler::Locking

def build_master_lock

def build_master_lock
  if supports_lua?
    Resque::Scheduler::Lock::Resilient.new(master_lock_key)
  else
    Resque::Scheduler::Lock::Basic.new(master_lock_key)
  end
end

def master?

def master?
  master_lock.acquire! || master_lock.locked?
end

def master_lock

def master_lock
  @master_lock ||= build_master_lock
end

def master_lock_key

def master_lock_key
  lock_prefix = ENV['RESQUE_SCHEDULER_MASTER_LOCK_PREFIX'] || ''
  lock_prefix += ':' if lock_prefix != ''
  "#{Resque.redis.namespace}:#{lock_prefix}resque_scheduler_master_lock"
end

def redis_master_version

def redis_master_version
  Resque.data_store.redis.info['redis_version'].to_f
end

def release_master_lock

def release_master_lock
  master_lock.release
rescue *INTERMITTENT_ERRORS
  @master_lock = nil
end

def release_master_lock!

def release_master_lock!
  warn "#{self}\#release_master_lock! is deprecated because it does " \
       "not respect lock ownership. Use #{self}\#release_master_lock " \
       "instead (at #{caller.first}"
  master_lock.release!
end

def supports_lua?

def supports_lua?
  redis_master_version >= 2.5
end