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: 13e3568da14d7abed8fb5260f21ce84ff2e97e3a https://github.com/droonga/droonga-engine/commit/13e3568da14d7abed8fb5260f21ce84ff2e97e3a 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����������������������������... 下載