[Groonga-commit] droonga/droonga-engine at 9bc0760 [buffered-forward] Reload node metadata dynamically to avoid losing changes introduced by different threads/processes

Back to archive index

YUKI Hiroshi null+****@clear*****
Fri Mar 27 17:44:06 JST 2015


YUKI Hiroshi	2015-03-27 17:44:06 +0900 (Fri, 27 Mar 2015)

  New Revision: 9bc076058c4f144208adb80b3670060b062a1698
  https://github.com/droonga/droonga-engine/commit/9bc076058c4f144208adb80b3670060b062a1698

  Message:
    Reload node metadata dynamically to avoid losing changes introduced by different threads/processes

  Modified files:
    lib/droonga/command/remote.rb
    lib/droonga/engine.rb
    lib/droonga/node_metadata.rb
    lib/droonga/serf.rb

  Modified: lib/droonga/command/remote.rb (+1 -0)
===================================================================
--- lib/droonga/command/remote.rb    2015-03-27 17:28:59 +0900 (f4550b9)
+++ lib/droonga/command/remote.rb    2015-03-27 17:44:06 +0900 (acf58b3)
@@ -273,6 +273,7 @@ module Droonga
                               :messages_per_second => messages_per_second,
                               :client           => "droonga-send")
 
+          metadata.reload
           metadata.delete(:absorbing)
           log("done")
         end

  Modified: lib/droonga/engine.rb (+3 -0)
===================================================================
--- lib/droonga/engine.rb    2015-03-27 17:28:59 +0900 (9576219)
+++ lib/droonga/engine.rb    2015-03-27 17:44:06 +0900 (d7a7e61)
@@ -33,6 +33,7 @@ module Droonga
     include Deferrable
 
     def initialize(loop, name, internal_name)
+      @loop = loop
       @catalog = load_catalog
       @node_metadata = NodeMetadata.new
       @state = EngineState.new(loop, name,
@@ -48,6 +49,7 @@ module Droonga
 
     def start
       logger.trace("start: start")
+      @node_metadata.start_observe(@loop)
       @state.on_ready = lambda do
         on_ready
       end
@@ -62,6 +64,7 @@ module Droonga
 
     def stop_gracefully
       logger.trace("stop_gracefully: start")
+      @node_metadata.stop_observe
       @cluster.stop_observe
       on_finish = lambda do
         logger.trace("stop_gracefully/on_finish: start")

  Modified: lib/droonga/node_metadata.rb (+14 -0)
===================================================================
--- lib/droonga/node_metadata.rb    2015-03-27 17:28:59 +0900 (7f4228c)
+++ lib/droonga/node_metadata.rb    2015-03-27 17:44:06 +0900 (5485f02)
@@ -80,6 +80,20 @@ module Droonga
       @metadata = load
     end
 
+    def start_observe(loop)
+      return if @file_observer
+      @file_observer = FileObserver.new(loop, metadata_file)
+      @file_observer.on_change = lambda do
+        reload
+      end
+      @file_observer.start
+    end
+
+    def stop_observe
+      return unless @file_observer
+      @file_observer.stop
+    end
+
     private
     def normalize_key(key)
       key.to_sym

  Modified: lib/droonga/serf.rb (+2 -0)
===================================================================
--- lib/droonga/serf.rb    2015-03-27 17:28:59 +0900 (6a099ac)
+++ lib/droonga/serf.rb    2015-03-27 17:44:06 +0900 (7417af2)
@@ -142,11 +142,13 @@ module Droonga
     end
 
     def role
+      @node_metadata.reload
       @node_metadata.role
     end
 
     def role=(new_role)
       new_role ||= NodeMetadata::Role::SERVICE_PROVIDER
+      @node_metadata.reload
       @node_metadata.role = new_role
       set_tag("role", new_role)
       # after that you must run update_cluster_state to update the cluster information cache
-------------- next part --------------
HTML����������������������������...
Download 



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