Class: Zermelo::Locks::RedisLock
- Inherits:
-
Object
- Object
- Zermelo::Locks::RedisLock
- Defined in:
- lib/zermelo/locks/redis_lock.rb
Instance Attribute Summary collapse
-
#expires_at ⇒ Object
Adapted from github.com/mlanett/redis-lock, now covers locking multiple keys at once.
-
#life ⇒ Object
Adapted from github.com/mlanett/redis-lock, now covers locking multiple keys at once.
-
#sleep_in_ms ⇒ Object
Adapted from github.com/mlanett/redis-lock, now covers locking multiple keys at once.
Instance Method Summary collapse
- #extend_life(new_life) ⇒ Object
-
#initialize ⇒ RedisLock
constructor
A new instance of RedisLock.
- #lock(*record_klasses, &block) ⇒ Object
- #unlock ⇒ Object
Constructor Details
#initialize ⇒ RedisLock
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_at ⇒ Object
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 |
#life ⇒ Object
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_ms ⇒ Object
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 |
#unlock ⇒ Object
44 45 46 |
# File 'lib/zermelo/locks/redis_lock.rb', line 44 def unlock release_lock end |