Class: KnifeCloudformation::Cache::LocalLock
- Inherits:
-
Object
- Object
- KnifeCloudformation::Cache::LocalLock
- Defined in:
- lib/knife-cloudformation/cache.rb
Overview
Simple lock for memory cache
Instance Attribute Summary collapse
-
#_key ⇒ Symbol
readonly
Key name.
-
#_lock ⇒ Mutex
readonly
Underlying lock.
-
#_timeout ⇒ Numeric
readonly
Timeout.
Instance Method Summary collapse
-
#clear ⇒ Object
Clear the lock.
-
#initialize(name, args = {}) ⇒ LocalLock
constructor
Create new instance.
-
#lock { ... } ⇒ Object
Aquire lock and yield.
Constructor Details
#initialize(name, args = {}) ⇒ LocalLock
Create new instance
300 301 302 303 304 |
# File 'lib/knife-cloudformation/cache.rb', line 300 def initialize(name, args={}) @_key = name @_timeout = args.fetch(:timeout, -1).to_f @_lock = Mutex.new end |
Instance Attribute Details
#_key ⇒ Symbol (readonly)
Returns key name.
289 290 291 |
# File 'lib/knife-cloudformation/cache.rb', line 289 def _key @_key end |
#_lock ⇒ Mutex (readonly)
Returns underlying lock.
293 294 295 |
# File 'lib/knife-cloudformation/cache.rb', line 293 def _lock @_lock end |
#_timeout ⇒ Numeric (readonly)
Returns timeout.
291 292 293 |
# File 'lib/knife-cloudformation/cache.rb', line 291 def _timeout @_timeout end |
Instance Method Details
#clear ⇒ Object
Note:
this is a noop
Clear the lock
330 331 332 |
# File 'lib/knife-cloudformation/cache.rb', line 330 def clear # noop end |
#lock { ... } ⇒ Object
Aquire lock and yield
310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 |
# File 'lib/knife-cloudformation/cache.rb', line 310 def lock locked = false attempt_start = Time.now.to_f while(!locked && (_timeout < 0 || Time.now.to_f - attempt_start < _timeout)) locked = _lock.try_lock end if(locked) begin yield ensure _lock.unlock if _lock.locked? end else raise Redis::Lock::LockTimeout.new "Timeout on lock #{_key} exceeded #{_timeout} sec" end end |