Class: Zermelo::Locks::RedisLock

Inherits:
Object
  • Object
show all
Defined in:
lib/zermelo/locks/redis_lock.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeRedisLock

Returns a new instance of RedisLock.



15
16
17
18
19
20
# File 'lib/zermelo/locks/redis_lock.rb', line 15

def initialize
  @owner_value = Thread.current.object_id
  @life        = 60
  @timeout     = 10
  @sleep_in_ms = 125
end

Instance Attribute Details

#expires_atObject

Adapted from github.com/mlanett/redis-lock, now covers locking multiple keys at once



13
14
15
# File 'lib/zermelo/locks/redis_lock.rb', line 13

def expires_at
  @expires_at
end

#lifeObject

Adapted from github.com/mlanett/redis-lock, now covers locking multiple keys at once



13
14
15
# File 'lib/zermelo/locks/redis_lock.rb', line 13

def life
  @life
end

#sleep_in_msObject

Adapted from github.com/mlanett/redis-lock, now covers locking multiple keys at once



13
14
15
# File 'lib/zermelo/locks/redis_lock.rb', line 13

def sleep_in_ms
  @sleep_in_ms
end

Instance Method Details

#extend_life(new_life) ⇒ Object



40
41
42
# File 'lib/zermelo/locks/redis_lock.rb', line 40

def extend_life( new_life )
  do_extend( new_life ) or raise Zermelo::LockNotAcquired.new(@keys.join(", "))
end

#lock(*record_klasses, &block) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/zermelo/locks/redis_lock.rb', line 22

def lock(*record_klasses, &block)
  @keys = record_klasses.map{|k| k.send(:class_key) }.sort.map{|k| "#{k}::lock" }
  do_lock_with_timeout(@timeout) or raise Zermelo::LockNotAcquired.new(@keys.join(", "))
  result = true
  if block
    begin
      result = (block.arity == 1) ? block.call(self) : block.call
    # rescue Exception => e
    #   puts e.message
    #   puts e.backtrace.join("\n")
    #   raise e
    ensure
      release_lock
    end
  end
  result
end

#unlockObject



44
45
46
# File 'lib/zermelo/locks/redis_lock.rb', line 44

def unlock
  release_lock
end