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����������������������������...다운로드