fluent-plugin-droonga 0.9.9 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/.dir-locals.el +3 -0
  3. data/.travis.yml +6 -2
  4. data/README.md +6 -7
  5. data/Rakefile +23 -6
  6. data/fluent-plugin-droonga.gemspec +2 -2
  7. data/lib/droonga/adapter.rb +12 -3
  8. data/lib/droonga/adapter_runner.rb +28 -23
  9. data/lib/droonga/catalog/base.rb +7 -111
  10. data/lib/droonga/catalog/dataset.rb +13 -25
  11. data/lib/droonga/catalog/errors.rb +94 -0
  12. data/lib/droonga/catalog/schema.rb +277 -0
  13. data/lib/droonga/catalog/version1.rb +404 -0
  14. data/lib/droonga/catalog/version2.rb +160 -0
  15. data/lib/droonga/catalog_loader.rb +27 -4
  16. data/lib/droonga/catalog_observer.rb +44 -6
  17. data/lib/droonga/collector.rb +12 -10
  18. data/lib/droonga/{handler_plugin.rb → collector_message.rb} +47 -20
  19. data/lib/droonga/collector_runner.rb +64 -0
  20. data/lib/droonga/collectors.rb +18 -0
  21. data/lib/droonga/{catalog.rb → collectors/add.rb} +9 -7
  22. data/lib/droonga/{command_repository.rb → collectors/and.rb} +7 -14
  23. data/lib/droonga/collectors/sum.rb +26 -0
  24. data/lib/droonga/dispatcher.rb +74 -41
  25. data/lib/droonga/distributed_command_planner.rb +2 -2
  26. data/lib/droonga/engine.rb +13 -5
  27. data/lib/droonga/{message_processing_error.rb → error.rb} +33 -12
  28. data/lib/droonga/{plugin/planner/search.rb → error_messages.rb} +12 -10
  29. data/lib/droonga/farm.rb +15 -14
  30. data/lib/droonga/fluent_message_sender.rb +15 -11
  31. data/lib/droonga/forwarder.rb +22 -18
  32. data/lib/droonga/handler.rb +8 -2
  33. data/lib/droonga/handler_runner.rb +47 -26
  34. data/lib/droonga/input_message.rb +6 -6
  35. data/lib/droonga/{command.rb → loggable.rb} +7 -14
  36. data/lib/droonga/logger.rb +56 -15
  37. data/lib/droonga/message_matcher.rb +12 -7
  38. data/lib/droonga/message_pusher.rb +8 -4
  39. data/lib/droonga/message_receiver.rb +11 -9
  40. data/lib/droonga/output_message.rb +2 -0
  41. data/lib/droonga/planner.rb +21 -10
  42. data/lib/droonga/plugin.rb +15 -0
  43. data/lib/droonga/plugin/metadata/{adapter_message.rb → adapter_input_message.rb} +6 -14
  44. data/lib/droonga/plugin/metadata/adapter_output_message.rb +39 -0
  45. data/lib/droonga/plugin/metadata/collector_message.rb +39 -0
  46. data/lib/droonga/plugin/metadata/input_message.rb +15 -0
  47. data/lib/droonga/plugin_loader.rb +33 -25
  48. data/lib/droonga/plugin_registry.rb +9 -1
  49. data/lib/droonga/plugins/basic.rb +54 -0
  50. data/lib/droonga/plugins/crud.rb +36 -15
  51. data/lib/droonga/plugins/error.rb +5 -4
  52. data/lib/droonga/plugins/groonga.rb +9 -6
  53. data/lib/droonga/plugins/groonga/column_create.rb +10 -5
  54. data/lib/droonga/plugins/groonga/generic_command.rb +2 -8
  55. data/lib/droonga/plugins/groonga/generic_response.rb +2 -2
  56. data/lib/droonga/plugins/groonga/select.rb +2 -2
  57. data/lib/droonga/plugins/groonga/table_create.rb +9 -4
  58. data/lib/droonga/plugins/groonga/table_remove.rb +10 -5
  59. data/lib/droonga/plugins/search.rb +106 -5
  60. data/lib/droonga/plugins/search/distributed_search_planner.rb +398 -0
  61. data/lib/droonga/plugins/watch.rb +41 -20
  62. data/lib/droonga/processor.rb +12 -9
  63. data/lib/droonga/{plugin/collector/basic.rb → reducer.rb} +36 -50
  64. data/lib/droonga/replier.rb +7 -4
  65. data/lib/droonga/searcher.rb +40 -37
  66. data/lib/droonga/server.rb +8 -6
  67. data/lib/droonga/session.rb +17 -7
  68. data/lib/droonga/single_step.rb +53 -0
  69. data/lib/droonga/{plugin/planner/watch.rb → single_step_definition.rb} +27 -26
  70. data/lib/droonga/{partition.rb → slice.rb} +23 -12
  71. data/lib/droonga/status_code.rb +25 -0
  72. data/lib/droonga/step_runner.rb +63 -0
  73. data/lib/droonga/watch_schema.rb +7 -3
  74. data/lib/droonga/watcher.rb +4 -4
  75. data/lib/droonga/worker.rb +6 -6
  76. data/lib/fluent/plugin/out_droonga.rb +27 -2
  77. data/sample/cluster/catalog.json +33 -32
  78. data/test/command/config/default/catalog.json +72 -45
  79. data/test/command/config/version1/catalog.json +68 -0
  80. data/test/command/config/version1/fluentd.conf +11 -0
  81. data/test/command/suite/message/error/missing-dataset.expected +1 -1
  82. data/test/command/suite/message/error/unknown-dataset.expected +1 -1
  83. data/test/command/suite/message/error/unknown-type.expected +13 -0
  84. data/test/command/suite/message/error/{unknown-command.test → unknown-type.test} +1 -1
  85. data/test/command/suite/search/error/missing-source-parameter.expected +1 -1
  86. data/test/command/suite/search/error/unknown-source.expected +15 -3
  87. data/test/command/suite/watch/subscribe.expected +1 -3
  88. data/test/command/suite/watch/unsubscribe.expected +1 -3
  89. data/test/performance/watch/catalog.json +1 -0
  90. data/test/unit/catalog/test_dataset.rb +16 -358
  91. data/test/unit/catalog/test_schema.rb +285 -0
  92. data/test/unit/catalog/test_version1.rb +222 -28
  93. data/test/unit/catalog/test_version2.rb +155 -0
  94. data/test/unit/fixtures/catalog/version2.json +62 -0
  95. data/test/unit/helper/distributed_search_planner_helper.rb +2 -2
  96. data/test/unit/plugins/crud/test_add.rb +13 -13
  97. data/test/unit/plugins/groonga/test_column_create.rb +14 -11
  98. data/test/unit/plugins/groonga/test_table_create.rb +4 -9
  99. data/test/unit/plugins/groonga/test_table_remove.rb +4 -9
  100. data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_basic.rb +0 -0
  101. data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_group_by.rb +0 -0
  102. data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_output.rb +0 -0
  103. data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_sort_by.rb +0 -0
  104. data/test/unit/{plugin/collector/test_search.rb → plugins/search/test_collector.rb} +40 -39
  105. data/test/unit/plugins/{test_search.rb → search/test_handler.rb} +6 -5
  106. data/test/unit/{plugin/planner/test_search.rb → plugins/search/test_planner.rb} +3 -3
  107. data/test/unit/{plugin/collector → plugins}/test_basic.rb +68 -50
  108. data/test/unit/plugins/test_groonga.rb +2 -15
  109. data/test/unit/plugins/test_watch.rb +25 -22
  110. data/test/unit/test_message_matcher.rb +29 -6
  111. data/test/unit/test_output.rb +4 -0
  112. metadata +58 -50
  113. data/lib/droonga/collector_plugin.rb +0 -50
  114. data/lib/droonga/legacy_pluggable.rb +0 -66
  115. data/lib/droonga/legacy_plugin.rb +0 -57
  116. data/lib/droonga/legacy_plugin_repository.rb +0 -54
  117. data/lib/droonga/planner_plugin.rb +0 -54
  118. data/lib/droonga/plugin/collector/search.rb +0 -98
  119. data/lib/droonga/plugin/planner/crud.rb +0 -49
  120. data/lib/droonga/plugin/planner/distributed_search_planner.rb +0 -393
  121. data/lib/droonga/plugin/planner/groonga.rb +0 -54
  122. data/lib/droonga/plugin_registerable.rb +0 -75
  123. data/test/command/suite/message/error/unknown-command.expected +0 -13
  124. data/test/unit/test_command_repository.rb +0 -39
  125. data/test/unit/test_legacy_plugin.rb +0 -50
  126. data/test/unit/test_legacy_plugin_repository.rb +0 -89
@@ -1,54 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- #
3
- # Copyright (C) 2013 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 GroongaPlanner < Droonga::PlannerPlugin
22
- repository.register("groonga", self)
23
-
24
- command :table_create
25
- def table_create(message)
26
- unless message["dataset"]
27
- raise "dataset must be set. FIXME: This error should return client."
28
- end
29
- broadcast(message)
30
- end
31
-
32
- command :table_remove
33
- def table_remove(message)
34
- unless message["dataset"]
35
- raise "dataset must be set. FIXME: This error should return client."
36
- end
37
- broadcast(message)
38
- end
39
-
40
- command :column_create
41
- def column_create(message)
42
- broadcast(message)
43
- end
44
-
45
- private
46
- def broadcast(message)
47
- super(message,
48
- :write => true,
49
- :reduce => {
50
- "result" => "or"
51
- })
52
- end
53
- end
54
- end
@@ -1,75 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- #
3
- # Copyright (C) 2013 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/command"
19
- require "droonga/command_repository"
20
- require "droonga/legacy_plugin_repository"
21
-
22
- module Droonga
23
- module PluginRegisterable
24
- class << self
25
- def extended(plugin_class)
26
- super
27
- plugin_class.class_variable_set(:@@repository,
28
- LegacyPluginRepository.new)
29
- end
30
- end
31
-
32
- def repository
33
- class_variable_get(:@@repository)
34
- end
35
-
36
- def inherited(sub_class)
37
- super
38
- sub_class.instance_variable_set(:@command_repository,
39
- CommandRepository.new)
40
- end
41
-
42
- def command(method_name_or_map, options={})
43
- if method_name_or_map.is_a?(Hash)
44
- type, method_name = method_name_or_map.to_a.first
45
- options[:pattern] ||= ["type", :equal, type.to_s]
46
- else
47
- method_name = method_name_or_map
48
- options[:pattern] ||= ["type", :equal, method_name.to_s]
49
- end
50
- command = Command.new(method_name, options)
51
- @command_repository.register(command)
52
- end
53
-
54
- def commands
55
- @command_repository.commands
56
- end
57
-
58
- def find_command(message)
59
- @command_repository.find(message)
60
- end
61
-
62
- def method_name(message)
63
- message = {"type" => message.to_s} unless message.is_a?(Hash)
64
- command = find_command(message)
65
- return nil if command.nil?
66
- command.method_name
67
- end
68
-
69
- def processable?(message)
70
- message = {"type" => message.to_s} unless message.is_a?(Hash)
71
- command = find_command(message)
72
- not command.nil?
73
- end
74
- end
75
- end
@@ -1,13 +0,0 @@
1
- [
2
- "droonga.message",
3
- 0,
4
- {
5
- "inReplyTo": "request-id",
6
- "statusCode": 400,
7
- "type": "unknown-command.result",
8
- "body": {
9
- "name": "UnknownCommand",
10
- "message": "The command \"unknown-command\" is not available for the dataset \"Droonga\"."
11
- }
12
- }
13
- ]
@@ -1,39 +0,0 @@
1
- # Copyright (C) 2013 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
- require "droonga/command_repository"
17
-
18
- class CommandRepositoryTest < Test::Unit::TestCase
19
- def setup
20
- @repository = Droonga::CommandRepository.new
21
- end
22
-
23
- class FindTest < self
24
- def setup
25
- super
26
- @command = Droonga::Command.new(:select,
27
- :pattern => ["type", :equal, "select"])
28
- @repository.register(@command)
29
- end
30
-
31
- def test_match
32
- assert_equal(@command, @repository.find({ "type" => "select" }))
33
- end
34
-
35
- def test_not_match
36
- assert_nil(@repository.find({ "type" => "search" }))
37
- end
38
- end
39
- end
@@ -1,50 +0,0 @@
1
- # Copyright (C) 2013 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
- require "droonga/legacy_plugin"
17
-
18
- class LegacyPluginTest < Test::Unit::TestCase
19
- class PluggableTest < self
20
- class DummyTypePlugin < Droonga::LegacyPlugin
21
- extend Droonga::PluginRegisterable
22
- end
23
-
24
- class DummyPlugin < DummyTypePlugin
25
- command :dummy
26
- def dummy(request)
27
- :dummy_response
28
- end
29
- end
30
-
31
- class UnknownPlugin < DummyTypePlugin
32
- command :unknown
33
- def unknown(request)
34
- :unknown_response
35
- end
36
- end
37
-
38
- def setup
39
- @dummy_plugin = DummyPlugin.new
40
- end
41
-
42
- def test_processable
43
- assert_true(@dummy_plugin.processable?(:dummy))
44
- end
45
-
46
- def test_not_processable
47
- assert_false(@dummy_plugin.processable?(:unknown))
48
- end
49
- end
50
- end
@@ -1,89 +0,0 @@
1
- # Copyright (C) 2013 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
- require "droonga/legacy_plugin_repository"
17
-
18
- class LegacyPluginRepositoryTest < Test::Unit::TestCase
19
- def setup
20
- @repository = Droonga::LegacyPluginRepository.new
21
- end
22
-
23
- class StubPlugin
24
- attr_reader :arguments
25
- def initialize(*arguments)
26
- @arguments = arguments
27
- end
28
- end
29
-
30
- def test_register
31
- @repository.register("stub", StubPlugin)
32
- assert_equal(StubPlugin, @repository["stub"])
33
- end
34
-
35
- def test_enumerable
36
- @repository.register("stub1", StubPlugin)
37
- @repository.register("stub2", StubPlugin)
38
- assert_equal([
39
- ["stub1", StubPlugin],
40
- ["stub2", StubPlugin],
41
- ],
42
- @repository.to_a)
43
- end
44
-
45
- sub_test_case("[]") do
46
- def setup
47
- super
48
- @repository.register("stub", StubPlugin)
49
- end
50
-
51
- def test_nonexistent
52
- assert_nil(@repository["nonexistent"])
53
- end
54
-
55
- def test_existent
56
- assert_equal(StubPlugin, @repository["stub"])
57
- end
58
- end
59
-
60
- sub_test_case("clear") do
61
- def setup
62
- super
63
- @repository.register("stub", StubPlugin)
64
- end
65
-
66
- def test_clear
67
- assert_equal([["stub", StubPlugin]], @repository.to_a)
68
- @repository.clear
69
- assert_equal([], @repository.to_a)
70
- end
71
- end
72
-
73
- sub_test_case("instantiate") do
74
- def setup
75
- super
76
- @repository.register("stub", StubPlugin)
77
- end
78
-
79
- def test_no_arguments
80
- plugin = @repository.instantiate("stub")
81
- assert_equal([], plugin.arguments)
82
- end
83
-
84
- def test_have_arguments
85
- plugin = @repository.instantiate("stub", "Hello", "World")
86
- assert_equal(["Hello", "World"], plugin.arguments)
87
- end
88
- end
89
- end