[Groonga-commit] droonga/droonga-engine at 1522367 [master] Use forwarders dedicated for remote engine nodes

Back to archive index

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: 1522367b49f22ff6749a8533f9b497c513f5a67f
  https://github.com/droonga/droonga-engine/commit/1522367b49f22ff6749a8533f9b497c513f5a67f

  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 (0efc276)
+++ lib/droonga/cluster.rb    2015-01-06 15:55:50 +0900 (fadda86)
@@ -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
@@ -156,7 +169,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 (e5772f1)
+++ lib/droonga/dispatcher.rb    2015-01-06 15:55:50 +0900 (4c58d5c)
@@ -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����������������������������...
下载 



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