Sha256: 213ea0b6b1745c98252af8b3702d5b47c60a0f8fbb21bfde9c89a4382001a055
Contents?: true
Size: 1.04 KB
Versions: 3
Compression:
Stored size: 1.04 KB
Contents
require 'uuid' module Etcd class Lock class AcqusitionFailure < StandardError; end class ReleaseFailure < StandardError; end attr_reader :lock_id, :key, :value, :client attr_reader :retries, :retry_interval, :attempts def initialize(opts={}) @client = opts[:client] @key = opts[:key] || '/global/lock' @value = opts[:value] || 0 @retries = opts[:retries] || 1 @retry_interval = opts[:retry_interval] || 1 @attempts = 0 end def acquire @lock_id = uuid.generate begin response = client.test_and_set(key, lock_id, value) @attempts = 0 response rescue Exception => e @attempts += 1 raise AcqusitionFailure, e.message if attempts >= retries sleep retry_interval acquire end end def release begin response = client.test_and_set(key, value, lock_id) rescue Exception => e raise ReleaseFailure, e.message end end def uuid @uuid ||= UUID.new end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
etcd-0.0.6 | lib/etcd/lock.rb |
etcd-0.0.5 | lib/etcd/lock.rb |
etcd-0.0.4 | lib/etcd/lock.rb |