Class: Sfn::Cache::LocalLock
- Inherits:
 - 
      Object
      
        
- Object
 - Sfn::Cache::LocalLock
 
 
- Defined in:
 - lib/sfn/cache.rb
 
Overview
Simple lock for memory cache
Defined Under Namespace
Classes: LocalLockTimeout
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
      301 302 303 304 305  | 
    
      # File 'lib/sfn/cache.rb', line 301 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
      290 291 292  | 
    
      # File 'lib/sfn/cache.rb', line 290 def _key @_key end  | 
  
#_lock ⇒ Mutex (readonly)
Returns underlying lock
      294 295 296  | 
    
      # File 'lib/sfn/cache.rb', line 294 def _lock @_lock end  | 
  
#_timeout ⇒ Numeric (readonly)
Returns timeout
      292 293 294  | 
    
      # File 'lib/sfn/cache.rb', line 292 def _timeout @_timeout end  | 
  
Instance Method Details
#clear ⇒ Object
    Note:
    
  
this is a noop
Clear the lock
      335 336 337  | 
    
      # File 'lib/sfn/cache.rb', line 335 def clear # noop end  | 
  
#lock { ... } ⇒ Object
Aquire lock and yield
      311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330  | 
    
      # File 'lib/sfn/cache.rb', line 311 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 if defined?(Redis) raise Redis::Lock::LockTimeout.new "Timeout on lock #{_key} exceeded #{_timeout} sec" else raise LocalLockTimeout.new "Timeout on lock #{_key} exceeded #{_timeout} sec" end end end  |