Class: Lusnoc::Mutex
Instance Attribute Summary collapse
-
#key ⇒ Object
readonly
Returns the value of attribute key.
-
#owner ⇒ Object
readonly
Returns the value of attribute owner.
-
#value ⇒ Object
readonly
Returns the value of attribute value.
Instance Method Summary collapse
-
#initialize(key, value: Socket.gethostname, ttl: 20) ⇒ Mutex
constructor
A new instance of Mutex.
- #locked? ⇒ Boolean
- #on_mutex_lost(&block) ⇒ Object
- #owned? ⇒ Boolean
- #session_id ⇒ Object
- #synchronize(timeout: 0, &block) ⇒ Object
Methods included from Helper
Constructor Details
#initialize(key, value: Socket.gethostname, ttl: 20) ⇒ Mutex
Returns a new instance of Mutex.
10 11 12 13 14 |
# File 'lib/lusnoc/mutex.rb', line 10 def initialize(key, value: Socket.gethostname, ttl: 20) @key = key @value = value @ttl = ttl end |
Instance Attribute Details
#key ⇒ Object (readonly)
Returns the value of attribute key.
8 9 10 |
# File 'lib/lusnoc/mutex.rb', line 8 def key @key end |
#owner ⇒ Object (readonly)
Returns the value of attribute owner.
8 9 10 |
# File 'lib/lusnoc/mutex.rb', line 8 def owner @owner end |
#value ⇒ Object (readonly)
Returns the value of attribute value.
8 9 10 |
# File 'lib/lusnoc/mutex.rb', line 8 def value @value end |
Instance Method Details
#locked? ⇒ Boolean
16 17 18 |
# File 'lib/lusnoc/mutex.rb', line 16 def locked? !!owner end |
#on_mutex_lost(&block) ⇒ Object
32 33 34 |
# File 'lib/lusnoc/mutex.rb', line 32 def on_mutex_lost(&block) @on_mutex_lost = block end |
#owned? ⇒ Boolean
20 21 22 |
# File 'lib/lusnoc/mutex.rb', line 20 def owned? owner == Thread.current end |
#session_id ⇒ Object
24 25 26 |
# File 'lib/lusnoc/mutex.rb', line 24 def session_id @session&.id end |
#synchronize(timeout: 0, &block) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/lusnoc/mutex.rb', line 36 def synchronize(timeout: 0, &block) t = Timeouter::Timer.new(timeout, eclass: TimeoutError, message: 'mutex acquisition expired') Session.new("mutex_session/#{key}", ttl: @ttl) do |session| @session = session session.on_session_die do @owner = nil @on_mutex_lost&.call(self) end return acquisition_loop! key, session, value, t, &block ensure release(key, session.id, timeout: 2) rescue nil logger.info("Mutex[#{key}] released for Session[#{session.name}:#{session.id}]") @owner = nil @session = nil end end |