[Groonga-commit] droonga/droonga-engine at d24dc1e [master] Detect suitable slice for requests like system.status correctly

Back to archive index

YUKI Hiroshi null+****@clear*****
Wed Apr 15 21:58:15 JST 2015


YUKI Hiroshi	2015-04-15 21:58:15 +0900 (Wed, 15 Apr 2015)

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

  Message:
    Detect suitable slice for requests like system.status correctly

  Modified files:
    lib/droonga/catalog/slices_volume.rb
    lib/droonga/planner.rb
    lib/droonga/plugins/system/absorb_data.rb
    lib/droonga/plugins/system/status.rb
    lib/droonga/single_step.rb
    lib/droonga/single_step_definition.rb

  Modified: lib/droonga/catalog/slices_volume.rb (+12 -4)
===================================================================
--- lib/droonga/catalog/slices_volume.rb    2015-04-15 21:55:22 +0900 (de53b5d)
+++ lib/droonga/catalog/slices_volume.rb    2015-04-15 21:58:15 +0900 (e419e0f)
@@ -39,8 +39,16 @@ module Droonga
         @slices ||= create_slices
       end
 
-      def select_slices(range=0..-1)
-        slices.sort_by(&:label)[range]
+      def select_slices(how=:all, range=0..-1)
+        selected = slices.sort_by(&:label)[range]
+        case how
+        when :random
+          [selected.sample]
+        when :all
+          selected
+        else
+          selected
+        end
       end
 
       def choose_slice(record)
@@ -76,13 +84,13 @@ module Droonga
         slices = []
         case message["type"]
         when "broadcast"
-          slices = select_slices
+          slices = select_slices(:all)
         when "scatter"
           record = message["record"]
           if record
             slices = [choose_slice(record)]
           else
-            slices = select_slices
+            slices = select_slices(message["slice"].to_sym)
           end
         end
         slices.each do |slice|

  Modified: lib/droonga/planner.rb (+10 -14)
===================================================================
--- lib/droonga/planner.rb    2015-04-15 21:55:22 +0900 (cf2e871)
+++ lib/droonga/planner.rb    2015-04-15 21:58:15 +0900 (2110181)
@@ -22,12 +22,12 @@ module Droonga
     include Loggable
     include ErrorMessages
 
-    attr_writer :write, :collector_class
+    attr_writer :write, :single_operation, :collector_class
 
     def initialize(dataset)
       @dataset = dataset
       @write = false
-      @specified_random = nil
+      @single_operation = false
       @collector_class = nil
     end
 
@@ -42,28 +42,21 @@ module Droonga
         }
       end
 
-      if options[:record] or random?
+      if options[:record] or single_operation?
         scatter(message, options)
       else
         broadcast(message, options)
       end
     end
 
-    def random=(value)
-      @specified_random = value
-    end
-
     private
     def write?
       @write
     end
 
-    def random?
-      if @specified_random.nil?
-        not write?
-      else
-        @specified_random
-      end
+    def single_operation?
+      return false if write?
+      @single_operation
     end
 
     def scatter(message, options={})
@@ -72,7 +65,10 @@ module Droonga
         :write => write?,
         :record => options[:record],
       }
-      scatter_options[:replica] = "random" if random?
+      if single_operation?
+        scatter_options[:slice]   = "random"
+        scatter_options[:replica] = "random"
+      end
       planner.scatter(scatter_options)
       planner.reduce(options[:reduce])
       planner.plan

  Modified: lib/droonga/plugins/system/absorb_data.rb (+1 -1)
===================================================================
--- lib/droonga/plugins/system/absorb_data.rb    2015-04-15 21:55:22 +0900 (bef63f2)
+++ lib/droonga/plugins/system/absorb_data.rb    2015-04-15 21:58:15 +0900 (d81ee3f)
@@ -329,7 +329,7 @@ module Droonga
 
       define_single_step do |step|
         step.name = "system.absorb-data"
-        step.random = true
+        step.single_operation = true
         step.handler = AbsorbDataHandler
         step.collector = Collectors::And
       end

  Modified: lib/droonga/plugins/system/status.rb (+1 -1)
===================================================================
--- lib/droonga/plugins/system/status.rb    2015-04-15 21:55:22 +0900 (3e2b94f)
+++ lib/droonga/plugins/system/status.rb    2015-04-15 21:58:15 +0900 (c917c9d)
@@ -44,7 +44,7 @@ module Droonga
 
       define_single_step do |step|
         step.name = "system.status"
-        step.random = true
+        step.single_operation = true
         step.handler = StatusHandler
         step.collector = Collectors::Or
       end

  Modified: lib/droonga/single_step.rb (+1 -1)
===================================================================
--- lib/droonga/single_step.rb    2015-04-15 21:55:22 +0900 (2c62710)
+++ lib/droonga/single_step.rb    2015-04-15 21:58:15 +0900 (6f02a9b)
@@ -33,7 +33,7 @@ module Droonga
       # XXX: Re-implement me.
       planner = Planner.new(@dataset)
       planner.write =****@defin*****?
-      planner.random =****@defin*****?
+      planner.single_operation =****@defin*****_operation?
       planner.collector_class =****@defin*****_class
 
       body = message["body"]

  Modified: lib/droonga/single_step_definition.rb (+5 -12)
===================================================================
--- lib/droonga/single_step_definition.rb    2015-04-15 21:55:22 +0900 (23ef729)
+++ lib/droonga/single_step_definition.rb    2015-04-15 21:58:15 +0900 (56f64e6)
@@ -18,7 +18,7 @@ module Droonga
     attr_accessor :name
     attr_accessor :handler
     attr_accessor :collector
-    attr_writer :write
+    attr_writer :write, :single_operation
     attr_writer :timeout_seconds_calculator
     attr_accessor :inputs
     attr_accessor :output
@@ -28,7 +28,7 @@ module Droonga
       @handler = nil
       @collector = nil
       @write = false
-      @user_defined_random = nil
+      @single_operation = false
       @timeout_seconds_calculator = lambda do |step|
         if step["timeout"]
           return step["timeout"]
@@ -47,16 +47,9 @@ module Droonga
       @write
     end
 
-    def random=(value)
-      @user_defined_random = value
-    end
-
-    def random?
-      if @user_defined_random.nil?
-        not write?
-      else
-        @user_defined_random
-      end
+    def single_operation?
+      return false if @write
+      @single_operation
     end
 
     def timeout_seconds_for_step(step)
-------------- next part --------------
HTML����������������������������...
Download 



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