flare-tools 0.5.0 → 0.6.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.
- data/.gitignore +1 -0
- data/History.txt +6 -0
- data/README.txt +6 -3
- data/lib/flare/entity/server.rb +3 -0
- data/lib/flare/tools.rb +1 -1
- data/lib/flare/tools/cli/master.rb +21 -3
- data/lib/flare/tools/cli/reconstruct.rb +8 -5
- data/lib/flare/tools/cli/slave.rb +17 -6
- data/lib/flare/tools/cli/stats.rb +21 -14
- data/test/system/flare_admin_test.rb +7 -4
- metadata +3 -3
data/.gitignore
CHANGED
data/History.txt
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
=== 0.6.0 / 2014-11-07
|
2
|
+
* Minor Enhancements
|
3
|
+
* Modify default options to safely
|
4
|
+
* Clean up the node before constructiong the master/slave node by default.
|
5
|
+
* Check redundancy of the partition before recontstructiong with --all option by default.
|
6
|
+
|
1
7
|
=== 0.5.0 / 2014-10-15
|
2
8
|
* Refactoring structures
|
3
9
|
* Refactoring.
|
data/README.txt
CHANGED
@@ -267,6 +267,7 @@ subcommands:
|
|
267
267
|
--force commit changes without confirmation
|
268
268
|
--retry=[COUNT] specify retry count (default:10)
|
269
269
|
--activate change node's state from ready to active
|
270
|
+
--without-clean don't clear datastore before construction
|
270
271
|
|
271
272
|
[balance] set the balance values of nodes.
|
272
273
|
Usage: flare-admin balance [hostname:port:balance] ...
|
@@ -326,7 +327,8 @@ subcommands:
|
|
326
327
|
Usage: flare-admin slave [hostname:port:balance:partition] ...
|
327
328
|
--force commit changes without confirmation
|
328
329
|
--retry=[COUNT] specify retry count(default:10)
|
329
|
-
--clean
|
330
|
+
--without-clean don't clear datastore before construction
|
331
|
+
--clean [obsolete] now slave command clear datastore before construction by default.
|
330
332
|
|
331
333
|
[list] show the list of nodes in a flare cluster.
|
332
334
|
Usage: flare-admin list
|
@@ -347,8 +349,9 @@ subcommands:
|
|
347
349
|
[reconstruct] reconstruct the database of nodes by copying.
|
348
350
|
Usage: flare-admin reconstruct [hostname:port] ...
|
349
351
|
--force commit changes without confirmation
|
350
|
-
--
|
351
|
-
--
|
352
|
+
--unsafe reconstruct a node safely
|
353
|
+
--safe [obsolete] now reconstruct a node safely by default
|
354
|
+
--retry=COUNT specify retry count (default:10)
|
352
355
|
--all reconstruct all nodes
|
353
356
|
|
354
357
|
== THANKS:
|
data/lib/flare/entity/server.rb
CHANGED
data/lib/flare/tools.rb
CHANGED
@@ -9,7 +9,7 @@ module Flare
|
|
9
9
|
# flare-tools module.
|
10
10
|
module Tools
|
11
11
|
# the version number of flare-tools
|
12
|
-
VERSION = '0.
|
12
|
+
VERSION = '0.6.0'
|
13
13
|
TITLE = "Flare-tools version #{VERSION} Copyright (C) GREE, Inc. 2011-2014"
|
14
14
|
autoload :Common, 'flare/tools/common'
|
15
15
|
autoload :Cluster, 'flare/tools/cluster'
|
@@ -30,8 +30,9 @@ module Flare
|
|
30
30
|
set_option_index_server
|
31
31
|
set_option_dry_run
|
32
32
|
set_option_force
|
33
|
-
@optp.on('--retry=COUNT',
|
34
|
-
@optp.on('--activate',
|
33
|
+
@optp.on('--retry=COUNT', "specify retry count (default:#{@retry})" ) {|v| @retry = v.to_i }
|
34
|
+
@optp.on('--activate', "change node's state from ready to active") { @activate = true }
|
35
|
+
@optp.on('--without-clean', "don't clear datastore before construction") { @without_clean = true }
|
35
36
|
end
|
36
37
|
|
37
38
|
def initialize
|
@@ -39,6 +40,7 @@ module Flare
|
|
39
40
|
@force = false
|
40
41
|
@retry = 10
|
41
42
|
@activate = false
|
43
|
+
@without_clean = false
|
42
44
|
end
|
43
45
|
|
44
46
|
def execute(config, args)
|
@@ -89,11 +91,27 @@ module Flare
|
|
89
91
|
info "no need to change the role of #{ipaddr}:#{port}."
|
90
92
|
elsif existing_master
|
91
93
|
info "the partiton already has a master #{existing_master}."
|
94
|
+
elsif node['role'] != 'proxy'
|
95
|
+
puts "#{nodekey} is not a proxy."
|
92
96
|
else
|
93
|
-
|
97
|
+
clean_notice_base = "\nitems stored in the node will be cleaned up (exec flush_all) before constructing it"
|
98
|
+
clean_notice = @without_clean ? clean_notice_base : ''
|
99
|
+
STDERR.print "making the node master (node=#{ipaddr}:#{port}, role=#{node['role']} -> #{role})#{clean_notice} (y/n): "
|
94
100
|
exec = interruptible {(gets.chomp.upcase == "Y")}
|
95
101
|
end
|
96
102
|
if exec && !@dry_run
|
103
|
+
unless @without_clean
|
104
|
+
resp = false
|
105
|
+
Flare::Tools::Node.open(hostname, port, @timeout) do |n|
|
106
|
+
resp = n.flush_all
|
107
|
+
end
|
108
|
+
unless resp
|
109
|
+
STDERR.print "executing flush_all failed."
|
110
|
+
return S_NG
|
111
|
+
end
|
112
|
+
puts "executed flush_all command before constructing the master node."
|
113
|
+
end
|
114
|
+
|
97
115
|
nretry = 0
|
98
116
|
resp = false
|
99
117
|
while resp == false && nretry < @retry
|
@@ -31,15 +31,18 @@ module Flare
|
|
31
31
|
set_option_index_server
|
32
32
|
set_option_dry_run
|
33
33
|
set_option_force
|
34
|
-
@optp.on('--
|
35
|
-
@optp.on('--
|
36
|
-
|
34
|
+
@optp.on('--unsafe', "reconstruct a node safely" ) { @unsafe = true }
|
35
|
+
@optp.on('--safe', "[obsolete] now reconstruct a node safely by default") do
|
36
|
+
# do nothing
|
37
|
+
end
|
38
|
+
@optp.on('--retry=COUNT', "specify retry count (default:#{@retry})") {|v| @retry = v.to_i }
|
39
|
+
@optp.on('--all', "reconstruct all nodes" ) { @all = true }
|
37
40
|
end
|
38
41
|
|
39
42
|
def initialize
|
40
43
|
super
|
41
44
|
@force = false
|
42
|
-
@
|
45
|
+
@unsafe = false
|
43
46
|
@retry = 10
|
44
47
|
@all = false
|
45
48
|
end
|
@@ -88,7 +91,7 @@ module Flare
|
|
88
91
|
next
|
89
92
|
end
|
90
93
|
is_safe = cluster.safely_reconstructable? nodekey
|
91
|
-
if
|
94
|
+
if !@unsafe && !is_safe
|
92
95
|
puts "The partition needs one more slave to reconstruct #{nodekey} safely."
|
93
96
|
status = S_NG
|
94
97
|
next
|
@@ -33,15 +33,18 @@ module Flare
|
|
33
33
|
set_option_index_server
|
34
34
|
set_option_dry_run
|
35
35
|
set_option_force
|
36
|
-
@optp.on('--retry=COUNT',
|
37
|
-
@optp.on('--clean',
|
36
|
+
@optp.on('--retry=COUNT', "specify retry count(default:#{@retry})") {|v| @retry = v.to_i}
|
37
|
+
@optp.on('--without-clean', "don't clear datastore before construction") { @without_clean = true }
|
38
|
+
@optp.on('--clean', '[obsolete] now slave command clear datastore before construction by default.') do
|
39
|
+
# do nothing
|
40
|
+
end
|
38
41
|
end
|
39
42
|
|
40
43
|
def initialize
|
41
44
|
super
|
42
45
|
@force = false
|
43
46
|
@retry = DefaultRetry
|
44
|
-
@
|
47
|
+
@without_clean = false
|
45
48
|
end
|
46
49
|
|
47
50
|
def execute(config, args)
|
@@ -77,16 +80,24 @@ module Flare
|
|
77
80
|
|
78
81
|
exec = @force
|
79
82
|
unless exec
|
80
|
-
|
83
|
+
clean_notice_base = "\nitems stored in the node will be cleaned up (exec flush_all) before constructing it"
|
84
|
+
clean_notice = @without_clean ? clean_notice_base : ''
|
85
|
+
STDERR.print "making node slave (node=#{nodekey}, role=#{node['role']} -> slave)#{clean_notice} (y/n): "
|
81
86
|
interruptible do
|
82
87
|
exec = true if gets.chomp.upcase == "Y"
|
83
88
|
end
|
84
89
|
end
|
85
90
|
if exec && !@dry_run
|
86
|
-
|
91
|
+
unless @without_clean
|
92
|
+
resp = false
|
87
93
|
Flare::Tools::Node.open(hostname, port, @timeout) do |n|
|
88
|
-
n.flush_all
|
94
|
+
resp = n.flush_all
|
95
|
+
end
|
96
|
+
unless resp
|
97
|
+
STDERR.print "executing flush_all failed."
|
98
|
+
return S_NG
|
89
99
|
end
|
100
|
+
puts "executed flush_all command before constructing the slave node."
|
90
101
|
end
|
91
102
|
|
92
103
|
nretry = 0
|
@@ -126,18 +126,13 @@ module Flare
|
|
126
126
|
nodes.each do |k, n|
|
127
127
|
max_nodekey_length = k.length if k.length > max_nodekey_length
|
128
128
|
end
|
129
|
-
|
130
|
-
add_header_to_table(table, header_configs)
|
131
|
-
nodes.each do |k, node|
|
132
|
-
stats_data = queue[k].pop
|
133
|
-
next if (args.size > 0 && !args.include?(k))
|
134
|
-
behind = (threads.has_key?(k) || threads[k].has_key?('behind')) ? threads[k]['behind'] : "-"
|
135
|
-
r = record(stats_data, node, behind, query_prev, k)
|
136
|
-
add_record_to_table(table, header_configs, r)
|
137
|
-
end
|
129
|
+
r = records(args, nodes, queue, threads, query_prev)
|
138
130
|
interruptible {
|
139
131
|
wait_for_stats
|
140
132
|
}
|
133
|
+
table = Table.new
|
134
|
+
add_header_to_table(table, header_configs)
|
135
|
+
add_records_to_table(table, header_configs, r)
|
141
136
|
puts table.prettify
|
142
137
|
end
|
143
138
|
s.close
|
@@ -235,12 +230,24 @@ module Flare
|
|
235
230
|
table.add_row(row)
|
236
231
|
end
|
237
232
|
|
238
|
-
def
|
239
|
-
|
240
|
-
|
241
|
-
|
233
|
+
def add_records_to_table(table, header_configs, records)
|
234
|
+
records.each do |record|
|
235
|
+
row = Row.new(:separator => @delimiter)
|
236
|
+
header_configs.each_with_index do |header_config, index|
|
237
|
+
row.add_column(Column.new(record[index], header_config[1]))
|
238
|
+
end
|
239
|
+
table.add_row(row)
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
# You can override this method to extend stats infos.
|
244
|
+
def records(args, nodes, queue, threads, query_prev)
|
245
|
+
nodes.map do |k, node|
|
246
|
+
stats_data = queue[k].pop
|
247
|
+
next if (args.size > 0 && !args.include?(k))
|
248
|
+
behind = (threads.has_key?(k) || threads[k].has_key?('behind')) ? threads[k]['behind'] : "-"
|
249
|
+
record(stats_data, node, behind, query_prev, k)
|
242
250
|
end
|
243
|
-
table.add_row(row)
|
244
251
|
end
|
245
252
|
|
246
253
|
# You can override this method to extend stats infos.
|
@@ -159,10 +159,13 @@ class FlareAdminTest < Test::Unit::TestCase
|
|
159
159
|
p = @datanodes[0].port
|
160
160
|
flare_admin_with_yes "master --index-server=#{@indexname}:#{@indexport} #{h}:#{p}:1:0"
|
161
161
|
assert_equal(S_OK, $?.exitstatus)
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
162
|
+
[1, 2].each do |i|
|
163
|
+
assert_equal(S_OK, $?.exitstatus)
|
164
|
+
h = @datanodes[i].hostname
|
165
|
+
p = @datanodes[i].port
|
166
|
+
flare_admin_with_yes "slave --index-server=#{@indexname}:#{@indexport} #{h}:#{p}:1:0"
|
167
|
+
assert_equal(S_OK, $?.exitstatus)
|
168
|
+
end
|
166
169
|
flare_admin_with_yes "reconstruct --index-server=#{@indexname}:#{@indexport} --all"
|
167
170
|
assert_equal(S_OK, $?.exitstatus)
|
168
171
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flare-tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-
|
13
|
+
date: 2014-11-07 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: log4r
|
@@ -222,7 +222,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
222
222
|
version: '0'
|
223
223
|
segments:
|
224
224
|
- 0
|
225
|
-
hash:
|
225
|
+
hash: 4173589925550821460
|
226
226
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
227
227
|
none: false
|
228
228
|
requirements:
|