class Resque::Scheduler::Lock::Base

Attributes

key[R]
timeout[RW]

Public Class Methods

new(key, options = {}) click to toggle source
# File lib/resque/scheduler/lock/base.rb, line 10
def initialize(key, options = {})
  @key = key

  # 3 minute default timeout
  @timeout = options[:timeout] || 60 * 3
end

Public Instance Methods

acquire!() click to toggle source

Attempts to acquire the lock. Returns true if successfully acquired.

# File lib/resque/scheduler/lock/base.rb, line 18
def acquire!
  raise NotImplementedError
end
locked?() click to toggle source

Returns true if you currently hold the lock.

# File lib/resque/scheduler/lock/base.rb, line 27
def locked?
  raise NotImplementedError
end
release() click to toggle source

Releases the lock iff we own it

# File lib/resque/scheduler/lock/base.rb, line 37
def release
  locked? && release!
end
release!() click to toggle source

Releases the lock.

# File lib/resque/scheduler/lock/base.rb, line 32
def release!
  Resque.redis.del(key) == 1
end
value() click to toggle source
# File lib/resque/scheduler/lock/base.rb, line 22
def value
  @value ||= [hostname, process_id].join(':')
end

Private Instance Methods

extend_lock!() click to toggle source

Extends the lock by ‘timeout` seconds.

# File lib/resque/scheduler/lock/base.rb, line 44
def extend_lock!
  Resque.redis.expire(key, timeout)
end
hostname() click to toggle source
# File lib/resque/scheduler/lock/base.rb, line 48
def hostname
  local_hostname = Socket.gethostname
  Addrinfo.getaddrinfo(local_hostname, 'http').first.getnameinfo.first
rescue
  local_hostname
end
process_id() click to toggle source
# File lib/resque/scheduler/lock/base.rb, line 55
def process_id
  Process.pid
end