[Groonga-commit] droonga/droonga-engine at 26e41ae [master] Collect routes by each replicas and slices, not the master dataset

Zurück zum Archiv-Index

YUKI Hiroshi null+****@clear*****
Fri Dec 5 15:44:41 JST 2014


YUKI Hiroshi	2014-12-05 15:44:41 +0900 (Fri, 05 Dec 2014)

  New Revision: 26e41ae77c5f130ce49fab2eafa1a0c076e9dc0e
  https://github.com/droonga/droonga-engine/commit/26e41ae77c5f130ce49fab2eafa1a0c076e9dc0e

  Merged e0f9f34: Merge pull request #30 from piroor/replicas-in-a-branch

  Message:
    Collect routes by each replicas and slices, not the master dataset

  Modified files:
    lib/droonga/catalog/dataset.rb
    lib/droonga/catalog/replicas_volume.rb
    lib/droonga/catalog/slice.rb
    lib/droonga/catalog/slices_volume.rb

  Modified: lib/droonga/catalog/dataset.rb (+5 -43)
===================================================================
--- lib/droonga/catalog/dataset.rb    2014-12-05 15:11:04 +0900 (f3a9063)
+++ lib/droonga/catalog/dataset.rb    2014-12-05 15:44:41 +0900 (abb832d)
@@ -68,54 +68,16 @@ module Droonga
       end
 
       def compute_routes(message, live_nodes)
-        collect_routes_from_replicas(replicas,
-                                     :message    => message,
+        @replicas.collect_routes_for(message,
                                      :live_nodes => live_nodes)
       end
 
       def single_slice?
         # TODO: Support slice key
-        replicas.all? do |replica|
-          replica.is_a?(SingleVolume) or
-            replica.slices.nil? or
-            replica.slices.size == 1
-        end
-      end
-
-      private
-      def collect_routes_from_replicas(replicas, params)
-        message = params[:message]
-        routes = params[:routes] ||= []
-        case message["type"]
-        when "broadcast"
-          replicas = replicas.select(message["replica"].to_sym, params[:live_nodes])
-          replicas.each do |replica|
-            slices = replica.select_slices
-            collect_routes_from_slices(slices, params)
-          end
-        when "scatter"
-          replicas = replicas.select(message["replica"].to_sym, params[:live_nodes])
-          replicas.each do |replica|
-            slice = replica.choose_slice(message["record"])
-            collect_routes_from_slice(slice, params)
-          end
-        end
-        routes
-      end
-
-      def collect_routes_from_slices(slices, params)
-        slices.each do |slice|
-          collect_routes_from_slice(slice, params)
-        end
-      end
-
-      def collect_routes_from_slice(slice, params)
-        if slice.replicas
-          collect_routes_from_replicas(slice.replicas, params)
-        else
-          routes = params[:routes] ||= []
-          routes << slice.volume.address.to_s
-          routes
+        replicas.all? do |volume|
+          volume.is_a?(SingleVolume) or
+            volume.is_a?(ReplicasVolume) or
+            volume.slices.size == 1
         end
       end
     end

  Modified: lib/droonga/catalog/replicas_volume.rb (+17 -0)
===================================================================
--- lib/droonga/catalog/replicas_volume.rb    2014-12-05 15:11:04 +0900 (46dc0b7)
+++ lib/droonga/catalog/replicas_volume.rb    2014-12-05 15:44:41 +0900 (30645c6)
@@ -77,6 +77,23 @@ module Droonga
         end
       end
 
+      def collect_routes_for(message, params)
+        routes = params[:routes] ||= []
+        case message["type"]
+        when "broadcast"
+          volumes = select(message["replica"].to_sym, params[:live_nodes])
+          volumes.each do |volume|
+            volume.collect_routes_for(message, params)
+          end
+        when "scatter"
+          volumes = select(message["replica"].to_sym, params[:live_nodes])
+          volumes.each do |volume|
+            volume.collect_routes_for(message, params)
+          end
+        end
+        routes
+      end
+
       private
       def collect_all_nodes
         nodes = []

  Modified: lib/droonga/catalog/slice.rb (+12 -0)
===================================================================
--- lib/droonga/catalog/slice.rb    2014-12-05 15:11:04 +0900 (a4a0ad0)
+++ lib/droonga/catalog/slice.rb    2014-12-05 15:44:41 +0900 (2a558e3)
@@ -56,6 +56,18 @@ module Droonga
       def all_nodes
         @all_nodes ||= volume.all_nodes
       end
+
+      def collect_routes_for(message, params)
+        if replicas
+          replicas.collect_routes_for(message, params)
+        elsif slices
+          slices.collect_routes_for(message, params)
+        else
+          routes = params[:routes] ||= []
+          routes << volume.address.to_s
+          routes
+        end
+      end
     end
   end
 end

  Modified: lib/droonga/catalog/slices_volume.rb (+15 -0)
===================================================================
--- lib/droonga/catalog/slices_volume.rb    2014-12-05 15:11:04 +0900 (628446e)
+++ lib/droonga/catalog/slices_volume.rb    2014-12-05 15:44:41 +0900 (6141ab4)
@@ -71,6 +71,21 @@ module Droonga
         @all_nodes ||= collect_all_nodes
       end
 
+      def collect_routes_for(message, params)
+        routes = params[:routes] ||= []
+        case message["type"]
+        when "broadcast"
+          slices = select_slices
+          slices.each do |slice|
+            slice.collect_routes_for(message, params)
+          end
+        when "scatter"
+          slice = choose_slice(message["record"])
+          slice.collect_routes_for(message, params)
+        end
+        routes
+      end
+
       private
       def compute_continuum
         total_weight = compute_total_weight
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Zurück zum Archiv-Index