fluent-plugin-droonga 0.9.0 → 0.9.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -0
  3. data/Gemfile +8 -1
  4. data/fluent-plugin-droonga.gemspec +2 -2
  5. data/lib/droonga/adapter.rb +39 -0
  6. data/lib/droonga/adapter_runner.rb +99 -0
  7. data/lib/droonga/catalog/base.rb +11 -11
  8. data/lib/droonga/catalog/dataset.rb +54 -0
  9. data/lib/droonga/catalog/version1.rb +1 -1
  10. data/lib/droonga/collector.rb +5 -7
  11. data/lib/droonga/collector_plugin.rb +7 -7
  12. data/lib/droonga/command.rb +36 -0
  13. data/lib/droonga/{plugin/input_adapter/crud.rb → command_repository.rb} +14 -8
  14. data/lib/droonga/dispatcher.rb +86 -54
  15. data/lib/droonga/distributed_command_planner.rb +183 -0
  16. data/lib/droonga/distributor.rb +43 -17
  17. data/lib/droonga/handler.rb +13 -72
  18. data/lib/droonga/handler_message.rb +5 -5
  19. data/lib/droonga/handler_messenger.rb +4 -1
  20. data/lib/droonga/handler_plugin.rb +2 -2
  21. data/lib/droonga/handler_runner.rb +104 -0
  22. data/lib/droonga/input_message.rb +4 -4
  23. data/lib/droonga/legacy_pluggable.rb +66 -0
  24. data/lib/droonga/{input_adapter.rb → legacy_plugin.rb} +27 -22
  25. data/lib/droonga/{plugin_repository.rb → legacy_plugin_repository.rb} +2 -4
  26. data/lib/droonga/message_matcher.rb +101 -0
  27. data/lib/droonga/{input_adapter_plugin.rb → planner.rb} +14 -10
  28. data/lib/droonga/planner_plugin.rb +54 -0
  29. data/lib/droonga/pluggable.rb +9 -45
  30. data/lib/droonga/plugin.rb +9 -33
  31. data/lib/droonga/plugin/collector/basic.rb +2 -0
  32. data/lib/droonga/plugin/collector/search.rb +31 -37
  33. data/lib/droonga/plugin/{handler/groonga/table_remove.rb → metadata/adapter_message.rb} +23 -18
  34. data/lib/droonga/plugin/{handler/search.rb → metadata/handler_action.rb} +19 -15
  35. data/lib/droonga/plugin/metadata/input_message.rb +39 -0
  36. data/lib/droonga/plugin/planner/crud.rb +49 -0
  37. data/lib/droonga/plugin/{distributor → planner}/distributed_search_planner.rb +62 -70
  38. data/lib/droonga/plugin/{distributor → planner}/groonga.rb +11 -32
  39. data/lib/droonga/plugin/{distributor → planner}/search.rb +5 -5
  40. data/lib/droonga/plugin/{distributor → planner}/watch.rb +15 -6
  41. data/lib/droonga/plugin_loader.rb +10 -0
  42. data/lib/droonga/plugin_registerable.rb +34 -10
  43. data/lib/droonga/plugin_registry.rb +58 -0
  44. data/lib/droonga/plugins/crud.rb +124 -0
  45. data/lib/droonga/plugins/error.rb +50 -0
  46. data/lib/droonga/{output_adapter_plugin.rb → plugins/groonga.rb} +9 -13
  47. data/lib/droonga/plugins/groonga/column_create.rb +123 -0
  48. data/lib/droonga/plugins/groonga/generic_command.rb +65 -0
  49. data/lib/droonga/{plugin/output_adapter/groonga.rb → plugins/groonga/generic_response.rb} +16 -15
  50. data/lib/droonga/plugins/groonga/select.rb +124 -0
  51. data/lib/droonga/plugins/groonga/table_create.rb +106 -0
  52. data/lib/droonga/plugins/groonga/table_remove.rb +57 -0
  53. data/lib/droonga/plugins/search.rb +40 -0
  54. data/lib/droonga/plugins/watch.rb +156 -0
  55. data/lib/droonga/processor.rb +8 -10
  56. data/lib/droonga/searcher.rb +14 -4
  57. data/lib/droonga/searcher/mecab_filter.rb +67 -0
  58. data/lib/droonga/session.rb +5 -5
  59. data/lib/droonga/test.rb +1 -1
  60. data/lib/droonga/test/stub_handler_message.rb +1 -1
  61. data/lib/droonga/test/{stub_distributor.rb → stub_planner.rb} +1 -1
  62. data/lib/droonga/worker.rb +7 -8
  63. data/lib/fluent/plugin/out_droonga.rb +0 -1
  64. data/sample/cluster/catalog.json +2 -4
  65. data/sample/mecab_filter/data.grn +7 -0
  66. data/sample/mecab_filter/ddl.grn +7 -0
  67. data/sample/mecab_filter/search_with_mecab_filter.json +21 -0
  68. data/sample/mecab_filter/search_without_mecab_filter.json +21 -0
  69. data/test/command/config/default/catalog.json +2 -5
  70. data/test/command/suite/search/error/no-query.expected +13 -0
  71. data/test/command/suite/search/error/no-query.test +7 -0
  72. data/test/command/suite/search/error/unknown-source.expected +26 -0
  73. data/test/command/suite/watch/subscribe.expected +3 -3
  74. data/test/command/suite/watch/unsubscribe.expected +3 -3
  75. data/test/unit/catalog/test_dataset.rb +385 -0
  76. data/test/unit/catalog/test_version1.rb +111 -45
  77. data/test/unit/fixtures/catalog/version1.json +0 -3
  78. data/test/unit/helper.rb +2 -1
  79. data/test/unit/helper/distributed_search_planner_helper.rb +83 -0
  80. data/test/unit/plugin/collector/test_basic.rb +233 -376
  81. data/test/unit/plugin/collector/test_search.rb +8 -17
  82. data/test/unit/plugin/planner/search_planner/test_basic.rb +120 -0
  83. data/test/unit/plugin/planner/search_planner/test_group_by.rb +573 -0
  84. data/test/unit/plugin/planner/search_planner/test_output.rb +388 -0
  85. data/test/unit/plugin/planner/search_planner/test_sort_by.rb +938 -0
  86. data/test/unit/plugin/{distributor → planner}/test_search.rb +20 -75
  87. data/test/unit/{plugin/handler → plugins/crud}/test_add.rb +11 -11
  88. data/test/unit/plugins/groonga/select/test_adapter_input.rb +213 -0
  89. data/test/unit/{plugin/output_adapter/groonga/test_select.rb → plugins/groonga/select/test_adapter_output.rb} +12 -13
  90. data/test/unit/{plugin/handler → plugins}/groonga/test_column_create.rb +20 -5
  91. data/test/unit/{plugin/handler → plugins}/groonga/test_table_create.rb +5 -0
  92. data/test/unit/{plugin/handler → plugins}/groonga/test_table_remove.rb +8 -1
  93. data/test/unit/{plugin/handler → plugins}/test_groonga.rb +5 -5
  94. data/test/unit/{plugin/handler → plugins}/test_search.rb +21 -5
  95. data/test/unit/{plugin/handler → plugins}/test_watch.rb +29 -10
  96. data/{lib/droonga/command_mapper.rb → test/unit/test_command_repository.rb} +16 -22
  97. data/test/unit/{test_plugin.rb → test_legacy_plugin.rb} +3 -3
  98. data/test/unit/{test_plugin_repository.rb → test_legacy_plugin_repository.rb} +3 -3
  99. data/test/unit/test_message_matcher.rb +137 -0
  100. metadata +86 -66
  101. data/bin/grn2jsons +0 -82
  102. data/lib/droonga/distribution_planner.rb +0 -76
  103. data/lib/droonga/distributor_plugin.rb +0 -95
  104. data/lib/droonga/output_adapter.rb +0 -53
  105. data/lib/droonga/plugin/collector/groonga.rb +0 -83
  106. data/lib/droonga/plugin/distributor/crud.rb +0 -84
  107. data/lib/droonga/plugin/handler/add.rb +0 -109
  108. data/lib/droonga/plugin/handler/forward.rb +0 -75
  109. data/lib/droonga/plugin/handler/groonga.rb +0 -99
  110. data/lib/droonga/plugin/handler/groonga/column_create.rb +0 -106
  111. data/lib/droonga/plugin/handler/groonga/table_create.rb +0 -91
  112. data/lib/droonga/plugin/handler/watch.rb +0 -108
  113. data/lib/droonga/plugin/input_adapter/groonga.rb +0 -49
  114. data/lib/droonga/plugin/input_adapter/groonga/select.rb +0 -63
  115. data/lib/droonga/plugin/output_adapter/crud.rb +0 -51
  116. data/lib/droonga/plugin/output_adapter/groonga/select.rb +0 -54
  117. data/lib/groonga_command_converter.rb +0 -143
  118. data/sample/fluentd.conf +0 -8
  119. data/test/unit/plugin/distributor/test_search_planner.rb +0 -1102
  120. data/test/unit/plugin/input_adapter/groonga/test_select.rb +0 -248
  121. data/test/unit/test_command_mapper.rb +0 -44
  122. data/test/unit/test_groonga_command_converter.rb +0 -242
@@ -1,6 +1,4 @@
1
- # -*- coding: utf-8 -*-
2
- #
3
- # Copyright (C) 2013 Droonga Project
1
+ # Copyright (C) 2014 Droonga Project
4
2
  #
5
3
  # This library is free software; you can redistribute it and/or
6
4
  # modify it under the terms of the GNU Lesser General Public
@@ -15,21 +13,27 @@
15
13
  # License along with this library; if not, write to the Free Software
16
14
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
15
 
18
- require "droonga/handler_plugin"
19
- require "droonga/searcher"
20
-
21
16
  module Droonga
22
- class SearchHandler < Droonga::HandlerPlugin
23
- repository.register("search", self)
17
+ module Plugin
18
+ module Metadata
19
+ class HandlerAction
20
+ def initialize(handler_class)
21
+ @handler_class = handler_class
22
+ end
23
+
24
+ def synchronous?
25
+ configuration[:synchronous]
26
+ end
27
+
28
+ def synchronous=(boolean)
29
+ configuration[:synchronous] = boolean
30
+ end
24
31
 
25
- command :search
26
- def search(message, messenger)
27
- searcher = Droonga::Searcher.new(@context)
28
- values = {}
29
- searcher.search(message.request["queries"]).each do |output, value|
30
- values[output] = value
32
+ private
33
+ def configuration
34
+ @handler_class.options[:action] ||= {}
35
+ end
31
36
  end
32
- messenger.emit(values)
33
37
  end
34
38
  end
35
39
  end
@@ -0,0 +1,39 @@
1
+ # Copyright (C) 2014 Droonga Project
2
+ #
3
+ # This library is free software; you can redistribute it and/or
4
+ # modify it under the terms of the GNU Lesser General Public
5
+ # License version 2.1 as published by the Free Software Foundation.
6
+ #
7
+ # This library is distributed in the hope that it will be useful,
8
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
9
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10
+ # Lesser General Public License for more details.
11
+ #
12
+ # You should have received a copy of the GNU Lesser General Public
13
+ # License along with this library; if not, write to the Free Software
14
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15
+
16
+ module Droonga
17
+ module Plugin
18
+ module Metadata
19
+ class InputMessage
20
+ def initialize(plugin_class)
21
+ @plugin_class = plugin_class
22
+ end
23
+
24
+ def type
25
+ configuration[:type]
26
+ end
27
+
28
+ def type=(type)
29
+ configuration[:type] = type
30
+ end
31
+
32
+ private
33
+ def configuration
34
+ @plugin_class.options[:message] ||= {}
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,49 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2013-2014 Droonga Project
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License version 2.1 as published by the Free Software Foundation.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library; if not, write to the Free Software
16
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+
18
+ require "droonga/planner_plugin"
19
+
20
+ module Droonga
21
+ class CRUDPlanner < Droonga::PlannerPlugin
22
+ repository.register("crud", self)
23
+
24
+ command :add
25
+ def add(message)
26
+ scatter(message)
27
+ end
28
+
29
+ command :update
30
+ def update(message)
31
+ scatter(message)
32
+ end
33
+
34
+ # TODO: What is this?
35
+ command :reset
36
+ def reset(message)
37
+ scatter(message)
38
+ end
39
+
40
+ private
41
+ def scatter(message)
42
+ super(message,
43
+ :key => message["body"]["key"] || rand.to_s,
44
+ :reduce => {
45
+ "success" => "and"
46
+ })
47
+ end
48
+ end
49
+ end
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2013 Droonga Project
3
+ # Copyright (C) 2013-2014 Droonga Project
4
4
  #
5
5
  # This library is free software; you can redistribute it and/or
6
6
  # modify it under the terms of the GNU Lesser General Public
@@ -15,27 +15,24 @@
15
15
  # License along with this library; if not, write to the Free Software
16
16
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
17
 
18
- module Droonga
19
- class DistributedSearchPlanner
20
- attr_reader :messages
18
+ require "droonga/searcher"
19
+ require "droonga/distributed_command_planner"
21
20
 
21
+ module Droonga
22
+ class DistributedSearchPlanner < DistributedCommandPlanner
22
23
  def initialize(search_request_message)
23
- @source_message = search_request_message
24
- @request = @source_message["body"]
25
- @queries = @request["queries"]
24
+ super
26
25
 
27
- @input_names = []
28
- @output_names = []
29
- @output_mappers = {}
30
- @messages = []
26
+ @request = @source_message["body"]
27
+ raise NoQuery.new unless @request
31
28
 
32
- build_messages
29
+ @request = Marshal.load(Marshal.dump(@request))
30
+ @queries = @request["queries"]
33
31
  end
34
32
 
35
- private
36
- UNLIMITED = -1
33
+ def plan
34
+ raise Searcher::NoQuery.new if @queries.nil? || @queries.empty?
37
35
 
38
- def build_messages
39
36
  Searcher::QuerySorter.validate_dependencies(@queries)
40
37
 
41
38
  ensure_unifiable!
@@ -44,22 +41,21 @@ module Droonga
44
41
  transform_query(input_name, query)
45
42
  end
46
43
 
47
- gatherer = {
48
- "type" => "search_gather",
49
- "body" => @output_mappers,
50
- "inputs" => @output_names, # XXX should be placed in the "body"?
51
- "post" => true, # XXX should be placed in the "body"?
52
- }
53
- @messages << gatherer
54
- searcher = {
55
- "type" => "broadcast",
56
- "command" => "search", # XXX should be placed in the "body"?
57
- "dataset" => @source_message["dataset"] || @request["dataset"],
58
- "body" => @request,
59
- "outputs" => @input_names, # XXX should be placed in the "body"?
60
- "replica" => "random", # XXX should be placed in the "body"?
61
- }
62
- @messages.push(searcher)
44
+ @dataset = @source_message["dataset"] || @request["dataset"]
45
+ broadcast(:body => @request)
46
+
47
+ super
48
+ end
49
+
50
+ private
51
+ UNLIMITED = -1
52
+
53
+ def reduce_command
54
+ "search_reduce"
55
+ end
56
+
57
+ def gather_command
58
+ "search_gather"
63
59
  end
64
60
 
65
61
  def ensure_unifiable!
@@ -89,28 +85,13 @@ module Droonga
89
85
  return
90
86
  end
91
87
 
92
- @input_names << input_name
93
- output_name = input_name + "_reduced"
94
- @output_names << output_name
95
-
96
88
  transformer = QueryTransformer.new(query)
97
89
 
98
- reducer = {
99
- "type" => "search_reduce",
100
- "body" => {
101
- input_name => {
102
- output_name => transformer.reducers,
103
- },
104
- },
105
- "inputs" => [input_name], # XXX should be placed in the "body"?
106
- "outputs" => [output_name], # XXX should be placed in the "body"?
107
- }
108
- @messages << reducer
109
-
110
- @output_mappers[output_name] = {
111
- "output" => input_name,
112
- "elements" => transformer.mappers,
113
- }
90
+ elements = transformer.mappers
91
+ mapper = {}
92
+ mapper["elements"] = elements unless elements.empty?
93
+ reduce(input_name => { :reduce => transformer.reducers,
94
+ :gather => mapper })
114
95
  end
115
96
 
116
97
  class QueryTransformer
@@ -130,7 +111,9 @@ module Droonga
130
111
  # So we have to override the format and restore it on the gathering
131
112
  # phase.
132
113
  @records_format = @output["format"] || "simple"
133
- @output["format"] = "simple"
114
+ if @output["format"] && @output["format"] != "simple"
115
+ @output["format"] = "simple"
116
+ end
134
117
 
135
118
  @sort_keys = @query["sortBy"] || []
136
119
  @sort_keys = @sort_keys["keys"] || [] if @sort_keys.is_a?(Hash)
@@ -163,13 +146,22 @@ module Droonga
163
146
  @records_offset = final_offset
164
147
  @records_limit = final_limit
165
148
 
149
+ updated_sort_limit = nil
150
+ updated_output_limit = nil
166
151
  if final_limit == UNLIMITED
167
- @output["limit"] = UNLIMITED
152
+ updated_output_limit = UNLIMITED
168
153
  else
169
154
  if rich_sort?
170
- @query["sortBy"]["limit"] = final_offset + [sort_limit, output_limit].max
155
+ updated_sort_limit = final_offset + [sort_limit, output_limit].max
171
156
  end
172
- @output["limit"] = final_offset + final_limit
157
+ updated_output_limit = final_offset + final_limit
158
+ end
159
+
160
+ if updated_sort_limit && updated_sort_limit != @query["sortBy"]["limit"]
161
+ @query["sortBy"]["limit"] = updated_sort_limit
162
+ end
163
+ if updated_output_limit && @output["limit"] && updated_output_limit != @output["limit"]
164
+ @output["limit"] = updated_output_limit
173
165
  end
174
166
  end
175
167
 
@@ -206,7 +198,7 @@ module Droonga
206
198
  end
207
199
 
208
200
  def calculate_output_offset!
209
- @output["offset"] = 0 if have_records?
201
+ @output["offset"] = 0 if have_records? && @output["offset"]
210
202
  end
211
203
 
212
204
  def final_offset
@@ -249,7 +241,6 @@ module Droonga
249
241
  @query["sortBy"]["limit"] = -1 if @query["sortBy"].is_a?(Hash)
250
242
  @output["limit"] = -1
251
243
  mapper = {
252
- "type" => "count",
253
244
  "target" => "records",
254
245
  }
255
246
  unless @output["elements"].include?("records")
@@ -274,14 +265,15 @@ module Droonga
274
265
 
275
266
  @reducers["records"] = build_records_reducer
276
267
 
277
- mapper = {
278
- "type" => "sort",
279
- "offset" => @records_offset,
280
- "limit" => @records_limit,
281
- "format" => @records_format,
282
- "attributes" => final_attributes,
283
- }
284
- mapper["no_output"] = true unless @output_records
268
+ mapper = {}
269
+ if @output_records
270
+ mapper["format"] = @records_format unless @records_format == "simple"
271
+ mapper["attributes"] = final_attributes unless final_attributes.empty?
272
+ mapper["offset"] = @records_offset unless @records_offset.zero?
273
+ mapper["limit"] = @records_limit unless @records_limit.zero?
274
+ else
275
+ mapper["no_output"] = true
276
+ end
285
277
  @mappers["records"] = mapper
286
278
  end
287
279
 
@@ -303,7 +295,7 @@ module Droonga
303
295
  def update_output_attributes!
304
296
  @output["attributes"] = array_style_attributes
305
297
  @output["attributes"] += sort_attribute_names
306
- if unifiable? && !@output["attributes"].include?("_key")
298
+ if unifiable? && !source_column_names.include?("_key")
307
299
  @output["attributes"] << "_key"
308
300
  end
309
301
  end
@@ -316,7 +308,7 @@ module Droonga
316
308
  case attribute
317
309
  when String
318
310
  {
319
- "label" => key,
311
+ "label" => key,
320
312
  "source" => attribute,
321
313
  }
322
314
  when Hash
@@ -365,7 +357,7 @@ module Droonga
365
357
  DESCENDING_OPERATOR = ">"
366
358
 
367
359
  def build_records_reducer
368
- attributes = @output["attributes"]
360
+ attributes = source_column_names
369
361
  key_column_index = attributes.index("_key")
370
362
 
371
363
  operators = @sort_keys.collect do |sort_key|
@@ -376,12 +368,12 @@ module Droonga
376
368
  end
377
369
  {
378
370
  "operator" => operator,
379
- "column" => attributes.index(sort_key),
371
+ "column" => attributes.index(sort_key),
380
372
  }
381
373
  end
382
374
 
383
375
  reducer = {
384
- "type" => "sort",
376
+ "type" => "sort",
385
377
  "operators" => operators,
386
378
  }
387
379
  if unifiable? && !key_column_index.nil?
@@ -15,10 +15,10 @@
15
15
  # License along with this library; if not, write to the Free Software
16
16
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
17
 
18
- require "droonga/distributor_plugin"
18
+ require "droonga/planner_plugin"
19
19
 
20
20
  module Droonga
21
- class GroongaDistributor < Droonga::DistributorPlugin
21
+ class GroongaPlanner < Droonga::PlannerPlugin
22
22
  repository.register("groonga", self)
23
23
 
24
24
  command :table_create
@@ -26,7 +26,7 @@ module Droonga
26
26
  unless message["dataset"]
27
27
  raise "dataset must be set. FIXME: This error should return client."
28
28
  end
29
- broadcast_all(message)
29
+ broadcast(message)
30
30
  end
31
31
 
32
32
  command :table_remove
@@ -34,42 +34,21 @@ module Droonga
34
34
  unless message["dataset"]
35
35
  raise "dataset must be set. FIXME: This error should return client."
36
36
  end
37
- broadcast_all(message)
37
+ broadcast(message)
38
38
  end
39
39
 
40
40
  command :column_create
41
41
  def column_create(message)
42
- broadcast_all(message)
42
+ broadcast(message)
43
43
  end
44
44
 
45
45
  private
46
- def broadcaster(message)
47
- broadcaster = super
48
- broadcaster["outputs"] << "result"
49
- broadcaster
50
- end
51
-
52
- def reducer(message)
53
- reducer = super
54
- reducer["type"] = "groonga_reduce"
55
- reducer["body"]["result"] = {
56
- "result_reduced" => {
57
- "type" => "groonga_result",
58
- },
59
- }
60
- reducer["inputs"] << "result"
61
- reducer["outputs"] << "result_reduced"
62
- reducer
63
- end
64
-
65
- def gatherer(message)
66
- gatherer = super
67
- gatherer["type"] = "groonga_gather"
68
- gatherer["body"]["result_reduced"] = {
69
- "output" => "result",
70
- }
71
- gatherer["inputs"] << "result_reduced"
72
- gatherer
46
+ def broadcast(message)
47
+ super(message,
48
+ :write => true,
49
+ :reduce => {
50
+ "result" => "or"
51
+ })
73
52
  end
74
53
  end
75
54
  end
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2013 Droonga Project
3
+ # Copyright (C) 2013-2014 Droonga Project
4
4
  #
5
5
  # This library is free software; you can redistribute it and/or
6
6
  # modify it under the terms of the GNU Lesser General Public
@@ -15,17 +15,17 @@
15
15
  # License along with this library; if not, write to the Free Software
16
16
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
17
 
18
- require "droonga/distributor_plugin"
19
- require "droonga/plugin/distributor/distributed_search_planner"
18
+ require "droonga/planner_plugin"
19
+ require "droonga/plugin/planner/distributed_search_planner"
20
20
 
21
21
  module Droonga
22
- class SearchDistributor < Droonga::DistributorPlugin
22
+ class SearchPlanner < Droonga::PlannerPlugin
23
23
  repository.register("search", self)
24
24
 
25
25
  command :search
26
26
  def search(message)
27
27
  planner = DistributedSearchPlanner.new(message)
28
- distribute(planner.messages)
28
+ planner.plan
29
29
  end
30
30
  end
31
31
  end