From b36c20d3484517c1fbe1c0601054edaf749ad765 Mon Sep 17 00:00:00 2001 From: YUKI Hiroshi Date: Sat, 28 Jun 2014 00:29:33 +0900 Subject: [PATCH] Implement "join" event via serf serf event join {"type":"replica","host":"192.168.x.x","dataset":"Default"} --- lib/droonga/command/serf_event_handler.rb | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/lib/droonga/command/serf_event_handler.rb b/lib/droonga/command/serf_event_handler.rb index ad2c41f9..6bcabf12 100644 --- a/lib/droonga/command/serf_event_handler.rb +++ b/lib/droonga/command/serf_event_handler.rb @@ -21,6 +21,7 @@ require "droonga/path" require "droonga/serf" +require "droonga/catalog_generator" require "droonga/safe_file_writer" module Droonga @@ -73,6 +74,33 @@ def process_event @event_name == "query:change_role" save_status(:role, @payload["role"]) end + + if @event_name == "user:join" or + @event_name == "query:join" + process_node_join + end + end + + def process_node_join + dataset = @payload["dataset"] + return unless dataset + + host = @payload["host"] + return unless host + + return unless @payload["type"] == "replica" + + current_catalog = JSON.parse(Path.catalog.read) + current_params = generator.catalog_to_params(current_catalog) + modifications = { + dataset => { + :add_replica_hosts => [host], + }, + } + updated_params = CatalogGenerator.update_params(current_params, + modifications) + updated_catalog = CatalogGenerator.generate(updated_params) + SafeFileWriter.write(Catalog.path, JSON.pretty_generate(updated_catalog)) end def live_nodes