YUKI Hiroshi
null+****@clear*****
Sun Jun 29 01:22:24 JST 2014
YUKI Hiroshi 2014-06-29 01:22:24 +0900 (Sun, 29 Jun 2014) New Revision: a94528cc0f0c22bb700f6e0dc0328e56b56dbf82 https://github.com/droonga/droonga-engine/commit/a94528cc0f0c22bb700f6e0dc0328e56b56dbf82 Message: Add new serf event absorb_data (experimental) Modified files: lib/droonga/command/serf_event_handler.rb Modified: lib/droonga/command/serf_event_handler.rb (+29 -0) =================================================================== --- lib/droonga/command/serf_event_handler.rb 2014-06-29 01:14:58 +0900 (5135e86) +++ lib/droonga/command/serf_event_handler.rb 2014-06-29 01:22:24 +0900 (eae4366) @@ -18,6 +18,7 @@ require "json" require "droonga/path" require "droonga/serf" require "droonga/catalog_generator" +require "droonga/data_absorber" require "droonga/safe_file_writer" module Droonga @@ -75,9 +76,15 @@ module Droonga add_replicas when "remove_replicas" remove_replicas + when "absorb_data" + absorb_data end end + def host + @serf_name.split(":").first + end + def given_hosts hosts = @payload["hosts"] return nil unless hosts @@ -130,6 +137,28 @@ module Droonga SafeFileWriter.write(Path.catalog, JSON.pretty_generate(generator.catalog)) end + def absorb_data + dataset = @payload["dataset"] + return unless dataset + + soruce = @payload["soruce"] + return unless soruce + + current_catalog = JSON.parse(Path.catalog.read) + generator = CatalogGenerator.new + generator.load(current_catalog) + + port = @payload["port"] || generator.datasets[dataset].replicas.port + tag = @payload["tag"] || generator.datasets[dataset].replicas.tag + + DataAbsorber.absorb(:dataset => dataset, + :source_host => source, + :destination_host => host, + :port => port, + :tag => tag) + #TODO: how to notify that this process is successfully finished for other nodes? + end + def live_nodes nodes = {} members = `#{@serf} members -rpc-addr #{@serf_rpc_address}` -------------- next part -------------- HTML����������������������������...Download