Class: MiniScheduler::DistributedMutex

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key, redis) ⇒ DistributedMutex

Returns a new instance of DistributedMutex.

Raises:

  • (ArgumentError)


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

#synchronizeObject

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