droonga-engine 1.0.9 → 1.1.0

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 (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