droonga-engine 1.0.4 → 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -2
- data/Gemfile +1 -1
- data/LICENSE.txt +1 -1
- data/Rakefile +1 -1
- data/benchmark/benchmark.rb +1 -1
- data/benchmark/utils.rb +1 -1
- data/benchmark/watch/benchmark-notify.rb +1 -1
- data/benchmark/watch/benchmark-publish.rb +1 -1
- data/benchmark/watch/benchmark-scan.rb +1 -1
- data/bin/droonga-engine +1 -1
- data/bin/droonga-engine-absorb-data +48 -8
- data/bin/droonga-engine-catalog-generate +1 -1
- data/bin/droonga-engine-catalog-modify +1 -1
- data/bin/droonga-engine-data-publisher +66 -0
- data/bin/droonga-engine-join +72 -17
- data/bin/droonga-engine-serf-event-handler +1 -1
- data/bin/droonga-engine-service +1 -1
- data/bin/droonga-engine-unjoin +11 -4
- data/bin/droonga-engine-worker +20 -0
- data/doc/text/news.md +8 -0
- data/droonga-engine.gemspec +3 -3
- data/lib/droonga/adapter.rb +1 -1
- data/lib/droonga/adapter_runner.rb +1 -1
- data/lib/droonga/address.rb +69 -0
- data/lib/droonga/buffered_tcp_socket.rb +44 -22
- data/lib/droonga/catalog/base.rb +1 -1
- data/lib/droonga/catalog/collection_volume.rb +1 -1
- data/lib/droonga/catalog/dataset.rb +8 -8
- data/lib/droonga/catalog/errors.rb +1 -1
- data/lib/droonga/catalog/schema.rb +1 -1
- data/lib/droonga/catalog/single_volume.rb +6 -8
- data/lib/droonga/catalog/slice.rb +1 -1
- data/lib/droonga/catalog/version1.rb +2 -2
- data/lib/droonga/catalog/version2.rb +6 -6
- data/lib/droonga/catalog/version2_validator.rb +1 -1
- data/lib/droonga/catalog/volume.rb +1 -1
- data/lib/droonga/catalog/volume_collection.rb +2 -2
- data/lib/droonga/catalog_generator.rb +49 -53
- data/lib/droonga/catalog_loader.rb +1 -1
- data/lib/droonga/collector.rb +1 -1
- data/lib/droonga/collector_message.rb +1 -1
- data/lib/droonga/collector_runner.rb +1 -1
- data/lib/droonga/collectors/and.rb +1 -1
- data/lib/droonga/collectors/or.rb +1 -1
- data/lib/droonga/collectors/sum.rb +1 -1
- data/lib/droonga/collectors.rb +1 -1
- data/lib/droonga/command/droonga_engine.rb +103 -55
- data/lib/droonga/command/droonga_engine_service.rb +22 -67
- data/lib/droonga/command/droonga_engine_worker.rb +232 -0
- data/lib/droonga/command/serf_event_handler.rb +126 -46
- data/lib/droonga/data_absorber.rb +32 -14
- data/lib/droonga/dispatcher.rb +15 -11
- data/lib/droonga/distributed_command_planner.rb +1 -1
- data/lib/droonga/distributor.rb +1 -1
- data/lib/droonga/engine/version.rb +2 -2
- data/lib/droonga/engine.rb +8 -3
- data/lib/droonga/engine_state.rb +15 -6
- data/lib/droonga/error.rb +1 -1
- data/lib/droonga/error_messages.rb +1 -1
- data/lib/droonga/event_loop.rb +1 -1
- data/lib/droonga/farm.rb +9 -1
- data/lib/droonga/file_observer.rb +1 -1
- data/lib/droonga/fluent_message_receiver.rb +11 -5
- data/lib/droonga/fluent_message_sender.rb +14 -17
- data/lib/droonga/forwarder.rb +23 -13
- data/lib/droonga/handler.rb +1 -1
- data/lib/droonga/handler_message.rb +1 -1
- data/lib/droonga/handler_messenger.rb +2 -2
- data/lib/droonga/handler_runner.rb +2 -2
- data/lib/droonga/input_message.rb +1 -1
- data/lib/droonga/internal_fluent_message_receiver.rb +3 -2
- data/lib/droonga/job_protocol.rb +1 -1
- data/lib/droonga/job_pusher.rb +1 -1
- data/lib/droonga/job_receiver.rb +1 -1
- data/lib/droonga/line_buffer.rb +1 -1
- data/lib/droonga/live_nodes_list_loader.rb +1 -1
- data/lib/droonga/loggable.rb +1 -1
- data/lib/droonga/logger.rb +3 -3
- data/lib/droonga/message_matcher.rb +1 -1
- data/lib/droonga/output_message.rb +1 -1
- data/lib/droonga/path.rb +5 -1
- data/lib/droonga/planner.rb +1 -1
- data/lib/droonga/pluggable.rb +1 -1
- data/lib/droonga/plugin/metadata/adapter_input_message.rb +1 -1
- data/lib/droonga/plugin/metadata/adapter_output_message.rb +1 -1
- data/lib/droonga/plugin/metadata/collector_message.rb +1 -1
- data/lib/droonga/plugin/metadata/handler_action.rb +1 -1
- data/lib/droonga/plugin/metadata/input_message.rb +1 -1
- data/lib/droonga/plugin.rb +2 -1
- data/lib/droonga/plugin_loader.rb +1 -1
- data/lib/droonga/plugin_registry.rb +3 -1
- data/lib/droonga/plugins/basic.rb +1 -1
- data/lib/droonga/plugins/crud.rb +1 -1
- data/lib/droonga/plugins/dump.rb +13 -2
- data/lib/droonga/plugins/error.rb +1 -1
- data/lib/droonga/plugins/groonga/column_create.rb +1 -1
- data/lib/droonga/plugins/groonga/column_list.rb +1 -1
- data/lib/droonga/plugins/groonga/column_remove.rb +1 -1
- data/lib/droonga/plugins/groonga/column_rename.rb +1 -1
- data/lib/droonga/plugins/groonga/delete.rb +1 -1
- data/lib/droonga/plugins/groonga/generic_command.rb +1 -1
- data/lib/droonga/plugins/groonga/generic_response.rb +1 -1
- data/lib/droonga/plugins/groonga/select.rb +1 -1
- data/lib/droonga/plugins/groonga/table_create.rb +1 -1
- data/lib/droonga/plugins/groonga/table_list.rb +1 -1
- data/lib/droonga/plugins/groonga/table_remove.rb +1 -1
- data/lib/droonga/plugins/groonga.rb +1 -1
- data/lib/droonga/plugins/search/distributed_search_planner.rb +1 -1
- data/lib/droonga/plugins/search.rb +1 -1
- data/lib/droonga/plugins/system.rb +1 -1
- data/lib/droonga/plugins/watch.rb +1 -1
- data/lib/droonga/{service_control_protocol.rb → process_control_protocol.rb} +2 -2
- data/lib/droonga/process_supervisor.rb +91 -0
- data/lib/droonga/processor.rb +1 -1
- data/lib/droonga/reducer.rb +1 -1
- data/lib/droonga/replier.rb +2 -2
- data/lib/droonga/safe_file_writer.rb +1 -1
- data/lib/droonga/schema_applier.rb +1 -1
- data/lib/droonga/searcher/mecab_filter.rb +1 -1
- data/lib/droonga/searcher.rb +31 -19
- data/lib/droonga/serf.rb +81 -14
- data/lib/droonga/serf_downloader.rb +2 -2
- data/lib/droonga/session.rb +1 -1
- data/lib/droonga/single_step.rb +1 -1
- data/lib/droonga/single_step_definition.rb +1 -1
- data/lib/droonga/slice.rb +30 -28
- data/lib/droonga/status_code.rb +1 -1
- data/lib/droonga/step_runner.rb +1 -1
- data/lib/droonga/supervisor.rb +170 -0
- data/lib/droonga/sweeper.rb +1 -1
- data/lib/droonga/test/stub_handler.rb +1 -1
- data/lib/droonga/test/stub_handler_message.rb +1 -1
- data/lib/droonga/test/stub_handler_messenger.rb +1 -1
- data/lib/droonga/test/stub_planner.rb +1 -1
- data/lib/droonga/test.rb +1 -1
- data/lib/droonga/watch_schema.rb +2 -2
- data/lib/droonga/watcher.rb +1 -1
- data/lib/droonga/worker_process_agent.rb +111 -0
- data/sample/cluster/Rakefile +150 -0
- data/test/command/config/default/catalog.json +1 -34
- data/test/command/config/version1/catalog.json +3 -12
- data/test/command/run-test.rb +1 -1
- data/test/command/suite/dump/column/index.expected +19 -82
- data/test/command/suite/dump/column/scalar.expected +5 -36
- data/test/command/suite/dump/column/vector.expected +5 -39
- data/test/command/suite/dump/record/vector/reference.expected +24 -93
- data/test/command/suite/dump/table/array.expected +0 -19
- data/test/command/suite/dump/table/double_array_trie.expected +0 -20
- data/test/command/suite/dump/table/hash.expected +0 -20
- data/test/command/suite/dump/table/patricia_trie.expected +0 -20
- data/test/command/suite/search/condition/query/nonexistent_column.expected +0 -11
- data/test/command/suite/search/condition/query/syntax_error.expected +0 -11
- data/test/command/suite/search/error/unknown-source.expected +0 -12
- data/test/command/suite/search/output/attributes/invalid.expected +0 -10
- data/test/command/suite/search/output/attributes/reference_vector.catalog.json +27 -0
- data/test/command/suite/search/output/attributes/reference_vector.expected +30 -0
- data/test/command/suite/search/output/attributes/reference_vector.test +32 -0
- data/test/command/suite/watch/subscribe.catalog.json +23 -0
- data/test/command/suite/watch/subscribe.test +2 -0
- data/test/command/suite/watch/unsubscribe.catalog.json +23 -0
- data/test/command/suite/watch/unsubscribe.test +2 -0
- data/test/performance/run-test.rb +1 -1
- data/test/unit/catalog/test_collection_volume.rb +1 -1
- data/test/unit/catalog/test_dataset.rb +1 -1
- data/test/unit/catalog/test_schema.rb +1 -1
- data/test/unit/catalog/test_single_volume.rb +27 -19
- data/test/unit/catalog/test_slice.rb +2 -2
- data/test/unit/catalog/test_version1.rb +1 -1
- data/test/unit/catalog/test_version2.rb +1 -1
- data/test/unit/catalog/test_version2_validator.rb +1 -1
- data/test/unit/catalog/test_volume_collection.rb +1 -1
- data/test/unit/helper/distributed_search_planner_helper.rb +1 -1
- data/test/unit/helper/fixture.rb +1 -1
- data/test/unit/helper/plugin_helper.rb +1 -1
- data/test/unit/helper/sandbox.rb +1 -1
- data/test/unit/helper/stub_worker.rb +1 -1
- data/test/unit/helper/watch_helper.rb +1 -1
- data/test/unit/helper.rb +1 -1
- data/test/unit/plugins/crud/test_add.rb +1 -1
- data/test/unit/plugins/groonga/select/test_adapter_input.rb +1 -1
- data/test/unit/plugins/groonga/select/test_adapter_output.rb +1 -1
- data/test/unit/plugins/groonga/test_column_create.rb +1 -1
- data/test/unit/plugins/groonga/test_column_list.rb +1 -1
- data/test/unit/plugins/groonga/test_column_remove.rb +1 -1
- data/test/unit/plugins/groonga/test_column_rename.rb +1 -1
- data/test/unit/plugins/groonga/test_delete.rb +1 -1
- data/test/unit/plugins/groonga/test_table_create.rb +1 -1
- data/test/unit/plugins/groonga/test_table_list.rb +1 -1
- data/test/unit/plugins/groonga/test_table_remove.rb +1 -1
- data/test/unit/plugins/search/planner/test_basic.rb +1 -1
- data/test/unit/plugins/search/planner/test_group_by.rb +1 -1
- data/test/unit/plugins/search/planner/test_output.rb +1 -1
- data/test/unit/plugins/search/planner/test_sort_by.rb +1 -1
- data/test/unit/plugins/search/test_collector.rb +1 -1
- data/test/unit/plugins/search/test_handler.rb +1 -1
- data/test/unit/plugins/search/test_planner.rb +1 -1
- data/test/unit/plugins/system/test_status.rb +1 -1
- data/test/unit/plugins/test_basic.rb +1 -1
- data/test/unit/plugins/test_groonga.rb +1 -1
- data/test/unit/plugins/test_watch.rb +1 -1
- data/test/unit/run-test.rb +1 -1
- data/test/unit/test_address.rb +53 -0
- data/test/unit/test_catalog_generator.rb +59 -1
- data/test/unit/test_line_buffer.rb +1 -1
- data/test/unit/test_message_matcher.rb +1 -1
- data/test/unit/test_schema_applier.rb +1 -1
- data/test/unit/test_sweeper.rb +1 -1
- data/test/unit/test_watch_schema.rb +1 -1
- data/test/unit/test_watcher.rb +1 -1
- metadata +39 -24
- data/lib/droonga/server.rb +0 -45
- data/lib/droonga/worker.rb +0 -66
- data/sample/cluster/catalog.json +0 -42
- data/test/command/config/default/fluentd.conf +0 -11
- data/test/command/config/version1/fluentd.conf +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e783348c7bfbef6e04de3de388c902839e8633b
|
4
|
+
data.tar.gz: 01b3367f3c22fb2a40245ca9bedc4920b42a494a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 399c8b21fd8368610a2ad498246584614f4bde6bc99bed78f8ba705164627a920ea59e32311ef5bf565fcaeb838e58837ab200a3d2ed0b2ee56f7ca26f1efa0e
|
7
|
+
data.tar.gz: 30bdef9c53baa70dd2095869656283488517d579942bc214c9267ff7c095e2c0aac9ff0d0e01db59263f4d4c86cf6f2165e5d4681db9af21726a2d69f4d798af
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
#
|
12
12
|
# You should have received a copy of the GNU Lesser General Public
|
13
13
|
# License along with this library; if not, write to the Free Software
|
14
|
-
# Foundation, Inc.,
|
14
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
15
15
|
|
16
16
|
source "https://rubygems.org"
|
17
17
|
|
data/LICENSE.txt
CHANGED
@@ -11,4 +11,4 @@ Lesser General Public License for more details.
|
|
11
11
|
|
12
12
|
You should have received a copy of the GNU Lesser General Public
|
13
13
|
License along with this library; if not, write to the Free Software
|
14
|
-
Foundation, Inc.,
|
14
|
+
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
data/Rakefile
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library; if not, write to the Free Software
|
16
|
-
# Foundation, Inc.,
|
16
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
17
|
|
18
18
|
require "bundler/gem_helper"
|
19
19
|
require "packnga"
|
data/benchmark/benchmark.rb
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library; if not, write to the Free Software
|
16
|
-
# Foundation, Inc.,
|
16
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
17
|
|
18
18
|
require "droonga/client"
|
19
19
|
|
data/benchmark/utils.rb
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library; if not, write to the Free Software
|
16
|
-
# Foundation, Inc.,
|
16
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
17
|
|
18
18
|
require "json"
|
19
19
|
require "thread"
|
@@ -13,7 +13,7 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library; if not, write to the Free Software
|
16
|
-
# Foundation, Inc.,
|
16
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
17
|
|
18
18
|
# this benchmark must be done by benchmark-notify.sh.
|
19
19
|
|
@@ -13,7 +13,7 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library; if not, write to the Free Software
|
16
|
-
# Foundation, Inc.,
|
16
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
17
|
|
18
18
|
require "benchmark"
|
19
19
|
require "fileutils"
|
@@ -13,7 +13,7 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library; if not, write to the Free Software
|
16
|
-
# Foundation, Inc.,
|
16
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
17
|
|
18
18
|
require "benchmark"
|
19
19
|
require "fileutils"
|
data/bin/droonga-engine
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library; if not, write to the Free Software
|
16
|
-
# Foundation, Inc.,
|
16
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
17
|
|
18
18
|
require "droonga/command/droonga_engine"
|
19
19
|
|
@@ -13,7 +13,7 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library; if not, write to the Free Software
|
16
|
-
# Foundation, Inc.,
|
16
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
17
|
|
18
18
|
require "ostruct"
|
19
19
|
require "optparse"
|
@@ -21,12 +21,15 @@ require "open3"
|
|
21
21
|
|
22
22
|
require "droonga/engine/version"
|
23
23
|
require "droonga/catalog_generator"
|
24
|
+
require "droonga/path"
|
25
|
+
require "droonga/data_absorber"
|
24
26
|
require "droonga/serf"
|
25
27
|
|
26
28
|
options = OpenStruct.new
|
27
29
|
options.port = Droonga::CatalogGenerator::DEFAULT_PORT
|
28
30
|
options.tag = Droonga::CatalogGenerator::DEFAULT_TAG
|
29
31
|
options.dataset = Droonga::CatalogGenerator::DEFAULT_DATASET
|
32
|
+
options.remote = true
|
30
33
|
parser = OptionParser.new
|
31
34
|
parser.version = Droonga::Engine::VERSION
|
32
35
|
|
@@ -45,6 +48,11 @@ parser.on("--port=PORT", Integer,
|
|
45
48
|
"(#{options.port})") do |port|
|
46
49
|
options.port = port
|
47
50
|
end
|
51
|
+
parser.on("--[no-]remote",
|
52
|
+
"Run command in remote node or not.",
|
53
|
+
"(#{options.remote})") do |remote|
|
54
|
+
options.remote = remote
|
55
|
+
end
|
48
56
|
|
49
57
|
parser.separator("")
|
50
58
|
parser.separator("Data:")
|
@@ -70,13 +78,45 @@ end
|
|
70
78
|
|
71
79
|
destination_node = "#{options.destination_host}:#{options.port}/#{options.tag}"
|
72
80
|
|
73
|
-
|
74
|
-
Droonga::Serf.send_query(
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
81
|
+
def run_remote_command(target, command, options)
|
82
|
+
result = Droonga::Serf.send_query(target, command, options)
|
83
|
+
puts result[:result]
|
84
|
+
puts result[:error] unless result[:error].empty?
|
85
|
+
result[:response]
|
86
|
+
end
|
87
|
+
|
88
|
+
puts "Start to absorb data from #{options.source_host}"
|
89
|
+
puts " to #{options.destination_host}"
|
90
|
+
puts " dataset = #{options.dataset}"
|
91
|
+
puts " port = #{options.port}"
|
92
|
+
puts " tag = #{options.tag}"
|
93
|
+
puts ""
|
94
|
+
puts "Absorbing..."
|
95
|
+
|
96
|
+
if options.remote
|
97
|
+
run_remote_command(destination_node, "absorb_data",
|
98
|
+
"node" => destination_node,
|
99
|
+
"source" => options.source_host,
|
100
|
+
"port" => options.port,
|
101
|
+
"tag" => options.tag,
|
102
|
+
"dataset" => options.dataset)
|
103
|
+
while true
|
104
|
+
sleep(3)
|
105
|
+
response = run_remote_command(destination_node, "report_status",
|
106
|
+
"node" => destination_node,
|
107
|
+
"key" => "absorbing")
|
108
|
+
absorbing = response["value"]
|
109
|
+
break unless absorbing
|
110
|
+
end
|
111
|
+
else
|
112
|
+
Droonga::DataAbsorber.absorb(:dataset => options.dataset,
|
113
|
+
:source_host => options.source_host,
|
114
|
+
:destination_host => options.destination_host,
|
115
|
+
:port => options.port,
|
116
|
+
:tag => options.tag) do |output|
|
117
|
+
puts output
|
118
|
+
end
|
119
|
+
end
|
80
120
|
puts "Done."
|
81
121
|
|
82
122
|
exit(true)
|
@@ -13,7 +13,7 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library; if not, write to the Free Software
|
16
|
-
# Foundation, Inc.,
|
16
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
17
|
|
18
18
|
require "ostruct"
|
19
19
|
require "optparse"
|
@@ -13,7 +13,7 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library; if not, write to the Free Software
|
16
|
-
# Foundation, Inc.,
|
16
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
17
|
|
18
18
|
require "ostruct"
|
19
19
|
require "optparse"
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Copyright (C) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
|
+
|
18
|
+
require "ostruct"
|
19
|
+
require "optparse"
|
20
|
+
require "pathname"
|
21
|
+
require "fileutils"
|
22
|
+
require "webrick"
|
23
|
+
|
24
|
+
require "droonga/engine/version"
|
25
|
+
require "droonga/path"
|
26
|
+
|
27
|
+
options = OpenStruct.new
|
28
|
+
options.base_dir = ENV[Droonga::Path::BASE_DIR_ENV_NAME] || Dir.pwd
|
29
|
+
options.port = 10032
|
30
|
+
|
31
|
+
parser = OptionParser.new
|
32
|
+
parser.version = Droonga::Engine::VERSION
|
33
|
+
|
34
|
+
parser.on("--base-dir=PATH",
|
35
|
+
"Path to the base directory the catalog.json is located in.",
|
36
|
+
"(#{options.base_dir})") do |path|
|
37
|
+
options.base_dir = path
|
38
|
+
end
|
39
|
+
parser.on("--port=PORT", Integer,
|
40
|
+
"Port number to listen.",
|
41
|
+
"(#{options.port})") do |port|
|
42
|
+
options.port = port
|
43
|
+
end
|
44
|
+
parser.on("--published-file=PATH",
|
45
|
+
"Path to the file to be published.") do |path|
|
46
|
+
options.published_file = path
|
47
|
+
end
|
48
|
+
|
49
|
+
parser.parse!(ARGV)
|
50
|
+
|
51
|
+
include WEBrick
|
52
|
+
|
53
|
+
published_dir = Droonga::Path.published(options.port)
|
54
|
+
FileUtils.mkdir_p(published_dir.to_s)
|
55
|
+
published_file = Pathname(options.published_file).expand_path
|
56
|
+
FileUtils.copy(published_file.to_s, published_dir + published_file.basename)
|
57
|
+
|
58
|
+
server = HTTPServer.new(:Port => options.port,
|
59
|
+
:DocumentRoot => published_dir)
|
60
|
+
|
61
|
+
trap("INT") do
|
62
|
+
server.shutdown
|
63
|
+
FileUtils.rm_rf(published_dir.to_s)
|
64
|
+
end
|
65
|
+
|
66
|
+
server.start
|
data/bin/droonga-engine-join
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library; if not, write to the Free Software
|
16
|
-
# Foundation, Inc.,
|
16
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
17
|
|
18
18
|
require "ostruct"
|
19
19
|
require "optparse"
|
@@ -32,6 +32,8 @@ options.base_dir = ENV[Droonga::Path::BASE_DIR_ENV_NAME] || Dir.pwd
|
|
32
32
|
options.drndump = "drndump"
|
33
33
|
options.client = "droonga-request"
|
34
34
|
options.copy = true
|
35
|
+
options.port = Droonga::CatalogGenerator::DEFAULT_PORT
|
36
|
+
options.tag = Droonga::CatalogGenerator::DEFAULT_TAG
|
35
37
|
|
36
38
|
parser = OptionParser.new
|
37
39
|
parser.version = Droonga::Engine::VERSION
|
@@ -58,6 +60,21 @@ parser.on("--replica-source-host=HOST",
|
|
58
60
|
"Host name of the soruce cluster to be connected.") do |host|
|
59
61
|
options.replica_source_host = host
|
60
62
|
end
|
63
|
+
parser.on("--dataset=DATASET",
|
64
|
+
"Tag dataset name of the cluster to be joined as a node.",
|
65
|
+
"(#{options.dataset})") do |dataset|
|
66
|
+
options.dataset = dataset
|
67
|
+
end
|
68
|
+
parser.on("--port=PORT", Integer,
|
69
|
+
"Port number of the source cluster to be connected.",
|
70
|
+
"(#{options.port})") do |port|
|
71
|
+
options.port = port
|
72
|
+
end
|
73
|
+
parser.on("--tag=TAG",
|
74
|
+
"Tag name of the soruce cluster to be connected.",
|
75
|
+
"(#{options.tag})") do |tag|
|
76
|
+
options.tag = tag
|
77
|
+
end
|
61
78
|
|
62
79
|
parser.parse!(ARGV)
|
63
80
|
|
@@ -87,28 +104,66 @@ generator = Droonga::CatalogGenerator.new
|
|
87
104
|
generator.load(source_catalog)
|
88
105
|
|
89
106
|
dataset = generator.dataset_for_host(options.replica_source_host)
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
107
|
+
if dataset
|
108
|
+
if generator.dataset_for_host(options.joining_host)
|
109
|
+
raise "The joining node is already a member of the cluster. " +
|
110
|
+
"You cannot join a member twice."
|
111
|
+
end
|
112
|
+
|
113
|
+
options.dataset = dataset.name
|
114
|
+
options.tag = dataset.replicas.tag
|
115
|
+
options.port = dataset.replicas.port
|
94
116
|
end
|
95
117
|
|
96
|
-
|
97
|
-
|
98
|
-
"You cannot join a member twice."
|
99
|
-
end
|
118
|
+
options.joining_node = "#{options.joining_host}:#{options.port}/#{options.tag}"
|
119
|
+
options.source_node = "#{options.replica_source_host}:#{options.port}/#{options.tag}"
|
100
120
|
|
101
|
-
options
|
102
|
-
|
121
|
+
def run_remote_command(target, command, options)
|
122
|
+
result = Droonga::Serf.send_query(target, command, options)
|
123
|
+
puts result[:result]
|
124
|
+
puts result[:error] unless result[:error].empty?
|
125
|
+
result[:response]
|
126
|
+
end
|
103
127
|
|
104
|
-
|
128
|
+
=begin
|
129
|
+
XXX disable fetching until it become working
|
130
|
+
puts "Preparing to fetch cluster information..."
|
131
|
+
publish_port = 10032 + rand(10000)
|
132
|
+
run_remote_command(options.source_node, "publish_catalog",
|
133
|
+
"node" => options.source_node,
|
134
|
+
"port" => publish_port)
|
135
|
+
sleep(3) # wait until the HTTP server becomes ready
|
136
|
+
=end
|
105
137
|
|
106
138
|
puts "Joining new replica to the cluster..."
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
139
|
+
run_remote_command(options.joining_node, "join",
|
140
|
+
"node" => options.joining_node,
|
141
|
+
"type" => "replica",
|
142
|
+
"source" => options.source_node,
|
143
|
+
# "fetch_port" => publish_port,
|
144
|
+
"copy" => options.copy)
|
145
|
+
sleep(5) #TODO: wait for restarting of the joining node. this should be done more safely.
|
146
|
+
|
147
|
+
while true
|
148
|
+
sleep(3)
|
149
|
+
response = run_remote_command(options.joining_node, "report_status",
|
150
|
+
"node" => options.joining_node,
|
151
|
+
"key" => "absorbing")
|
152
|
+
absorbing = response["value"]
|
153
|
+
break unless absorbing
|
154
|
+
end
|
155
|
+
|
156
|
+
puts "Update existing hosts in the cluster..."
|
157
|
+
run_remote_command(options.source_node, "add_replicas",
|
158
|
+
"dataset" => options.dataset,
|
159
|
+
"hosts" => [options.joining_host])
|
160
|
+
|
161
|
+
=begin
|
162
|
+
XXX disable fetching until it become working
|
163
|
+
run_remote_command(options.source_node, "unpublish_catalog",
|
164
|
+
"node" => options.source_node,
|
165
|
+
"port" => publish_port)
|
166
|
+
=end
|
112
167
|
|
113
168
|
puts "Done."
|
114
169
|
|
@@ -13,7 +13,7 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library; if not, write to the Free Software
|
16
|
-
# Foundation, Inc.,
|
16
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
17
|
|
18
18
|
require "droonga/command/serf_event_handler"
|
19
19
|
|
data/bin/droonga-engine-service
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library; if not, write to the Free Software
|
16
|
-
# Foundation, Inc.,
|
16
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
17
|
|
18
18
|
require "droonga/command/droonga_engine_service"
|
19
19
|
|
data/bin/droonga-engine-unjoin
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library; if not, write to the Free Software
|
16
|
-
# Foundation, Inc.,
|
16
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
17
|
|
18
18
|
require "ostruct"
|
19
19
|
require "optparse"
|
@@ -79,11 +79,18 @@ remaining_host = options.other_hosts.first || options.replica_remove_host
|
|
79
79
|
options.remaining_node = "#{remaining_host}:#{options.port}/#{options.tag}"
|
80
80
|
|
81
81
|
|
82
|
+
def run_remote_command(target, command, options)
|
83
|
+
result = Droonga::Serf.send_query(target, command, options)
|
84
|
+
puts result[:result]
|
85
|
+
puts result[:error] unless result[:error].empty?
|
86
|
+
end
|
87
|
+
|
88
|
+
|
82
89
|
puts "Unjoining replica from the cluster..."
|
83
90
|
|
84
|
-
|
85
|
-
|
86
|
-
|
91
|
+
run_remote_command(options.remaining_node, "remove_replicas",
|
92
|
+
"dataset" => options.dataset,
|
93
|
+
"hosts" => [options.replica_remove_host])
|
87
94
|
|
88
95
|
puts "Done."
|
89
96
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Copyright (C) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
|
+
|
18
|
+
require "droonga/command/droonga_engine_worker"
|
19
|
+
|
20
|
+
exit(Droonga::Command::DroongaEngineWorker.run(ARGV))
|
data/doc/text/news.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# News
|
2
2
|
|
3
|
+
## 1.0.5: 2014-07-29
|
4
|
+
|
5
|
+
* Restarts server processes more gracefully.
|
6
|
+
* Works with search results with vector reference column values correctly.
|
7
|
+
* Messages forwarded to other nodes are always buffered for now.
|
8
|
+
* Works again for the case: `nWorkers` == `0`
|
9
|
+
* droonga-engine-join: Works correctly and safely for databases with much records.
|
10
|
+
|
3
11
|
## 1.0.4: 2014-06-29
|
4
12
|
|
5
13
|
* New command (and plugin) [`status`](http://droonga.org/reference/1.0.4/commands/status/) is now available.
|
data/droonga-engine.gemspec
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU Lesser General Public
|
15
15
|
# License along with this library; if not, write to the Free Software
|
16
|
-
# Foundation, Inc.,
|
16
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
17
|
|
18
18
|
base_dir = File.dirname(__FILE__)
|
19
19
|
$LOAD_PATH.unshift(File.join(base_dir, "lib"))
|
@@ -35,16 +35,16 @@ Gem::Specification.new do |gem|
|
|
35
35
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
36
36
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
37
37
|
gem.require_paths = ["lib"]
|
38
|
-
gem.add_dependency "rroonga", ">=
|
38
|
+
gem.add_dependency "rroonga", ">= 4.0.1"
|
39
39
|
gem.add_dependency "groonga-command-parser"
|
40
40
|
gem.add_dependency "json"
|
41
41
|
gem.add_dependency "cool.io"
|
42
|
-
gem.add_dependency "serverengine"
|
43
42
|
gem.add_dependency "droonga-message-pack-packer", ">= 1.0.1"
|
44
43
|
gem.add_dependency "faraday"
|
45
44
|
gem.add_dependency "faraday_middleware"
|
46
45
|
gem.add_dependency "archive-zip"
|
47
46
|
gem.add_dependency "sigdump"
|
47
|
+
gem.add_dependency "droonga-client", ">= 0.1.9"
|
48
48
|
gem.add_dependency "drndump"
|
49
49
|
gem.add_development_dependency "rake"
|
50
50
|
gem.add_development_dependency "bundler"
|
data/lib/droonga/adapter.rb
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
#
|
12
12
|
# You should have received a copy of the GNU Lesser General Public
|
13
13
|
# License along with this library; if not, write to the Free Software
|
14
|
-
# Foundation, Inc.,
|
14
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
15
15
|
|
16
16
|
require "droonga/pluggable"
|
17
17
|
require "droonga/loggable"
|
@@ -11,7 +11,7 @@
|
|
11
11
|
#
|
12
12
|
# You should have received a copy of the GNU Lesser General Public
|
13
13
|
# License along with this library; if not, write to the Free Software
|
14
|
-
# Foundation, Inc.,
|
14
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
15
15
|
|
16
16
|
require "droonga/loggable"
|
17
17
|
require "droonga/message_matcher"
|
@@ -0,0 +1,69 @@
|
|
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
15
|
+
|
16
|
+
module Droonga
|
17
|
+
class Address
|
18
|
+
class << self
|
19
|
+
def parse(string)
|
20
|
+
if /\A(.+):(\d+)\/([^.]+)(?:\.(.+))?\z/ =~ string
|
21
|
+
components = {
|
22
|
+
:host => $1,
|
23
|
+
:port => $2.to_i,
|
24
|
+
:tag => $3,
|
25
|
+
:name => $4
|
26
|
+
}
|
27
|
+
new(components)
|
28
|
+
else
|
29
|
+
format = "${host_name}:${port_number}/${tag}.${name}"
|
30
|
+
message = "volume address must be <#{format}> format: <#{string}>"
|
31
|
+
raise ArgumentError, message
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
DEFAULT_HOST = "127.0.0.1"
|
37
|
+
DEFAULT_PORT = 10031
|
38
|
+
DEFAULT_TAG = "droonga"
|
39
|
+
|
40
|
+
attr_reader :host
|
41
|
+
attr_reader :port
|
42
|
+
attr_reader :tag
|
43
|
+
attr_reader :name
|
44
|
+
def initialize(components={})
|
45
|
+
@host = components[:host] || DEFAULT_HOST
|
46
|
+
@port = components[:port] || DEFAULT_PORT
|
47
|
+
@tag = components[:tag] || DEFAULT_TAG
|
48
|
+
@name = components[:name]
|
49
|
+
end
|
50
|
+
|
51
|
+
def to_s
|
52
|
+
string = node
|
53
|
+
string << ".#{@name}" if @name
|
54
|
+
string
|
55
|
+
end
|
56
|
+
|
57
|
+
def to_a
|
58
|
+
[@host, @port, @tag, @name]
|
59
|
+
end
|
60
|
+
|
61
|
+
def ==(other)
|
62
|
+
other.is_a?(self.class) and to_a == other.to_a
|
63
|
+
end
|
64
|
+
|
65
|
+
def node
|
66
|
+
"#{@host}:#{@port}/#{@tag}"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|