Kouhei Sutou
kou****@clear*****
Mon Feb 3 12:45:40 JST 2014
> New Model:
> planner = DistributedCommandPlanner.new(message)
> planner.broadcast(:write => true)
> planner.reduce("name", <reducer>)
> planner.plan
> planner.messages
planner.planでmessagesを返しちゃうのはどうですか?そしたら、
APIが少なくなってシンプルになりそうです。
In <41ab9194101a2b1c29d7bf508cb1cfbf1268a0a4 �� jenkins.clear-code.com>
"[Groonga-commit] droonga/fluent-plugin-droonga �� 41ab919 [master] Simplify API of DistributedCommandPlanner" on Mon, 03 Feb 2014 11:28:32 +0900,
YUKI Hiroshi <null+groonga �� clear-code.com> wrote:
> YUKI Hiroshi 2014-02-03 11:28:32 +0900 (Mon, 03 Feb 2014)
>
> New Revision: 41ab9194101a2b1c29d7bf508cb1cfbf1268a0a4
> https://github.com/droonga/fluent-plugin-droonga/commit/41ab9194101a2b1c29d7bf508cb1cfbf1268a0a4
>
> Message:
> Simplify API of DistributedCommandPlanner
>
> Old Model:
> planner = DistributedCommandPlanner.new(message)
> planner.outputs << "name"
> planner.reduce("name", <reducer>)
> planner.broadcast_all
> planner.messages
>
> New Model:
> planner = DistributedCommandPlanner.new(message)
> planner.broadcast(:write => true)
> planner.reduce("name", <reducer>)
> planner.plan
> planner.messages
>
> Modified files:
> lib/droonga/distributed_command_planner.rb
> lib/droonga/plugin/distributor/crud.rb
> lib/droonga/plugin/distributor/distributed_search_planner.rb
> lib/droonga/plugin/distributor/groonga.rb
> lib/droonga/plugin/distributor/search.rb
> lib/droonga/plugin/distributor/watch.rb
> test/unit/helper/distributed_search_planner_helper.rb
>
> Modified: lib/droonga/distributed_command_planner.rb (+22 -24)
> ===================================================================
> --- lib/droonga/distributed_command_planner.rb 2014-02-03 12:41:14 +0900 (9430f7c)
> +++ lib/droonga/distributed_command_planner.rb 2014-02-03 11:28:32 +0900 (bd069b7)
> @@ -18,7 +18,7 @@
> module Droonga
> class DistributedCommandPlanner
> attr_accessor :key, :dataset
> - attr_reader :outputs
> + attr_reader :messages
>
> def initialize(source_message)
> @source_message = source_message
> @@ -29,55 +29,49 @@ module Droonga
>
> @reducers = []
> @gatherers = []
> - @processors = []
> + @processor = nil
> +
> + @messages = []
>
> plan_errors_handling
> end
>
> - def messages
> - unified_reducers + unified_gatherers + @processors
> + def plan
> + @messages = unified_reducers + unified_gatherers + [fixed_processor]
> end
>
> def reduce(name, reducer)
> @reducers << reducer_message("reduce", name, reducer)
> @gatherers << gatherer_message("gather", name)
> + @outputs << output_name(name)
> end
>
> - def scatter_all(body=nil)
> + def scatter(body=nil)
> raise MessageProcessingError.new("missing key") unless @key
> - @processors << {
> + @processor = {
> "command" => @source_message["type"],
> "dataset" => @dataset || @source_message["dataset"],
> "body" => body || @source_message["body"],
> "key" => @key,
> "type" => "scatter",
> - "outputs" => @outputs,
> "replica" => "all",
> "post" => true
> }
> end
>
> - def broadcast_all(body=nil)
> - @processors << {
> + def broadcast(body=nil, options={})
> + processor = {
> "command" => @source_message["type"],
> "dataset" => @dataset || @source_message["dataset"],
> "body" => body || @source_message["body"],
> "type" => "broadcast",
> - "outputs" => @outputs,
> - "replica" => "all",
> - "post" => true
> - }
> - end
> -
> - def broadcast_at_random(body=nil)
> - @processors << {
> - "command" => @source_message["type"],
> - "dataset" => @dataset || @source_message["dataset"],
> - "body" => body || @source_message["body"],
> - "type" => "broadcast",
> - "outputs" => @outputs,
> - "replica" => "random",
> + "replica" => "random"
> }
> + if options[:write]
> + processor["replica"] = "all"
> + processor["post"] = true
> + end
> + @processor = processor
> end
>
> private
> @@ -112,6 +106,11 @@ module Droonga
> unified_gatherers.values
> end
>
> + def fixed_processor
> + @processor["outputs"] = @outputs
> + @processor
> + end
> +
> def reducer_message(command, name, reducer)
> {
> "type" => command,
> @@ -147,7 +146,6 @@ module Droonga
> # cannot use their custom "errors" in the body.
> # This must be rewritten.
> def plan_errors_handling
> - @outputs << "errors"
> reduce("errors", "type" => "sum", "limit" => -1)
> end
> end
>
> Modified: lib/droonga/plugin/distributor/crud.rb (+2 -2)
> ===================================================================
> --- lib/droonga/plugin/distributor/crud.rb 2014-02-03 12:41:14 +0900 (127371c)
> +++ lib/droonga/plugin/distributor/crud.rb 2014-02-03 11:28:32 +0900 (e910e92)
> @@ -41,9 +41,9 @@ module Droonga
> def scatter_all(message)
> planner = DistributedCommandPlanner.new(message)
> planner.key = message["body"]["key"] || rand.to_s
> - planner.outputs << "success"
> + planner.scatter
> planner.reduce("success", "type" => "and")
> - planner.scatter_all
> + planner.plan
> distribute(planner.messages)
> end
> end
>
> Modified: lib/droonga/plugin/distributor/distributed_search_planner.rb (+2 -4)
> ===================================================================
> --- lib/droonga/plugin/distributor/distributed_search_planner.rb 2014-02-03 12:41:14 +0900 (99a76e7)
> +++ lib/droonga/plugin/distributor/distributed_search_planner.rb 2014-02-03 11:28:32 +0900 (36194b6)
> @@ -27,7 +27,7 @@ module Droonga
> @queries = @request["queries"]
> end
>
> - def build_messages
> + def plan
> Searcher::QuerySorter.validate_dependencies(@queries)
>
> ensure_unifiable!
> @@ -37,7 +37,7 @@ module Droonga
> end
>
> @dataset = @source_message["dataset"] || @request["dataset"]
> - broadcast_at_random(@request)
> + broadcast(@request)
> end
>
> private
> @@ -70,8 +70,6 @@ module Droonga
> return
> end
>
> - @outputs << input_name
> -
> transformer = QueryTransformer.new(query)
>
> elements = transformer.mappers
>
> Modified: lib/droonga/plugin/distributor/groonga.rb (+2 -2)
> ===================================================================
> --- lib/droonga/plugin/distributor/groonga.rb 2014-02-03 12:41:14 +0900 (c91f833)
> +++ lib/droonga/plugin/distributor/groonga.rb 2014-02-03 11:28:32 +0900 (e41e76b)
> @@ -45,9 +45,9 @@ module Droonga
> private
> def broadcast_all(message)
> planner = DistributedCommandPlanner.new(message)
> - planner.outputs << "result"
> + planner.broadcast(:write => true)
> planner.reduce("result", "type" => "or")
> - planner.broadcast_all
> + planner.plan
> distribute(planner.messages)
> end
> end
>
> Modified: lib/droonga/plugin/distributor/search.rb (+1 -1)
> ===================================================================
> --- lib/droonga/plugin/distributor/search.rb 2014-02-03 12:41:14 +0900 (02139ca)
> +++ lib/droonga/plugin/distributor/search.rb 2014-02-03 11:28:32 +0900 (a7e0504)
> @@ -25,7 +25,7 @@ module Droonga
> command :search
> def search(message)
> planner = DistributedSearchPlanner.new(message)
> - planner.build_messages
> + planner.plan
> distribute(planner.messages)
> end
> end
>
> Modified: lib/droonga/plugin/distributor/watch.rb (+2 -2)
> ===================================================================
> --- lib/droonga/plugin/distributor/watch.rb 2014-02-03 12:41:14 +0900 (31dd2f9)
> +++ lib/droonga/plugin/distributor/watch.rb 2014-02-03 11:28:32 +0900 (19a0894)
> @@ -44,9 +44,9 @@ module Droonga
> private
> def broadcast_all(message)
> planner = DistributedCommandPlanner.new(message)
> - planner.outputs << "success"
> + planner.broadcast(:write => true)
> planner.reduce("success", "type" => "or")
> - planner.broadcast_all
> + planner.plan
> distribute(planner.messages)
> end
> end
>
> Modified: test/unit/helper/distributed_search_planner_helper.rb (+1 -1)
> ===================================================================
> --- test/unit/helper/distributed_search_planner_helper.rb 2014-02-03 12:41:14 +0900 (4c300c0)
> +++ test/unit/helper/distributed_search_planner_helper.rb 2014-02-03 11:28:32 +0900 (c5356d8)
> @@ -18,7 +18,7 @@ require "droonga/plugin/distributor/distributed_search_planner"
> module DistributedSearchPlannerHelper
> def plan(search_request)
> planner = Droonga::DistributedSearchPlanner.new(search_request)
> - planner.build_messages
> + planner.plan
> planner.messages
> end
>