Class: MiniScheduler::DistributedMutex
- Inherits:
-
Object
- Object
- MiniScheduler::DistributedMutex
- Defined in:
- lib/mini_scheduler/distributed_mutex.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(key, redis) ⇒ DistributedMutex
constructor
A new instance of DistributedMutex.
-
#synchronize ⇒ Object
NOTE wrapped in mutex to maintain its semantics.
Constructor Details
#initialize(key, redis) ⇒ DistributedMutex
Returns a new instance of DistributedMutex.
14 15 16 17 18 19 |
# File 'lib/mini_scheduler/distributed_mutex.rb', line 14 def initialize(key, redis) raise ArgumentError.new('redis argument is nil') if redis.nil? @key = key @redis = redis @mutex = Mutex.new end |
Class Method Details
.redis=(redis) ⇒ Object
6 7 8 |
# File 'lib/mini_scheduler/distributed_mutex.rb', line 6 def self.redis=(redis) @default_redis = redis end |
.synchronize(key, redis = nil, &blk) ⇒ Object
10 11 12 |
# File 'lib/mini_scheduler/distributed_mutex.rb', line 10 def self.synchronize(key, redis = nil, &blk) self.new(key, redis || @default_redis).synchronize(&blk) end |
Instance Method Details
#synchronize ⇒ Object
NOTE wrapped in mutex to maintain its semantics
22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/mini_scheduler/distributed_mutex.rb', line 22 def synchronize @mutex.lock while !try_to_get_lock sleep 0.001 end yield ensure @redis.del @key @mutex.unlock end |