droonga-engine 1.1.0 → 1.1.1
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.
- checksums.yaml +4 -4
- data/.travis.yml +2 -1
- data/Rakefile +6 -0
- data/bin/droonga-engine-absorb-data +14 -14
- data/bin/droonga-engine-catalog-generate +24 -12
- data/bin/droonga-engine-catalog-modify +13 -7
- data/bin/droonga-engine-join +8 -8
- data/bin/droonga-engine-set-role +1 -1
- data/bin/droonga-engine-unjoin +2 -2
- data/lib/droonga/address.rb +3 -0
- data/lib/droonga/cluster.rb +16 -10
- data/lib/droonga/command/droonga_engine_service.rb +5 -2
- data/lib/droonga/command/remote_command_base.rb +3 -3
- data/lib/droonga/distributed_command_planner.rb +11 -1
- data/lib/droonga/engine.rb +12 -11
- data/lib/droonga/engine/version.rb +2 -2
- data/lib/droonga/engine_node.rb +28 -28
- data/lib/droonga/engine_state.rb +41 -36
- data/lib/droonga/forward_buffer.rb +21 -10
- data/lib/droonga/node_role.rb +2 -0
- data/lib/droonga/plugins/groonga/select.rb +3 -0
- data/lib/droonga/plugins/search.rb +3 -1
- data/lib/droonga/plugins/search/distributed_search_planner.rb +17 -5
- data/lib/droonga/plugins/system/statistics.rb +1 -0
- data/lib/droonga/searcher.rb +13 -4
- data/test/command/config/single_slice/catalog.json +38 -0
- data/test/command/config/single_slice/droonga-engine.yaml +4 -0
- data/test/command/run-test.rb +3 -2
- data/test/command/suite/catalog/fetch.expected.single_slice +50 -0
- data/test/command/suite/dump/column/index.expected.single_slice +86 -0
- data/test/command/suite/dump/column/scalar.expected.single_slice +52 -0
- data/test/command/suite/dump/column/vector.expected.single_slice +55 -0
- data/test/command/suite/dump/record/scalar.expected.single_slice +52 -0
- data/test/command/suite/dump/record/vector/reference.expected.single_slice +117 -0
- data/test/command/suite/dump/table/array.expected.single_slice +39 -0
- data/test/command/suite/dump/table/double_array_trie.expected.single_slice +40 -0
- data/test/command/suite/dump/table/hash.expected.single_slice +40 -0
- data/test/command/suite/dump/table/patricia_trie.expected.single_slice +40 -0
- data/test/command/suite/message/error/missing-dataset.test +3 -0
- data/test/command/suite/search/condition/query/nonexistent_column.expected.single_slice +26 -0
- data/test/command/suite/search/condition/query/syntax_error.expected.single_slice +26 -0
- data/test/command/suite/search/error/unknown-source.expected.single_slice +28 -0
- data/test/command/suite/search/output/attributes/invalid.expected.single_slice +24 -0
- data/test/command/suite/system/absorb-data/records.catalog.json.single_slice +44 -0
- data/test/command/suite/system/absorb-data/records.expected.single_slice +32 -0
- data/test/command/suite/system/statistics/object/count/per-volume/empty.test +1 -0
- data/test/command/suite/system/statistics/object/count/record.expected.single_slice +11 -0
- data/test/command/suite/system/statistics/object/count/schema.expected.single_slice +11 -0
- data/test/unit/catalog/test_generator.rb +3 -2
- data/test/unit/helper.rb +2 -1
- data/test/unit/helper/stub_serf.rb +28 -0
- data/test/unit/plugins/system/statistics/test_object_count.rb +135 -0
- data/test/unit/plugins/system/statistics/test_object_count_per_volume.rb +149 -0
- data/test/unit/plugins/test_basic.rb +0 -406
- data/test/unit/test_address.rb +111 -10
- data/test/unit/test_cluster.rb +232 -0
- data/test/unit/test_differ.rb +49 -0
- data/test/unit/test_engine_node.rb +556 -0
- data/test/unit/test_engine_state.rb +151 -0
- data/test/unit/test_forward_buffer.rb +106 -0
- data/test/unit/test_node_name.rb +160 -0
- data/test/unit/test_node_role.rb +53 -0
- data/test/unit/test_reducer.rb +525 -0
- metadata +111 -49
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 695a658bbd48a05e64b9e53f2764549212c63786
|
4
|
+
data.tar.gz: 799ed768d48b6e49150fa63ca4ccc7f956837495
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4141f7a2c89b0cc5558ea24fe11a52c6aa4ea93bf323065866befabc32ca2b9060f72dc3b5a4a5c9ef5e8204027d2e67df0ffbea5612011a414caee7d7a2a07
|
7
|
+
data.tar.gz: 50a6459b3f7db24bdc112536f88aac95c6b6e1c69423293135fe03d06a3cde96a686b54ffb112517bfc6aa6e2a9979d36f66999c0cfa4c78c2c71fbb466d52e0
|
data/.travis.yml
CHANGED
data/Rakefile
CHANGED
@@ -50,6 +50,11 @@ namespace :test do
|
|
50
50
|
run_command_test
|
51
51
|
end
|
52
52
|
|
53
|
+
desc "Run command test: single slice"
|
54
|
+
task :single_slice do
|
55
|
+
run_command_test("--config", "single_slice")
|
56
|
+
end
|
57
|
+
|
53
58
|
desc "Run command test: version1"
|
54
59
|
task :version1 do
|
55
60
|
run_command_test("--config", "version1")
|
@@ -61,6 +66,7 @@ desc "Run test"
|
|
61
66
|
task :test => [
|
62
67
|
"test:unit",
|
63
68
|
"test:command:default",
|
69
|
+
"test:command:single_slice",
|
64
70
|
"test:command:version1",
|
65
71
|
]
|
66
72
|
|
@@ -83,46 +83,46 @@ module Droonga
|
|
83
83
|
parser.version = Engine::VERSION
|
84
84
|
|
85
85
|
parser.separator("")
|
86
|
-
parser.separator("Destination
|
86
|
+
parser.separator("Destination:")
|
87
87
|
parser.on("--host=HOST",
|
88
|
-
"Host name of the destination node.") do |host|
|
88
|
+
"Host name of the destination engine node to copy data.") do |host|
|
89
89
|
options.host = host
|
90
90
|
end
|
91
91
|
parser.on("--port=PORT", Integer,
|
92
|
-
"Port number
|
92
|
+
"Port number to communicate with the destination engine node.",
|
93
93
|
"(#{options.port})") do |port|
|
94
94
|
options.port = port
|
95
95
|
end
|
96
96
|
parser.on("--tag=TAG", Integer,
|
97
|
-
"Tag name
|
97
|
+
"Tag name to communicate with the destination engine node.",
|
98
98
|
"(#{options.tag})") do |tag|
|
99
99
|
options.tag = tag
|
100
100
|
end
|
101
101
|
parser.on("--dataset=DATASET",
|
102
|
-
"Name of the destination dataset.",
|
102
|
+
"Name of the destination dataset for copying data.",
|
103
103
|
"(#{options.dataset})") do |dataset|
|
104
104
|
options.dataset = dataset
|
105
105
|
end
|
106
106
|
|
107
107
|
parser.separator("")
|
108
|
-
parser.separator("Source
|
108
|
+
parser.separator("Source:")
|
109
109
|
parser.on("--source-host=HOST",
|
110
|
-
"Host name of the
|
110
|
+
"Host name of the soruce engine node to copy data.",
|
111
111
|
"(#{options.source_host})") do |host|
|
112
112
|
options.source_host = host
|
113
113
|
end
|
114
114
|
parser.on("--source-port=PORT", Integer,
|
115
|
-
"Port number
|
115
|
+
"Port number to communicate with the soruce engine node.",
|
116
116
|
"(#{options.source_port})") do |host|
|
117
117
|
options.source_host = host
|
118
118
|
end
|
119
119
|
parser.on("--source-tag=TAG",
|
120
|
-
"Tag name
|
120
|
+
"Tag name to communicate with the soruce engine node.",
|
121
121
|
"(#{options.source_tag})") do |tag|
|
122
122
|
options.source_tag = tag
|
123
123
|
end
|
124
124
|
parser.on("--source-dataset=DATASET",
|
125
|
-
"Name of the
|
125
|
+
"Name of the soruce dataset for copying data.",
|
126
126
|
"(#{options.source_dataset})") do |dataset|
|
127
127
|
options.source_dataset = dataset
|
128
128
|
end
|
@@ -130,7 +130,7 @@ module Droonga
|
|
130
130
|
parser.separator("")
|
131
131
|
parser.separator("Connection:")
|
132
132
|
parser.on("--receiver-host=HOST",
|
133
|
-
"Host name of this
|
133
|
+
"Host name of the computer you are running this command.",
|
134
134
|
"(#{options.receiver_host})") do |host|
|
135
135
|
options.receiver_host = host
|
136
136
|
end
|
@@ -138,18 +138,18 @@ module Droonga
|
|
138
138
|
parser.separator("")
|
139
139
|
parser.separator("Miscellaneous:")
|
140
140
|
parser.on("--records-per-second=N", Integer,
|
141
|
-
"Maximum number of records
|
141
|
+
"Maximum number of records to be copied per one second.",
|
142
142
|
"'#{Client::RateLimiter::NO_LIMIT}' means no limit.",
|
143
143
|
"(#{options.messages_per_second})") do |n|
|
144
144
|
options.messages_per_second = n
|
145
145
|
end
|
146
146
|
parser.on("--progress-interval-seconds=N", Integer,
|
147
|
-
"Interval seconds to report progress.",
|
147
|
+
"Interval seconds to report progress of data copying.",
|
148
148
|
"(#{options.progress_interval_seconds})") do |n|
|
149
149
|
options.progress_interval_seconds = n
|
150
150
|
end
|
151
151
|
parser.on("--[no-]verbose",
|
152
|
-
"Output details for internal operations.",
|
152
|
+
"Output details for internal operations or not.",
|
153
153
|
"(#{options.verbose})") do |verbose|
|
154
154
|
options.verbose = verbose
|
155
155
|
end
|
@@ -43,59 +43,71 @@ end
|
|
43
43
|
parser = OptionParser.new
|
44
44
|
parser.version = Droonga::Engine::VERSION
|
45
45
|
parser.on("--output=PATH",
|
46
|
-
"
|
46
|
+
"The output path of generated catalog.json to be saved as.",
|
47
47
|
"\"-\" means the standard output.",
|
48
|
+
"Any existing file at the specified path will be overwritten without confirmation.",
|
48
49
|
"(#{options.output_path})") do |path|
|
49
50
|
options.output_path = path
|
50
51
|
end
|
51
52
|
parser.on("--dataset=NAME",
|
52
|
-
"
|
53
|
-
"
|
53
|
+
"The name of a new dataset.",
|
54
|
+
"This can be specified multiple times to define multiple datasets.",
|
54
55
|
"(#{Droonga::Catalog::Generator::DEFAULT_DATASET})") do |name|
|
55
56
|
current_dataset = datasets[name] = {}
|
56
57
|
end
|
57
58
|
parser.on("--n-workers=N", Integer,
|
58
|
-
"
|
59
|
+
"Number of workers for each volume in the dataset ",
|
60
|
+
"specified by the preceding --dataset option.",
|
59
61
|
"(#{Droonga::Catalog::Generator::DEFAULT_N_WORKERS})") do |n|
|
60
62
|
current_dataset[:n_workers] = n
|
61
63
|
end
|
62
64
|
parser.on("--hosts=NAME1,NAME2,...", Array,
|
63
|
-
"
|
65
|
+
"Host names of engine nodes to be used as replicas in the dataset ",
|
66
|
+
"specified by the preceding --dataset option.",
|
64
67
|
"(#{Droonga::Catalog::Generator::DEFAULT_HOSTS.join(",")})") do |hosts|
|
65
68
|
current_dataset[:hosts] = hosts
|
66
69
|
end
|
67
70
|
parser.on("--port=PORT", Integer,
|
68
|
-
"
|
71
|
+
"Port number to communicate with engine nodes in the dataset ",
|
72
|
+
"specified by the preceding --dataset option.",
|
69
73
|
"(#{Droonga::Catalog::Generator::DEFAULT_PORT})") do |port|
|
70
74
|
current_dataset[:port] = port
|
71
75
|
end
|
72
76
|
parser.on("--tag=TAG",
|
73
|
-
"
|
77
|
+
"Tag name to communicate with engine nodes in the dataset ",
|
78
|
+
"specified by the preceding --dataset option.",
|
74
79
|
"(#{Droonga::Catalog::Generator::DEFAULT_TAG})") do |tag|
|
75
80
|
current_dataset[:tag] = tag
|
76
81
|
end
|
77
82
|
parser.on("--n-slices=N", Integer,
|
78
|
-
"
|
83
|
+
"Number of slices for each replica in the dataset ",
|
84
|
+
"specified by the preceding --dataset option.",
|
79
85
|
"(#{Droonga::Catalog::Generator::DEFAULT_N_SLICES})") do |n|
|
80
86
|
current_dataset[:n_slices] = n
|
81
87
|
end
|
82
88
|
parser.on("--plugins=PLUGIN1,PLUGIN2,...", Array,
|
83
|
-
"
|
89
|
+
"Plugin names activated for the dataset ",
|
90
|
+
"specified by the preceding --dataset option.",
|
84
91
|
"(#{Droonga::Catalog::Generator::DEFAULT_PLUGINS.join(",")})") do |plugins|
|
85
92
|
current_dataset[:plugins] = plugins
|
86
93
|
end
|
87
94
|
parser.on("--schema=PATH",
|
88
|
-
"
|
95
|
+
"The path to a JSON file including schema definition for the dataset ",
|
96
|
+
"specified by the preceding --dataset option.") do |path|
|
89
97
|
File.open(path) do |input|
|
90
98
|
current_dataset[:schema] = JSON.parse(input.read)
|
91
99
|
end
|
92
100
|
end
|
93
101
|
parser.on("--fact=TABLE",
|
94
|
-
"
|
102
|
+
"Name of the fact table in the dataset ",
|
103
|
+
"specified by the preceding --dataset option.") do |table|
|
95
104
|
current_dataset[:fact] = table
|
96
105
|
end
|
97
106
|
parser.on("--replicas=PATH",
|
98
|
-
"
|
107
|
+
"The path to a JSON file including replicas definition for the dataset ",
|
108
|
+
"specified by the preceding --dataset option.",
|
109
|
+
"If this option is used, other options to define replicas in the dataset ",
|
110
|
+
"(--hosts, --port, --tag and --n-slices) are ignored.") do |path|
|
99
111
|
File.open(path) do |input|
|
100
112
|
current_dataset[:replicas] = JSON.parse(input.read)
|
101
113
|
end
|
@@ -46,14 +46,15 @@ end
|
|
46
46
|
parser = OptionParser.new
|
47
47
|
parser.version = Droonga::Engine::VERSION
|
48
48
|
parser.on("--source=PATH",
|
49
|
-
"
|
49
|
+
"The path to the catalog.json to be modified.",
|
50
50
|
"\"-\" means the standard input.",
|
51
51
|
"(#{options.source_path})") do |path|
|
52
52
|
options.source_path = path
|
53
53
|
end
|
54
54
|
parser.on("--output=PATH",
|
55
|
-
"
|
55
|
+
"The output path of modified catalog.json to be saved as.",
|
56
56
|
"\"-\" means the standard output.",
|
57
|
+
"Any existing file at the specified path will be overwritten without confirmation.",
|
57
58
|
"(#{options.output_path})") do |path|
|
58
59
|
options.output_path = path
|
59
60
|
end
|
@@ -63,21 +64,26 @@ parser.on("--[no-]update",
|
|
63
64
|
options.update = update
|
64
65
|
end
|
65
66
|
parser.on("--dataset=NAME",
|
66
|
-
"
|
67
|
-
"
|
67
|
+
"The name of an existing dataset to be modified.",
|
68
|
+
"This can be specified multiple times to modify multiple datasets.",
|
68
69
|
"(#{Droonga::Catalog::Generator::DEFAULT_DATASET})") do |name|
|
69
70
|
current_dataset = datasets[name] = {}
|
70
71
|
end
|
71
72
|
parser.on("--replica-hosts=NAME1,NAME2,...", Array,
|
72
|
-
"
|
73
|
+
"Host names of engine nodes to be used as replicas in the dataset ",
|
74
|
+
"specified by the preceding --dataset option.",
|
75
|
+
"If you specify this option, all existing replica nodes ",
|
76
|
+
"defined in the dataset are replaced.") do |hosts|
|
73
77
|
current_dataset[:replica_hosts] = hosts
|
74
78
|
end
|
75
79
|
parser.on("--add-replica-hosts=NAME1,NAME2,...", Array,
|
76
|
-
"
|
80
|
+
"Host names of engine nodes to be added to the cluster as replicas, ",
|
81
|
+
"in the dataset specified by the preceding --dataset option.") do |hosts|
|
77
82
|
current_dataset[:add_replica_hosts] = hosts
|
78
83
|
end
|
79
84
|
parser.on("--remove-replica-hosts=NAME1,NAME2,...", Array,
|
80
|
-
"
|
85
|
+
"Host names of engine nodes to be removed from the cluster, ",
|
86
|
+
"in the dataset specified by the preceding --dataset option.") do |hosts|
|
81
87
|
current_dataset[:remove_replica_hosts] = hosts
|
82
88
|
end
|
83
89
|
parser.parse!(ARGV)
|
data/bin/droonga-engine-join
CHANGED
@@ -92,7 +92,7 @@ module Droonga
|
|
92
92
|
private
|
93
93
|
def parse_options
|
94
94
|
options = Slop.parse(:help => true) do |option|
|
95
|
-
option.on("no-copy", "Don't copy data from the source
|
95
|
+
option.on("no-copy", "Don't copy data from the source node.",
|
96
96
|
:default => false)
|
97
97
|
|
98
98
|
option.separator("Target:")
|
@@ -100,33 +100,33 @@ module Droonga
|
|
100
100
|
"Host name of the new node to be joined.",
|
101
101
|
:required => true)
|
102
102
|
option.on("replica-source-host=",
|
103
|
-
"Host name of the soruce node in the cluster to
|
103
|
+
"Host name of the soruce node in the cluster to join.",
|
104
104
|
:required => true)
|
105
105
|
|
106
106
|
option.on(:port=,
|
107
|
-
"Port number
|
107
|
+
"Port number to communicate with engine nodes.",
|
108
108
|
:as => Integer,
|
109
109
|
:default => NodeName::DEFAULT_PORT)
|
110
110
|
option.on(:tag=,
|
111
|
-
"Tag name
|
111
|
+
"Tag name to communicate with engine nodes.",
|
112
112
|
:default => NodeName::DEFAULT_TAG)
|
113
113
|
option.on(:dataset=,
|
114
|
-
"Dataset name
|
114
|
+
"Dataset name the node is going to join as a replica in.",
|
115
115
|
:default => Catalog::Dataset::DEFAULT_NAME)
|
116
116
|
|
117
117
|
option.separator("Connections:")
|
118
118
|
option.on("receiver-host=",
|
119
|
-
"Host name of this
|
119
|
+
"Host name of the computer you are running this command.",
|
120
120
|
:default => Socket.gethostname)
|
121
121
|
|
122
122
|
option.separator("Miscellaneous:")
|
123
123
|
option.on("records-per-second=",
|
124
|
-
"Maximum number of records
|
124
|
+
"Maximum number of records to be copied per one second. " +
|
125
125
|
"'#{Client::RateLimiter::NO_LIMIT}' means no limit.",
|
126
126
|
:as => Integer,
|
127
127
|
:default => DataAbsorberClient::DEFAULT_MESSAGES_PER_SECOND)
|
128
128
|
option.on("progress-interval-seconds=",
|
129
|
-
"Interval seconds to report progress.",
|
129
|
+
"Interval seconds to report progress of data copying.",
|
130
130
|
:as => Integer,
|
131
131
|
:default => DataAbsorberClient::DEFAULT_PROGRESS_INTERVAL_SECONDS)
|
132
132
|
option.on(:verbose, "Output details for internal operations.",
|
data/bin/droonga-engine-set-role
CHANGED
data/bin/droonga-engine-unjoin
CHANGED
@@ -31,10 +31,10 @@ module Droonga
|
|
31
31
|
def run
|
32
32
|
parse_options do |option|
|
33
33
|
option.on("receiver-host=",
|
34
|
-
"Host name of this
|
34
|
+
"Host name of the computer you are running this command.",
|
35
35
|
:default => Socket.gethostname)
|
36
36
|
option.on(:dataset=,
|
37
|
-
"Dataset name
|
37
|
+
"Dataset name the node is going to be removed from.",
|
38
38
|
:default => Catalog::Dataset::DEFAULT_NAME)
|
39
39
|
end
|
40
40
|
|
data/lib/droonga/address.rb
CHANGED
data/lib/droonga/cluster.rb
CHANGED
@@ -17,6 +17,7 @@ require "droonga/loggable"
|
|
17
17
|
require "droonga/changable"
|
18
18
|
require "droonga/path"
|
19
19
|
require "droonga/file_observer"
|
20
|
+
require "droonga/address"
|
20
21
|
require "droonga/engine_node"
|
21
22
|
require "droonga/differ"
|
22
23
|
|
@@ -63,12 +64,15 @@ module Droonga
|
|
63
64
|
|
64
65
|
attr_accessor :catalog
|
65
66
|
|
66
|
-
def initialize(
|
67
|
-
@loop = loop
|
67
|
+
def initialize(params)
|
68
|
+
@loop = params[:loop]
|
68
69
|
|
69
70
|
@params = params
|
70
71
|
@catalog = params[:catalog]
|
71
|
-
@state =
|
72
|
+
@state = params[:state] || {}
|
73
|
+
|
74
|
+
@engine_nodes = nil
|
75
|
+
@on_change = nil
|
72
76
|
|
73
77
|
reload
|
74
78
|
end
|
@@ -158,7 +162,7 @@ module Droonga
|
|
158
162
|
|
159
163
|
def forward(message, destination)
|
160
164
|
receiver = destination["to"]
|
161
|
-
receiver_node_name =
|
165
|
+
receiver_node_name = Address.parse(receiver).node
|
162
166
|
raise NotStartedYet.new unless @engine_nodes
|
163
167
|
@engine_nodes.each do |node|
|
164
168
|
if node.name == receiver_node_name
|
@@ -215,21 +219,23 @@ module Droonga
|
|
215
219
|
end
|
216
220
|
|
217
221
|
def all_node_names
|
218
|
-
raise NoCatalogLoaded.new unless @catalog
|
219
222
|
@catalog.all_nodes
|
220
223
|
end
|
221
224
|
|
222
225
|
def create_engine_nodes
|
223
226
|
all_node_names.collect do |name|
|
224
227
|
node_state = @state[name] || {}
|
225
|
-
|
226
|
-
|
227
|
-
node_state,
|
228
|
-
:auto_close_timeout =>
|
229
|
-
@params[:internal_connection_lifetime])
|
228
|
+
create_engine_node(:name => name,
|
229
|
+
:state => node_state)
|
230
230
|
end
|
231
231
|
end
|
232
232
|
|
233
|
+
def create_engine_node(params)
|
234
|
+
EngineNode.new(params.merge(:loop => @loop,
|
235
|
+
:auto_close_timeout =>
|
236
|
+
@params[:internal_connection_lifetime]))
|
237
|
+
end
|
238
|
+
|
233
239
|
def log_tag
|
234
240
|
"cluster_state"
|
235
241
|
end
|
@@ -157,8 +157,11 @@ module Droonga
|
|
157
157
|
end
|
158
158
|
|
159
159
|
def run_engine
|
160
|
-
@engine = Engine.new(
|
161
|
-
:
|
160
|
+
@engine = Engine.new(:loop => @loop,
|
161
|
+
:name => @engine_name,
|
162
|
+
:internal_name => @internal_engine_name,
|
163
|
+
:internal_connection_lifetime =>
|
164
|
+
@internal_connection_lifetime)
|
162
165
|
@engine.on_ready = lambda do
|
163
166
|
@worker_process_agent.ready
|
164
167
|
end
|
@@ -31,14 +31,14 @@ module Droonga
|
|
31
31
|
|
32
32
|
option.separator("Connections:")
|
33
33
|
option.on(:host=,
|
34
|
-
"Host name of the
|
34
|
+
"Host name of the node to be operated.",
|
35
35
|
:required => true)
|
36
36
|
option.on(:port=,
|
37
|
-
"Port number
|
37
|
+
"Port number to communicate with the engine node.",
|
38
38
|
:as => Integer,
|
39
39
|
:default => NodeName::DEFAULT_PORT)
|
40
40
|
option.on(:tag=,
|
41
|
-
"Tag name
|
41
|
+
"Tag name to communicate with the engine node.",
|
42
42
|
:default => NodeName::DEFAULT_TAG)
|
43
43
|
|
44
44
|
option.separator("Miscellaneous:")
|