Class: DistributedMutex

Inherits:
Object
  • Object
show all
Defined in:
lib/distributed_mutex.rb

Overview

Cross-process locking using Redis.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key, redis = nil, timeout = 60) ⇒ DistributedMutex

Returns a new instance of DistributedMutex.



10
11
12
13
14
15
16
# File 'lib/distributed_mutex.rb', line 10

def initialize(key, redis=nil, timeout=60)
  @key = key
  @redis = redis || $redis
  @lock_manager = Redlock::Client.new([@redis])
  @timeout = timeout
  @mutex = Mutex.new
end

Class Method Details

.synchronize(key, redis = nil, timeout = 60, &blk) ⇒ Object



6
7
8
# File 'lib/distributed_mutex.rb', line 6

def self.synchronize(key, redis=nil, timeout=60, &blk)
  self.new(key, redis, timeout).synchronize(&blk)
end

Instance Method Details

#synchronizeObject

NOTE wrapped in mutex to maintain its semantics



19
20
21
22
23
24
25
26
# File 'lib/distributed_mutex.rb', line 19

def synchronize
  @mutex.lock
  @lock_manager.lock(@key, @timeout) do |lock_info|
    yield lock_info
  end
ensure
  @mutex.unlock
end