YUKI Hiroshi
null+****@clear*****
Wed Apr 29 20:59:41 JST 2015
YUKI Hiroshi 2015-04-29 20:59:41 +0900 (Wed, 29 Apr 2015) New Revision: 3fc6d757e87d82ce5e64006b8256883ce5f63dad https://github.com/droonga/droonga-engine/commit/3fc6d757e87d82ce5e64006b8256883ce5f63dad Message: Add system.statistics.object.count.per-replica command Modified files: lib/droonga/planner.rb lib/droonga/plugins/system/statistics.rb lib/droonga/single_step.rb lib/droonga/single_step_definition.rb Modified: lib/droonga/planner.rb (+7 -2) =================================================================== --- lib/droonga/planner.rb 2015-04-29 16:50:40 +0900 (6b7389f) +++ lib/droonga/planner.rb 2015-04-29 20:59:41 +0900 (4126cf6) @@ -22,12 +22,13 @@ module Droonga include Loggable include ErrorMessages - attr_writer :write, :single_operation, :collector_class + attr_writer :write, :single_operation, :use_all_replicas, :collector_class def initialize(dataset) @dataset = dataset @write = false @single_operation = false + @use_all_replicas = false @collector_class = nil end @@ -75,6 +76,10 @@ module Droonga @single_operation end + def use_all_replicas? + write? or @use_all_replicas + end + def scatter(message, options={}) planner = DistributedCommandPlanner.new(@dataset, message) scatter_options = { @@ -95,7 +100,7 @@ module Droonga broadcast_options = { :write => write?, } - if write? + if use_all_replicas? broadcast_options[:replica] = "all" elsif single_operation? broadcast_options[:slice] = "random" Modified: lib/droonga/plugins/system/statistics.rb (+27 -1) =================================================================== --- lib/droonga/plugins/system/statistics.rb 2015-04-29 16:50:40 +0900 (db2fe4d) +++ lib/droonga/plugins/system/statistics.rb 2015-04-29 20:59:41 +0900 (3e9c12c) @@ -23,8 +23,11 @@ module Droonga include DatabaseScanner def handle(message) + counts(message.request["output"]) + end + + def counts(output) counts = {} - output = message.request["output"] if output and output.is_a?(Array) if output.include?("tables") counts["tables"] = n_tables @@ -48,6 +51,29 @@ module Droonga step.handler = StatisticsObjectCountHandler step.collector = Collectors::RecursiveSum end + + class StatisticsObjectCountPerReplicaHandler < StatisticsObjectCountHandler + def handle(message) + { + replica_name => counts(message.request["output"]), + } + end + + def replica_name + my_node_name + end + + def my_node_name + ENV["DROONGA_ENGINE_NAME"] + end + end + + define_single_step do |step| + step.name = "system.statistics.object.count.per-replica" + step.use_all_replicas = true + step.handler = StatisticsObjectCountPerReplicaHandler + step.collector = Collectors::Sum + end end end end Modified: lib/droonga/single_step.rb (+1 -0) =================================================================== --- lib/droonga/single_step.rb 2015-04-29 16:50:40 +0900 (6f02a9b) +++ lib/droonga/single_step.rb 2015-04-29 20:59:41 +0900 (461ef55) @@ -34,6 +34,7 @@ module Droonga planner = Planner.new(@dataset) planner.write =****@defin*****? planner.single_operation =****@defin*****_operation? + planner.use_all_replicas =****@defin*****_all_replicas? planner.collector_class =****@defin*****_class body = message["body"] Modified: lib/droonga/single_step_definition.rb (+7 -0) =================================================================== --- lib/droonga/single_step_definition.rb 2015-04-29 16:50:40 +0900 (6d2fb28) +++ lib/droonga/single_step_definition.rb 2015-04-29 20:59:41 +0900 (04ce951) @@ -19,6 +19,7 @@ module Droonga attr_accessor :handler attr_accessor :collector attr_writer :write, :single_operation + attr_writer :use_all_replicas attr_writer :timeout_calculator attr_accessor :inputs attr_accessor :output @@ -29,6 +30,7 @@ module Droonga @collector = nil @write = false @single_operation = false + @use_all_replicas = false @timeout_calculator = lambda do |step| if step["timeout"] return step["timeout"] @@ -52,6 +54,11 @@ module Droonga @single_operation end + def use_all_replicas? + return true if @write + @use_all_replicas + end + def timeout_for_step(step) if @timeout_calculator @timeout_calculator.call(step) -------------- next part -------------- HTML����������������������������... Descargar