From 257f06a10c291b37dd6dad0678101d93312cab8d Mon Sep 17 00:00:00 2001 From: Igor Serebryany Date: Wed, 5 Feb 2014 23:44:24 -0800 Subject: [PATCH 1/2] always create sequential nodes this makes it trivially possible to do leader election in synapse. --- lib/nerve/reporter.rb | 21 ++++++++++++++++----- lib/nerve/service_watcher.rb | 4 ++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/lib/nerve/reporter.rb b/lib/nerve/reporter.rb index 6565bc60..222a98c9 100644 --- a/lib/nerve/reporter.rb +++ b/lib/nerve/reporter.rb @@ -12,8 +12,11 @@ def initialize(opts) @path = opts['hosts'].shuffle.join(',') + opts['path'] @data = parse_data(opts['data'] || '') + @key = opts['key'] @key.insert(0,'/') unless @key[0] == '/' + @key.insert(-1, '_') unless @key[-1] == '_' + @full_key = nil end def start() @@ -43,15 +46,23 @@ def ping? private def zk_delete - @zk.delete(@key, :ignore => :no_node) + if @full_key + @zk.delete(@full_key, :ignore => :no_node) + @full_key = nil + end + end + + def zk_create + @full_key = @zk.create(@key, :data => @data, :mode => :ephemeral_sequential) end def zk_save - log.debug "nerve: writing data #{@data.class} to zk at #{@key} with #{@data.inspect}" + return zk_create unless @full_key + begin - @zk.set(@key,@data) - rescue ZK::Exceptions::NoNode => e - @zk.create(@key,:data => @data, :mode => :ephemeral) + @zk.set(@full_key, @data) + rescue ZK::Exceptions::NoNode + zk_create end end diff --git a/lib/nerve/service_watcher.rb b/lib/nerve/service_watcher.rb index db3f779c..e91fb3bd 100644 --- a/lib/nerve/service_watcher.rb +++ b/lib/nerve/service_watcher.rb @@ -21,8 +21,8 @@ def initialize(service={}) @reporter = Reporter.new({ 'hosts' => service['zk_hosts'], 'path' => service['zk_path'], - 'key' => "#{service['instance_id']}_#{@name}", - 'data' => {'host' => service['host'], 'port' => service['port']}, + 'key' => "/#{service['instance_id']}_", + 'data' => {'host' => service['host'], 'port' => service['port'], 'name' => service['instance_id']}, }) # instantiate the checks for this service From d2376ffa29fb190e763f393ae666ffbcdc58ac07 Mon Sep 17 00:00:00 2001 From: Igor Serebryany Date: Wed, 5 Feb 2014 23:48:45 -0800 Subject: [PATCH 2/2] Revert "begin by reporting the service as down" This reverts commit 4390e9d6c57f28b28dc7b3fdc7c714553efb1a8f. Now that we're creating all nodes as sequential nodes, there's no reason to do this. --- lib/nerve/service_watcher.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/nerve/service_watcher.rb b/lib/nerve/service_watcher.rb index e91fb3bd..1bd8913a 100644 --- a/lib/nerve/service_watcher.rb +++ b/lib/nerve/service_watcher.rb @@ -52,9 +52,7 @@ def initialize(service={}) def run() log.info "nerve: starting service watch #{@name}" - # begin by reporting down @reporter.start() - @reporter.report_down was_up = false until $EXIT