droonga-engine 1.0.9 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (195) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/benchmark/timer-watcher/benchmark.rb +44 -0
  4. data/bin/droonga-engine-absorb-data +246 -187
  5. data/bin/droonga-engine-catalog-generate +12 -12
  6. data/bin/droonga-engine-catalog-modify +4 -4
  7. data/bin/droonga-engine-join +352 -171
  8. data/bin/droonga-engine-set-role +54 -0
  9. data/bin/droonga-engine-unjoin +107 -112
  10. data/droonga-engine.gemspec +3 -3
  11. data/install.sh +55 -36
  12. data/install/centos/functions.sh +2 -2
  13. data/install/debian/functions.sh +2 -2
  14. data/lib/droonga/address.rb +26 -24
  15. data/lib/droonga/buffered_tcp_socket.rb +65 -10
  16. data/lib/droonga/catalog/base.rb +9 -6
  17. data/lib/droonga/catalog/dataset.rb +17 -41
  18. data/lib/droonga/catalog/fetcher.rb +64 -0
  19. data/lib/droonga/catalog/generator.rb +245 -0
  20. data/lib/droonga/catalog/loader.rb +66 -0
  21. data/lib/droonga/{catalog_modifier.rb → catalog/modifier.rb} +11 -18
  22. data/lib/droonga/catalog/replicas_volume.rb +123 -0
  23. data/lib/droonga/catalog/schema.rb +37 -37
  24. data/lib/droonga/catalog/single_volume.rb +11 -3
  25. data/lib/droonga/catalog/slice.rb +10 -6
  26. data/lib/droonga/catalog/{collection_volume.rb → slices_volume.rb} +47 -11
  27. data/lib/droonga/catalog/version1.rb +47 -19
  28. data/lib/droonga/catalog/version2.rb +11 -10
  29. data/lib/droonga/catalog/version2_validator.rb +4 -4
  30. data/lib/droonga/catalog/volume.rb +17 -5
  31. data/lib/droonga/changable.rb +25 -0
  32. data/lib/droonga/cluster.rb +237 -0
  33. data/lib/droonga/collector_runner.rb +4 -0
  34. data/lib/droonga/collectors.rb +2 -1
  35. data/lib/droonga/collectors/recursive_sum.rb +26 -0
  36. data/lib/droonga/command/droonga_engine.rb +404 -127
  37. data/lib/droonga/command/droonga_engine_service.rb +47 -11
  38. data/lib/droonga/command/droonga_engine_worker.rb +21 -1
  39. data/lib/droonga/command/remote_command_base.rb +78 -0
  40. data/lib/droonga/command/serf_event_handler.rb +29 -20
  41. data/lib/droonga/data_absorber_client.rb +222 -0
  42. data/lib/droonga/database_scanner.rb +106 -0
  43. data/lib/droonga/{live_nodes_list_loader.rb → deferrable.rb} +11 -24
  44. data/lib/droonga/differ.rb +58 -0
  45. data/lib/droonga/dispatcher.rb +155 -32
  46. data/lib/droonga/distributed_command_planner.rb +9 -11
  47. data/lib/droonga/engine.rb +83 -78
  48. data/lib/droonga/engine/version.rb +1 -1
  49. data/lib/droonga/engine_node.rb +301 -0
  50. data/lib/droonga/engine_state.rb +62 -40
  51. data/lib/droonga/farm.rb +44 -5
  52. data/lib/droonga/file_observer.rb +16 -12
  53. data/lib/droonga/fluent_message_receiver.rb +98 -29
  54. data/lib/droonga/fluent_message_sender.rb +30 -23
  55. data/lib/droonga/forward_buffer.rb +160 -0
  56. data/lib/droonga/forwarder.rb +73 -40
  57. data/lib/droonga/handler.rb +7 -6
  58. data/lib/droonga/handler_messenger.rb +15 -6
  59. data/lib/droonga/handler_runner.rb +6 -1
  60. data/lib/droonga/internal_fluent_message_receiver.rb +28 -8
  61. data/lib/droonga/job_pusher.rb +10 -7
  62. data/lib/droonga/job_receiver.rb +6 -4
  63. data/lib/droonga/logger.rb +7 -1
  64. data/lib/droonga/node_name.rb +90 -0
  65. data/lib/droonga/node_role.rb +72 -0
  66. data/lib/droonga/path.rb +34 -9
  67. data/lib/droonga/planner.rb +73 -7
  68. data/lib/droonga/plugin/async_command.rb +154 -0
  69. data/lib/droonga/plugins/catalog.rb +1 -0
  70. data/lib/droonga/plugins/crud.rb +22 -6
  71. data/lib/droonga/plugins/dump.rb +66 -135
  72. data/lib/droonga/plugins/groonga/delete.rb +13 -0
  73. data/lib/droonga/plugins/search/distributed_search_planner.rb +4 -4
  74. data/lib/droonga/plugins/system.rb +5 -26
  75. data/lib/droonga/plugins/system/absorb_data.rb +405 -0
  76. data/lib/droonga/plugins/system/statistics.rb +71 -0
  77. data/lib/droonga/plugins/system/status.rb +53 -0
  78. data/lib/droonga/process_control_protocol.rb +3 -1
  79. data/lib/droonga/process_supervisor.rb +32 -15
  80. data/lib/droonga/reducer.rb +69 -0
  81. data/lib/droonga/safe_file_writer.rb +1 -1
  82. data/lib/droonga/serf.rb +207 -276
  83. data/lib/droonga/serf/agent.rb +228 -0
  84. data/lib/droonga/serf/command.rb +94 -0
  85. data/lib/droonga/serf/downloader.rb +120 -0
  86. data/lib/droonga/serf/remote_command.rb +348 -0
  87. data/lib/droonga/serf/tag.rb +56 -0
  88. data/lib/droonga/service_installation.rb +2 -2
  89. data/lib/droonga/session.rb +49 -1
  90. data/lib/droonga/single_step.rb +6 -11
  91. data/lib/droonga/single_step_definition.rb +32 -1
  92. data/lib/droonga/slice.rb +14 -9
  93. data/lib/droonga/supervisor.rb +27 -20
  94. data/lib/droonga/test/stub_handler_messenger.rb +2 -1
  95. data/lib/droonga/timestamp.rb +69 -0
  96. data/lib/droonga/worker_process_agent.rb +33 -15
  97. data/sample/cluster-state.json +8 -0
  98. data/sample/cluster/Rakefile +30 -6
  99. data/test/command/fixture/integer-key-table.jsons +11 -0
  100. data/test/command/fixture/string-key-table.jsons +11 -0
  101. data/test/command/run-test.rb +4 -0
  102. data/test/command/suite/add/error/invalid-integer.expected +3 -3
  103. data/test/command/suite/add/error/invalid-time.expected +3 -3
  104. data/test/command/suite/add/{minimum.expected → key-integer.expected} +0 -0
  105. data/test/command/suite/add/{minimum.test → key-integer.test} +0 -0
  106. data/test/command/suite/add/key-string.expected +6 -0
  107. data/test/command/suite/add/key-string.test +9 -0
  108. data/test/command/suite/add/mismatched-key-type/acceptable/integer-for-string.expected +6 -0
  109. data/test/command/suite/add/mismatched-key-type/acceptable/integer-for-string.test +9 -0
  110. data/test/command/suite/add/mismatched-key-type/acceptable/string-for-integer.expected +6 -0
  111. data/test/command/suite/add/mismatched-key-type/acceptable/string-for-integer.test +9 -0
  112. data/test/command/suite/add/without-values.expected +6 -0
  113. data/test/command/suite/add/without-values.test +11 -0
  114. data/test/command/suite/dump/column/index.expected +33 -1
  115. data/test/command/suite/dump/column/index.test +1 -0
  116. data/test/command/suite/dump/column/scalar.expected +29 -1
  117. data/test/command/suite/dump/column/scalar.test +1 -0
  118. data/test/command/suite/dump/column/vector.expected +29 -1
  119. data/test/command/suite/dump/column/vector.test +1 -0
  120. data/test/command/suite/dump/record/scalar.catalog.json +12 -0
  121. data/test/command/suite/dump/record/scalar.expected +84 -0
  122. data/test/command/suite/dump/record/scalar.test +16 -0
  123. data/test/command/suite/dump/record/vector/reference.expected +83 -1
  124. data/test/command/suite/dump/record/vector/reference.test +1 -0
  125. data/test/command/suite/dump/table/array.expected +27 -1
  126. data/test/command/suite/dump/table/array.test +1 -0
  127. data/test/command/suite/dump/table/double_array_trie.expected +27 -1
  128. data/test/command/suite/dump/table/double_array_trie.test +1 -0
  129. data/test/command/suite/dump/table/hash.expected +27 -1
  130. data/test/command/suite/dump/table/hash.test +1 -0
  131. data/test/command/suite/dump/table/patricia_trie.expected +27 -1
  132. data/test/command/suite/dump/table/patricia_trie.test +1 -0
  133. data/test/command/suite/groonga/delete/{success.expected → key-integer.expected} +0 -0
  134. data/test/command/suite/groonga/delete/key-integer.test +17 -0
  135. data/test/command/suite/groonga/delete/key-string.expected +19 -0
  136. data/test/command/suite/groonga/delete/{success.test → key-string.test} +4 -6
  137. data/test/command/suite/groonga/delete/mismatched-type-key/acceptable/integer-for-string.expected +19 -0
  138. data/test/command/suite/groonga/delete/mismatched-type-key/acceptable/integer-for-string.test +17 -0
  139. data/test/command/suite/groonga/delete/mismatched-type-key/acceptable/string-for-integer.expected +19 -0
  140. data/test/command/suite/groonga/delete/mismatched-type-key/acceptable/string-for-integer.test +17 -0
  141. data/test/command/suite/message/error/missing-dataset.test +1 -0
  142. data/test/command/suite/system/absorb-data/records.catalog.json +58 -0
  143. data/test/command/suite/system/absorb-data/records.expected +32 -0
  144. data/test/command/suite/system/absorb-data/records.test +24 -0
  145. data/test/command/suite/system/statistics/object/count/empty.expected +11 -0
  146. data/test/command/suite/system/statistics/object/count/empty.test +12 -0
  147. data/test/command/suite/system/statistics/object/count/per-volume/empty.catalog.json +36 -0
  148. data/test/command/suite/system/statistics/object/count/per-volume/empty.expected +19 -0
  149. data/test/command/suite/system/statistics/object/count/per-volume/empty.test +12 -0
  150. data/test/command/suite/system/statistics/object/count/per-volume/record.catalog.json +40 -0
  151. data/test/command/suite/system/statistics/object/count/per-volume/record.expected +19 -0
  152. data/test/command/suite/system/statistics/object/count/per-volume/record.test +23 -0
  153. data/test/command/suite/system/statistics/object/count/per-volume/schema.catalog.json +40 -0
  154. data/test/command/suite/system/statistics/object/count/per-volume/schema.expected +19 -0
  155. data/test/command/suite/system/statistics/object/count/per-volume/schema.test +13 -0
  156. data/test/command/suite/system/statistics/object/count/record.catalog.json +12 -0
  157. data/test/command/suite/system/statistics/object/count/record.expected +11 -0
  158. data/test/command/suite/system/statistics/object/count/record.test +23 -0
  159. data/test/command/suite/system/statistics/object/count/schema.catalog.json +12 -0
  160. data/test/command/suite/system/statistics/object/count/schema.expected +11 -0
  161. data/test/command/suite/system/statistics/object/count/schema.test +13 -0
  162. data/test/command/suite/system/status.expected +3 -2
  163. data/test/unit/catalog/test_dataset.rb +4 -1
  164. data/test/unit/{test_catalog_generator.rb → catalog/test_generator.rb} +2 -2
  165. data/test/unit/catalog/test_replicas_volume.rb +79 -0
  166. data/test/unit/catalog/test_single_volume.rb +2 -2
  167. data/test/unit/catalog/test_slice.rb +33 -1
  168. data/test/unit/catalog/{test_collection_volume.rb → test_slices_volume.rb} +72 -11
  169. data/test/unit/catalog/test_version2.rb +3 -0
  170. data/test/unit/helper/distributed_search_planner_helper.rb +2 -2
  171. data/test/unit/plugins/catalog/test_fetch.rb +4 -4
  172. data/test/unit/plugins/crud/test_add.rb +44 -4
  173. data/test/unit/plugins/groonga/test_column_create.rb +4 -4
  174. data/test/unit/plugins/groonga/test_column_list.rb +4 -4
  175. data/test/unit/plugins/groonga/test_column_remove.rb +4 -4
  176. data/test/unit/plugins/groonga/test_column_rename.rb +4 -4
  177. data/test/unit/plugins/groonga/test_delete.rb +73 -10
  178. data/test/unit/plugins/groonga/test_table_create.rb +4 -4
  179. data/test/unit/plugins/groonga/test_table_list.rb +4 -4
  180. data/test/unit/plugins/groonga/test_table_remove.rb +4 -4
  181. data/test/unit/plugins/search/test_handler.rb +4 -4
  182. data/test/unit/plugins/search/test_planner.rb +4 -2
  183. data/test/unit/plugins/system/test_status.rb +31 -15
  184. data/test/unit/plugins/test_watch.rb +16 -16
  185. data/test/unit/test_address.rb +4 -4
  186. metadata +134 -35
  187. data/lib/droonga/catalog/volume_collection.rb +0 -79
  188. data/lib/droonga/catalog_fetcher.rb +0 -53
  189. data/lib/droonga/catalog_generator.rb +0 -243
  190. data/lib/droonga/catalog_loader.rb +0 -56
  191. data/lib/droonga/command/remote.rb +0 -404
  192. data/lib/droonga/data_absorber.rb +0 -264
  193. data/lib/droonga/node_status.rb +0 -71
  194. data/lib/droonga/serf_downloader.rb +0 -115
  195. data/test/unit/catalog/test_volume_collection.rb +0 -78
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Copyright (C) 2014-2015 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/remote_command_base"
19
+
20
+ module Droonga
21
+ module Command
22
+ class SetRole < RemoteCommandBase
23
+ def run
24
+ parse_options do |option|
25
+ option.on(:role=,
26
+ "New role for the target node.",
27
+ :required => true)
28
+ end
29
+
30
+ if serf.role == @options[:role]
31
+ puts "Role of #{node.to_s} is #{@options[:role]}. Nothing to do."
32
+ return true
33
+ end
34
+
35
+ puts "Setting role of #{node.to_s} to #{@options[:role]}..."
36
+ succeeded = set_node_role
37
+
38
+ puts("Done.") if succeeded
39
+ succeeded
40
+ end
41
+
42
+ private
43
+ def set_node_role
44
+ serf.ensure_restarted do
45
+ serf.send_query("change_role",
46
+ "node" => node.to_s,
47
+ "role" => @options[:role])
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ exit(Droonga::Command::SetRole.new.run)
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
- # Copyright (C) 2014 Droonga Project
3
+ # Copyright (C) 2014-2015 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,121 +15,116 @@
15
15
  # License along with this library; if not, write to the Free Software
16
16
  # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
17
 
18
- require "slop"
19
- require "json"
20
- require "pathname"
18
+ require "socket"
21
19
 
22
- require "droonga/engine/version"
23
- require "droonga/path"
24
- require "droonga/catalog_fetcher"
25
- require "droonga/catalog_generator"
20
+ require "droonga/command/remote_command_base"
21
+ require "droonga/node_name"
22
+ require "droonga/catalog/dataset"
23
+ require "droonga/catalog/loader"
24
+ require "droonga/catalog/fetcher"
25
+ require "droonga/catalog/generator"
26
26
  require "droonga/serf"
27
27
 
28
- class UnjoinCommand
29
- def run
30
- parse_options
31
-
32
- puts "Start to unjoin a node #{@options[:host]}"
33
- puts " by #{@options["receiver-host"]} (this host)"
34
- puts ""
35
-
36
- do_unjoin
37
-
38
- puts("Done.")
39
- exit(true)
40
- end
41
-
42
- private
43
- def parse_options
44
- options = Slop.parse(:help => true) do |option|
45
- option.on(:host=,
46
- "Host name of the replica removed from cluster.",
47
- :required => true)
48
- option.on("receiver-host=",
49
- "Host name of this host.",
50
- :default => Socket.gethostname)
51
- option.on(:dataset=,
52
- "Dataset name of for the node to be unjoined.",
53
- :default => Droonga::CatalogGenerator::DEFAULT_DATASET)
54
- option.on(:port=,
55
- "Port number of the source cluster to be connected.",
56
- :as => Integer,
57
- :default => Droonga::CatalogGenerator::DEFAULT_PORT)
58
- option.on(:tag=,
59
- "Tag name of the soruce cluster to be connected.",
60
- :default => Droonga::CatalogGenerator::DEFAULT_TAG)
61
- end
62
- @options = options
63
- rescue Slop::MissingOptionError => error
64
- $stderr.puts(error)
65
- exit(false)
66
- end
67
-
68
- def replica_remove_host
69
- @options[:host]
70
- end
71
-
72
- def tag
73
- @options[:tag]
74
- end
75
-
76
- def port
77
- @options[:port]
78
- end
79
-
80
- def dataset_name
81
- @options[:dataset]
82
- end
83
-
84
- def replica_remove_node
85
- "#{replica_remove_host}:#{port}/#{tag}"
86
- end
87
-
88
- def fetch_catalog
89
- fetcher = Droonga::CatalogFetcher.new(:host => replica_remove_host,
90
- :port => port,
91
- :tag => tag,
92
- :receiver_host => @options["receiver-host"])
93
- fetcher.fetch(:dataset => dataset_name)
94
- end
95
-
96
- def remaining_node
97
- @remaining_node ||= detect_remaining_node
98
- end
99
-
100
- def detect_remaining_node
101
- catalog = fetch_catalog
102
- generator = Droonga::CatalogGenerator.new
103
- generator.load(catalog)
104
-
105
- dataset = generator.dataset_for_host(replica_remove_host)
106
- unless dataset
107
- raise "Specified host #{replica_remove_host} is not a member of "+
108
- "the cluster. You must specify correct host via --replica-remove-host " +
109
- "option."
28
+ module Droonga
29
+ module Command
30
+ class Unjoin < RemoteCommandBase
31
+ def run
32
+ parse_options do |option|
33
+ option.on("receiver-host=",
34
+ "Host name of this host.",
35
+ :default => Socket.gethostname)
36
+ option.on(:dataset=,
37
+ "Dataset name of for the node to be unjoined.",
38
+ :default => Catalog::Dataset::DEFAULT_NAME)
39
+ end
40
+
41
+ puts "Start to unjoin a node #{node.to_s}"
42
+ puts " by #{@options["receiver-host"]} (this host)"
43
+ puts ""
44
+
45
+ succeeded = do_unjoin
46
+
47
+ puts("Done.") if succeeded
48
+ succeeded
49
+ end
50
+
51
+ def replica_remove_host
52
+ host
53
+ end
54
+
55
+ def replica_remove_node
56
+ node
57
+ end
58
+
59
+ def dataset_name
60
+ @options[:dataset]
61
+ end
62
+
63
+ def cluster_id
64
+ catalog.cluster_id
65
+ end
66
+
67
+ def catalog
68
+ @catalog ||= parse_catalog
69
+ end
70
+
71
+ def parse_catalog
72
+ loader = Catalog::Loader.new
73
+ loader.parse(raw_catalog)
74
+ end
75
+
76
+ def raw_catalog
77
+ @raw_catalog ||= fetch_catalog
78
+ end
79
+
80
+ def fetch_catalog
81
+ fetcher = Catalog::Fetcher.new(:host => replica_remove_host,
82
+ :port => port,
83
+ :tag => tag,
84
+ :receiver_host => @options["receiver-host"])
85
+ fetcher.fetch(:dataset => dataset_name)
86
+ end
87
+
88
+ def remaining_node
89
+ @remaining_node ||= prepare_remaining_node
90
+ end
91
+
92
+ def remaining_node_serf
93
+ @remaining_node_serf ||= Serf.new(remaining_node.to_s,
94
+ :verbose => @options[:verbose])
95
+ end
96
+
97
+ def prepare_remaining_node
98
+ generator = Catalog::Generator.new
99
+ generator.load(raw_catalog)
100
+
101
+ dataset = generator.dataset_for_host(replica_remove_host)
102
+ unless dataset
103
+ raise "Specified host #{replica_remove_host} is not a member of "+
104
+ "the cluster. You must specify correct host via --replica-remove-host " +
105
+ "option."
106
+ end
107
+
108
+ other_hosts = dataset.replicas.hosts
109
+
110
+ remaining_host = other_hosts.first || replica_remove_host
111
+ NodeName.new(:host => remaining_host,
112
+ :port => port,
113
+ :tag => tag)
114
+ end
115
+
116
+ def do_unjoin
117
+ puts "Unjoining replica from the cluster..."
118
+
119
+ remaining_node_serf.ensure_restarted do
120
+ remaining_node_serf.send_query("unjoin",
121
+ "cluster_id" => cluster_id,
122
+ "dataset" => dataset_name,
123
+ "hosts" => [replica_remove_host])
124
+ end
125
+ end
110
126
  end
111
-
112
- other_hosts = dataset.replicas.hosts
113
-
114
- remaining_host = other_hosts.first || replica_remove_host
115
- "#{remaining_host}:#{port}/#{tag}"
116
- end
117
-
118
- def run_remote_command(target, command, options)
119
- serf = Droonga::Serf.new(nil, target)
120
- result = serf.send_query(command, options)
121
- puts(result[:result])
122
- puts(result[:error]) unless result[:error].empty?
123
- result[:response]
124
- end
125
-
126
- def do_unjoin
127
- puts "Unjoining replica from the cluster..."
128
-
129
- run_remote_command(remaining_node, "unjoin",
130
- "dataset" => dataset_name,
131
- "hosts" => [replica_remove_host])
132
127
  end
133
128
  end
134
129
 
135
- UnjoinCommand.new.run
130
+ exit(Droonga::Command::Unjoin.new.run)
@@ -36,8 +36,8 @@ Gem::Specification.new do |gem|
36
36
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
37
37
  gem.require_paths = ["lib"]
38
38
  gem.add_dependency "archive-zip"
39
- gem.add_dependency "cool.io"
40
- gem.add_dependency "drndump"
39
+ gem.add_dependency "cool.io", ">= 1.3.0"
40
+ gem.add_dependency "drndump", ">= 1.0.1"
41
41
  gem.add_dependency "droonga-client", ">= 0.1.9"
42
42
  gem.add_dependency "droonga-message-pack-packer", ">= 1.0.2"
43
43
  gem.add_dependency "groonga-command-parser"
@@ -46,7 +46,7 @@ Gem::Specification.new do |gem|
46
46
  gem.add_dependency "json"
47
47
  gem.add_dependency "rroonga", ">= 4.0.4"
48
48
  gem.add_dependency "sigdump"
49
- gem.add_dependency "slop"
49
+ gem.add_dependency "slop", "<= 3.6.0"
50
50
  gem.add_dependency "sys-proctable"
51
51
  gem.add_development_dependency "kramdown"
52
52
  gem.add_development_dependency "bundler"
data/install.sh CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2014 Droonga Project
1
+ # Copyright (C) 2014-2015 Droonga Project
2
2
  #
3
3
  # This library is free software; you can redistribute it and/or
4
4
  # modify it under the terms of the GNU Lesser General Public
@@ -36,6 +36,11 @@
36
36
  NAME=droonga-engine
37
37
  DOWNLOAD_URL_BASE=https://raw.githubusercontent.com/droonga/$NAME
38
38
  REPOSITORY_URL=https://github.com/droonga/$NAME.git
39
+ DROONGA_CLIENT_RUBY_REPOSITORY_URL=https://github.com/droonga/droonga-client-ruby.git
40
+ DRNDUMP_REPOSITORY_URL=https://github.com/droonga/drndump.git
41
+ RROONGA_REPOSITORY_URL=https://github.com/ranguba/rroonga.git
42
+ GROONGA_COMMAND_REPOSITORY_URL=https://github.com/groonga/groonga-command.git
43
+ GROONGA_COMMAND_PARSER_REPOSITORY_URL=https://github.com/groonga/groonga-command-parser.git
39
44
  USER=$NAME
40
45
  GROUP=droonga
41
46
  DROONGA_BASE_DIR=/home/$USER/droonga
@@ -44,6 +49,7 @@ TEMPDIR=/tmp/install-$NAME
44
49
  : ${VERSION:=release}
45
50
  : ${HOST:=Auto Detect}
46
51
  : ${PORT:=10031}
52
+ : ${INSTALL_FROM_REPOSITORY:=$NAME}
47
53
 
48
54
  case $(uname) in
49
55
  Darwin|*BSD|CYGWIN*) sed="sed -E" ;;
@@ -181,7 +187,7 @@ determine_hostname() {
181
187
  }
182
188
 
183
189
  download_url() {
184
- if [ "$VERSION" = "master" ]; then
190
+ if [ "$VERSION" != "release" ]; then
185
191
  echo "$DOWNLOAD_URL_BASE/master/$1"
186
192
  else
187
193
  echo "$DOWNLOAD_URL_BASE/v$(installed_version)/$1"
@@ -192,48 +198,61 @@ installed_version() {
192
198
  $NAME --version | cut -d " " -f 2
193
199
  }
194
200
 
195
-
196
- install_rroonga() {
197
- # Install Rroonga globally from a public gem, because custom build
198
- # doesn't work as we expect for Droonga...
199
- if exist_command grndump; then
200
- local current_version=$(grndump -v | cut -d " " -f 2)
201
- local version_matcher=$(cat $NAME.gemspec | \
202
- grep rroonga | \
203
- cut -d "," -f 2 | \
204
- cut -d '"' -f 2)
205
- local compared_version=$(echo "$version_matcher" | \
206
- cut -d " " -f 2)
207
- local operator=$(echo "$version_matcher" | cut -d " " -f 1)
208
- local compare_result=$(ruby -e "puts('$current_version' $operator '$compared_version')")
209
- if [ "$compare_result" = "true" ]; then return 0; fi
210
- fi
211
- gem install rroonga --no-ri --no-rdoc
212
- }
213
-
214
- install_master() {
215
- gem install bundler --no-ri --no-rdoc
216
-
201
+ install_gem_from_repository() {
202
+ GEM_NAME=$1
203
+ GEM_REPOSITORY_URL=$2
217
204
  cd $TEMPDIR
218
205
 
219
- if [ -d $NAME ]
206
+ if [ -d $GEM_NAME ]
220
207
  then
221
- cd $NAME
222
- install_rroonga
208
+ cd $GEM_NAME
223
209
  git reset --hard
224
210
  git pull --rebase
211
+ git checkout master
225
212
  bundle update
226
213
  else
227
- git clone $REPOSITORY_URL
228
- cd $NAME
229
- install_rroonga
230
- bundle install
214
+ git clone $GEM_REPOSITORY_URL
215
+ cd $GEM_NAME
216
+ git checkout master
217
+ bundle install --path vendor/
231
218
  fi
232
219
  rm -rf pkg
233
220
  bundle exec rake build
234
221
  gem install "pkg/*.gem" --no-ri --no-rdoc
235
222
  }
236
223
 
224
+ install_from_repository() {
225
+ gem install bundler --no-ri --no-rdoc
226
+
227
+ if echo "$INSTALL_FROM_REPOSITORY" | grep "rroonga"
228
+ then
229
+ install_gem_from_repository rroonga $RROONGA_REPOSITORY_URL
230
+ install_gem_from_repository groonga-command $GROONGA_COMMAND_REPOSITORY_URL
231
+ install_gem_from_repository groonga-command-parser $GROONGA_COMMAND_PARSER_REPOSITORY_URL
232
+ else
233
+ rm -rf $TEMPDIR/rroonga
234
+ rm -rf $TEMPDIR/groonga-command
235
+ rm -rf $TEMPDIR/groonga-command-parser
236
+ fi
237
+
238
+ if echo "$INSTALL_FROM_REPOSITORY" | grep "client"
239
+ then
240
+ install_gem_from_repository droonga-client-ruby $DROONGA_CLIENT_RUBY_REPOSITORY_URL
241
+ else
242
+ rm -rf $TEMPDIR/droonga-client-ruby
243
+ fi
244
+
245
+
246
+ if echo "$INSTALL_FROM_REPOSITORY" | grep "drndump"
247
+ then
248
+ install_gem_from_repository drndump $DRNDUMP_REPOSITORY_URL
249
+ else
250
+ rm -rf $TEMPDIR/drndump
251
+ fi
252
+
253
+ install_gem_from_repository $NAME $REPOSITORY_URL
254
+ }
255
+
237
256
 
238
257
 
239
258
  # ====================== for Debian/Ubuntu ==========================
@@ -262,7 +281,7 @@ prepare_environment_in_debian() {
262
281
  apt-get install -y libgroonga-dev
263
282
  fi
264
283
 
265
- if [ "$VERSION" = "master" ]; then
284
+ if [ "$VERSION" != "release" ]; then
266
285
  apt-get install -y git
267
286
  fi
268
287
  }
@@ -297,7 +316,7 @@ prepare_environment_in_centos() {
297
316
  yum -y --enablerepo=groonga install groonga-devel
298
317
  fi
299
318
 
300
- if [ "$VERSION" = "master" ]; then
319
+ if [ "$VERSION" != "release" ]; then
301
320
  yum -y install git
302
321
  fi
303
322
  }
@@ -312,9 +331,9 @@ install() {
312
331
  prepare_environment_in_$PLATFORM
313
332
 
314
333
  echo ""
315
- if [ "$VERSION" = "master" ]; then
334
+ if [ "$VERSION" != "release" ]; then
316
335
  echo "Installing $NAME from the git repository..."
317
- install_master
336
+ install_from_repository
318
337
  else
319
338
  echo "Installing $NAME from RubyGems..."
320
339
  gem install droonga-engine --no-rdoc --no-ri
@@ -325,7 +344,7 @@ install() {
325
344
  exit 1
326
345
  fi
327
346
 
328
- curl -o $TEMPDIR/functions.sh $(download_url "install/$PLATFORM/functions.sh")
347
+ curl -s -o $TEMPDIR/functions.sh $(download_url "install/$PLATFORM/functions.sh")
329
348
  if ! source $TEMPDIR/functions.sh; then
330
349
  echo "ERROR: Failed to download post-installation script!"
331
350
  exit 1