[Groonga-commit] droonga/droonga-engine at a94528c [master] Add new serf event absorb_data (experimental)

Back to archive index

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 



More information about the Groonga-commit mailing list
Back to archive index