diff --git a/example/nerve.conf.json b/example/nerve.conf.json index be43fcbf..9fe6ec69 100644 --- a/example/nerve.conf.json +++ b/example/nerve.conf.json @@ -8,6 +8,7 @@ "zk_hosts": ["localhost:2181"], "zk_path": "/nerve/services/your_http_service/services", "check_interval": 2, + "sequential": false, "checks": [ { "type": "http", diff --git a/lib/nerve/reporter.rb b/lib/nerve/reporter.rb index 6565bc60..b190faef 100644 --- a/lib/nerve/reporter.rb +++ b/lib/nerve/reporter.rb @@ -14,6 +14,9 @@ def initialize(opts) @data = parse_data(opts['data'] || '') @key = opts['key'] @key.insert(0,'/') unless @key[0] == '/' + @sequential = opts['sequential'] || false + @key << '-' if @sequential + @full_key = @key end def start() @@ -23,7 +26,7 @@ def start() log.info "nerve: successfully created zk connection to #{@path}" end - def report_up() + def report_up zk_save end @@ -43,15 +46,17 @@ def ping? private def zk_delete - @zk.delete(@key, :ignore => :no_node) + @zk.delete(@full_key, :ignore => :no_node) end def zk_save - log.debug "nerve: writing data #{@data.class} to zk at #{@key} with #{@data.inspect}" + log.debug "nerve: writing data #{@data.class} to zk at #{@key} with #{@data.inspect} and sequential " \ + "flag is #{@sequential}" begin - @zk.set(@key,@data) + @zk.set(@full_key, @data) rescue ZK::Exceptions::NoNode => e - @zk.create(@key,:data => @data, :mode => :ephemeral) + @full_key = @zk.create(@key,:data => @data, :ephemeral => true, + :sequential => @sequential) end end diff --git a/lib/nerve/service_watcher.rb b/lib/nerve/service_watcher.rb index db3f779c..3bfdce97 100644 --- a/lib/nerve/service_watcher.rb +++ b/lib/nerve/service_watcher.rb @@ -23,6 +23,7 @@ def initialize(service={}) 'path' => service['zk_path'], 'key' => "#{service['instance_id']}_#{@name}", 'data' => {'host' => service['host'], 'port' => service['port']}, + 'sequential' => service['sequential'] || false }) # instantiate the checks for this service