YUKI Hiroshi
null+****@clear*****
Tue Jan 6 15:55:50 JST 2015
YUKI Hiroshi 2015-01-06 15:55:50 +0900 (Tue, 06 Jan 2015) New Revision: a868fec405508945bf92475b2ddc7df2b218bcef https://github.com/droonga/droonga-engine/commit/a868fec405508945bf92475b2ddc7df2b218bcef Message: Use forwarders dedicated for remote engine nodes Modified files: lib/droonga/cluster.rb lib/droonga/dispatcher.rb lib/droonga/engine_node.rb Modified: lib/droonga/cluster.rb (+14 -1) =================================================================== --- lib/droonga/cluster.rb 2015-01-06 15:03:29 +0900 (2eae1b4) +++ lib/droonga/cluster.rb 2015-01-06 15:55:50 +0900 (c6429a3) @@ -61,6 +61,7 @@ module Droonga logger.info("cluster state not changed") else logger.info("cluster state changed") + engine_nodes.each(&:on_change) on_change end end @@ -69,6 +70,18 @@ module Droonga @engine_nodes ||= create_engine_nodes end + def forward(message, destination) + receiver = destination["to"] + receiver_node_name = receiver.match(/\A[^:]+:\d+\/[^.]+/).to_s + @engine_nodes.each do |node| + if node.name == receiver_node_name + node.forwarder.forward(message, destination) + return true + end + end + false + end + def all_nodes if @catalog @catalog.all_nodes @@ -168,7 +181,7 @@ module Droonga def create_engine_nodes all_node_names.collect do |name| node_state = @state[name] || {} - EngineNode.new(name, node_state) + EngineNode.new(name, node_state, @loop) end end Modified: lib/droonga/dispatcher.rb (+10 -3) =================================================================== --- lib/droonga/dispatcher.rb 2015-01-06 15:03:29 +0900 (b3e1daa) +++ lib/droonga/dispatcher.rb 2015-01-06 15:55:50 +0900 (ab15d26) @@ -115,6 +115,9 @@ module Droonga def forward(message, destination) logger.trace("forward start") + unless local?(destination) + return if****@clust*****(message, destination) + end @forwarder.forward(message, destination) logger.trace("forward done") end @@ -179,9 +182,13 @@ module Droonga if local?(destination) process_internal_message(message) else - @forwarder.forward(@message.merge("body" => message), - "type" => "dispatcher", - "to" => destination) + forward_message =****@messa*****("body" => message) + forward_destination = { + "type" => "dispatcher", + "to" => destination, + } + @cluster.forward(forward_message, forward_destination) || + @forwarder.forward(forward_message, forward_destination) end end Modified: lib/droonga/engine_node.rb (+9 -2) =================================================================== --- lib/droonga/engine_node.rb 2015-01-06 15:03:29 +0900 (65060a1) +++ lib/droonga/engine_node.rb 2015-01-06 15:55:50 +0900 (3022a3f) @@ -13,15 +13,18 @@ # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +require "droonga/forwarder" require "droonga/node_metadata" module Droonga class EngineNode - attr_reader :name + attr_reader :name, :forwarder - def initialize(name, state) + def initialize(name, state, loop) @name = name @state = state + + @forwarder = Forwarder.new(loop, :buffering => true) end def live? @@ -68,5 +71,9 @@ module Droonga false end end + + def on_change + @forwarder.resume + end end end -------------- next part -------------- HTML����������������������������... ダウンロード