class RabbitMQ::Cluster::Etcd
Attributes
client[RW]
Public Class Methods
build()
click to toggle source
# File lib/rabbitmq/cluster/etcd.rb, line 8 def self.build puts "etcd address: #{ENV['ETCD_HOST']}" new( ::Etcd::Client.new(host: ENV['ETCD_HOST']) ) end
new(client)
click to toggle source
# File lib/rabbitmq/cluster/etcd.rb, line 15 def initialize(client) self.client = client end
Public Instance Methods
acquire_lock() { || ... }
click to toggle source
# File lib/rabbitmq/cluster/etcd.rb, line 19 def acquire_lock client.compare_and_swap('/rabbitmq/lock', value: true, prevValue: false) yield rescue ::Etcd::TestFailed client.watch('/rabbitmq/lock') retry ensure client.set('/rabbitmq/lock', value: false) end
nodes()
click to toggle source
# File lib/rabbitmq/cluster/etcd.rb, line 29 def nodes with_retry do begin client.get('/rabbitmq/nodes').children.map(&:value).sort rescue ::Etcd::KeyNotFound [] end end end
register(node_name, wait=nil)
click to toggle source
# File lib/rabbitmq/cluster/etcd.rb, line 39 def register(node_name, wait=nil) with_retry(wait) do client.set(key_for(node_name), value: node_name, ttl: 10) end end
Private Instance Methods
key_for(node_name)
click to toggle source
# File lib/rabbitmq/cluster/etcd.rb, line 75 def key_for(node_name) "/rabbitmq/nodes/#{node_name}" end
with_retry(wait = nil) { || ... }
click to toggle source
# File lib/rabbitmq/cluster/etcd.rb, line 62 def with_retry(wait = nil) wait ||= 1 try = 0 begin yield rescue sleep wait try += 1 retry if try < 10 raise end end