flare-tools 0.4.5.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. data/.gitignore +24 -0
  2. data/.travis.yml +15 -0
  3. data/Gemfile +9 -0
  4. data/Gemfile.lock +28 -0
  5. data/History.txt +5 -0
  6. data/Makefile +25 -0
  7. data/README.txt +2 -2
  8. data/Rakefile +36 -34
  9. data/flare-tools.gemspec +26 -0
  10. data/lib/flare/entity/server.rb +4 -0
  11. data/lib/flare/tools.rb +3 -3
  12. data/lib/flare/tools/cli.rb +1 -0
  13. data/lib/flare/tools/cli/activate.rb +19 -13
  14. data/lib/flare/tools/cli/balance.rb +15 -8
  15. data/lib/flare/tools/cli/deploy.rb +53 -49
  16. data/lib/flare/tools/cli/dispatch.rb +101 -0
  17. data/lib/flare/tools/cli/down.rb +19 -14
  18. data/lib/flare/tools/cli/dump.rb +19 -14
  19. data/lib/flare/tools/cli/dumpkey.rb +21 -16
  20. data/lib/flare/tools/cli/flare_admin.rb +16 -72
  21. data/lib/flare/tools/cli/flare_argv0.rb +7 -51
  22. data/lib/flare/tools/cli/index.rb +10 -7
  23. data/lib/flare/tools/cli/index_server_config.rb +94 -0
  24. data/lib/flare/tools/cli/list.rb +14 -12
  25. data/lib/flare/tools/cli/master.rb +18 -12
  26. data/lib/flare/tools/cli/option.rb +55 -0
  27. data/lib/flare/tools/cli/part.rb +13 -12
  28. data/lib/flare/tools/cli/ping.rb +11 -13
  29. data/lib/flare/tools/cli/reconstruct.rb +22 -15
  30. data/lib/flare/tools/cli/remove.rb +20 -17
  31. data/lib/flare/tools/cli/restore.rb +20 -20
  32. data/lib/flare/tools/cli/slave.rb +20 -14
  33. data/lib/flare/tools/cli/stats.rb +171 -118
  34. data/lib/flare/tools/cli/sub_command.rb +16 -5
  35. data/lib/flare/tools/cli/summary.rb +12 -10
  36. data/lib/flare/tools/cli/threads.rb +15 -9
  37. data/lib/flare/tools/cli/verify.rb +20 -18
  38. data/lib/flare/tools/cluster.rb +3 -2
  39. data/lib/flare/util/constant.rb +3 -0
  40. data/lib/flare/util/pretty_table.rb +8 -0
  41. data/lib/flare/util/pretty_table/column.rb +41 -0
  42. data/lib/flare/util/pretty_table/row.rb +29 -0
  43. data/lib/flare/util/pretty_table/table.rb +37 -0
  44. data/package/Rakefile +44 -0
  45. data/package/flare-tools/Makefile +23 -0
  46. data/package/flare-tools/debian/changelog +135 -0
  47. data/package/flare-tools/debian/compat +1 -0
  48. data/package/flare-tools/debian/control +20 -0
  49. data/package/flare-tools/debian/copyright +35 -0
  50. data/package/flare-tools/debian/dirs +2 -0
  51. data/{.gemtest → package/flare-tools/debian/docs} +0 -0
  52. data/package/flare-tools/debian/rules +125 -0
  53. data/test/{test/experimental → experimental}/cache_test.rb +0 -0
  54. data/test/{test/experimental → experimental}/key_distribution_test.rb +0 -0
  55. data/test/{test/experimental → experimental}/keychecker_test.rb +0 -0
  56. data/test/{test/experimental → experimental}/list_test.rb +0 -0
  57. data/test/{test/extra → extra}/replication_test.rb +0 -0
  58. data/test/{test/integration → integration}/cli_test.rb +9 -7
  59. data/test/{test/integration → integration}/dump_expired_test.rb +4 -3
  60. data/test/{test/integration → integration}/dump_test.rb +5 -5
  61. data/test/{test/integration → integration}/index_server_test.rb +1 -1
  62. data/test/{test/integration → integration}/node_test.rb +1 -1
  63. data/test/{test/integration → integration}/partition_test.rb +6 -5
  64. data/test/{test/integration → integration}/proxy_test.rb +4 -3
  65. data/test/{test/integration → integration}/stats_test.rb +1 -1
  66. data/test/integration/subcommands.rb +128 -0
  67. data/test/{test/system → system}/flare_admin_test.rb +7 -5
  68. data/test/{test/unit → unit}/bwlimit_test.rb +0 -0
  69. data/test/{test/unit → unit}/cluster_test.rb +1 -1
  70. data/test/{test/unit → unit}/daemon_test.rb +0 -0
  71. data/test/{test/unit → unit}/logger_test.rb +0 -0
  72. data/test/{test/unit → unit}/tools_test.rb +0 -0
  73. data/test/unit/util/pretty_table_test.rb +46 -0
  74. data/test/{test/unit → unit}/util_test.rb +7 -2
  75. metadata +88 -100
  76. data/PostInstall.txt +0 -7
  77. data/lib/flare/tools/cli/cli_util.rb +0 -77
  78. data/lib/flare/util/command_line.rb +0 -79
@@ -0,0 +1,55 @@
1
+ require 'flare/entity/server'
2
+ require 'flare/util/constant'
3
+
4
+ module Flare; end
5
+ module Flare::Tools; end
6
+ module Flare::Tools::Cli; end
7
+ module Flare::Tools::Cli::Option
8
+ include Flare::Util::Constant
9
+
10
+ attr_reader :optp
11
+
12
+ def option_init
13
+ @optp = OptionParser.new
14
+ end
15
+
16
+ def set_option_global
17
+ @optp.on('-h', '--help', "show this message") { puts @optp.help; exit 1 }
18
+ @optp.on( '--debug', "enable debug mode") { $DEBUG = true }
19
+ @optp.on( '--warn', "turn on warnings") { $-w = true }
20
+ @optp.on( '--log-file=LOGFILE', "output log to LOGFILE") {|v| Flare::Util::Logging.set_logger(v)}
21
+
22
+ @timeout ||= DefaultTimeout
23
+ @optp.on( '--timeout=SECOND', "specify timeout") {|v| @timeout = v.to_i}
24
+ end
25
+
26
+ def set_option_index_server
27
+ @index_server_entity ||= Flare::Entity::Server.new(nil, nil)
28
+ @cluster ||= nil
29
+
30
+ @optp.on('-i HOSTNAME', '--index-server=HOSTNAME', "index server hostname(default:#{DefaultIndexServerName})") {|v| @index_server_host = v}
31
+ @optp.on('-p PORT', '--index-server-port=PORT', "index server port(default:#{DefaultIndexServerPort})") {|v| @index_server_port = v.to_i}
32
+ @optp.on( '--cluster=NAME', "specify a cluster name") {|v| @cluster = v}
33
+ end
34
+
35
+ def set_option_dry_run
36
+ @dry_run ||= false
37
+ @optp.on('-n', '--dry-run', "dry run") { @dry_run = true }
38
+ end
39
+
40
+ def set_option_force
41
+ @force ||= false
42
+ @optp.on('--force', "commit changes without confirmation") { @force = true }
43
+ end
44
+
45
+ def parse_options(config, argv)
46
+ begin
47
+ rest = @optp.parse(argv)
48
+ rescue OptionParser::ParseError => err
49
+ puts err.message
50
+ puts @optp.to_s
51
+ exit STATUS_NG
52
+ end
53
+ rest
54
+ end
55
+ end
@@ -11,6 +11,7 @@ require 'flare/util/constant'
11
11
  require 'flare/tools/cli/sub_command'
12
12
  require 'flare/tools/cli/slave'
13
13
  require 'flare/tools/cli/master'
14
+ require 'flare/tools/cli/index_server_config'
14
15
 
15
16
  module Flare
16
17
  module Tools
@@ -19,14 +20,17 @@ module Flare
19
20
  include Flare::Util::Conversion
20
21
  include Flare::Util::Constant
21
22
  include Flare::Tools::Common
23
+ include Flare::Tools::Cli::IndexServerConfig
22
24
 
23
25
  myname :part
24
26
  desc "set the master of a partition."
25
27
  usage "master [hostname:port:balance:partition] ..."
26
28
 
27
- def setup(opt)
28
- opt.on('--force', "commits changes without confirmation") {@force = true}
29
- opt.on('--retry=COUNT', "retry count" ) {|v| @retry = v.to_i}
29
+ def setup
30
+ super
31
+ set_option_index_server
32
+ set_option_force
33
+ @optp.on('--retry=COUNT', "retry count" ) {|v| @retry = v.to_i}
30
34
  end
31
35
 
32
36
  def initialize
@@ -34,8 +38,9 @@ module Flare
34
38
  @force = false
35
39
  @retry = nil
36
40
  end
37
-
38
- def execute(config, *args)
41
+
42
+ def execute(config, args)
43
+ parse_index_server(config, args)
39
44
  return S_NG if args.size < 1
40
45
 
41
46
  hosts = args.map {|x| x.to_s.split(':')}
@@ -49,7 +54,7 @@ module Flare
49
54
  masters = []
50
55
  slaves = []
51
56
 
52
- Flare::Tools::IndexServer.open(config[:index_server_hostname], config[:index_server_port], config[:timeout]) do |s|
57
+ Flare::Tools::IndexServer.open(config[:index_server_hostname], config[:index_server_port], @timeout) do |s|
53
58
  cluster = Flare::Tools::Cluster.new(s.host, s.port, s.stats_nodes)
54
59
 
55
60
  partitions = {}
@@ -71,24 +76,20 @@ module Flare
71
76
  begin
72
77
  opt = OptionParser.new
73
78
  subc = Flare::Tools::Cli::Master.new
74
- subc.setup(opt)
75
79
  args = masters
76
80
  args << "--force" if @force
77
81
  args << "--activate"
78
- opt.parse!(args)
79
- subc.execute(config, *args)
82
+ subc.execute_subcommand(config, args)
80
83
  end
81
84
 
82
85
  puts "slaves:"
83
86
  begin
84
87
  opt = OptionParser.new
85
88
  subc = Flare::Tools::Cli::Slave.new
86
- subc.setup(opt)
87
89
  args = slaves
88
90
  args << "--force" if @force
89
91
  args << "--retry=#{@retry}" unless @retry.nil?
90
- opt.parse!(args)
91
- subc.execute(config, *args)
92
+ subc.execute_subcommand(config, args)
92
93
  end
93
94
 
94
95
  S_OK
@@ -8,31 +8,29 @@ require 'flare/util/conversion'
8
8
  require 'flare/util/logging'
9
9
  require 'flare/tools/cli/sub_command'
10
10
 
11
- #
12
11
  module Flare
13
12
  module Tools
14
13
 
15
- # == Description
16
- #
17
14
  module Cli
18
15
  class Ping < SubCommand
19
16
  include Flare::Util::Conversion
20
17
  include Flare::Util::Logging
21
-
18
+
22
19
  myname :ping
23
20
  desc "ping"
24
21
  usage "ping [hostname:port] ..."
25
-
26
- def setup(opt)
27
- opt.on('--wait', "wait for OK responses from nodes") {@wait = true}
22
+
23
+ def setup
24
+ super
25
+ @optp.on('--wait', "wait for OK responses from nodes") {@wait = true}
28
26
  end
29
-
27
+
30
28
  def initialize
31
29
  super
32
30
  @wait = false
33
31
  end
34
-
35
- def execute(config, *args)
32
+
33
+ def execute(config, args)
36
34
 
37
35
  hosts = args.map do |arg|
38
36
  hostname, port, rest = arg.split(':', 3)
@@ -55,7 +53,7 @@ module Flare
55
53
  begin
56
54
  debug "trying..."
57
55
  interruptible do
58
- Flare::Tools::Stats.open(hostname, port, config[:timeout]) do |s|
56
+ Flare::Tools::Stats.open(hostname, port, @timeout) do |s|
59
57
  resp = s.ping
60
58
  end
61
59
  end
@@ -70,11 +68,11 @@ module Flare
70
68
  end
71
69
  end
72
70
  end
73
-
71
+
74
72
  puts "alive"
75
73
  S_OK
76
74
  end
77
-
75
+
78
76
  end
79
77
  end
80
78
  end
@@ -11,6 +11,7 @@ require 'flare/tools/common'
11
11
  require 'flare/util/conversion'
12
12
  require 'flare/util/constant'
13
13
  require 'flare/tools/cli/sub_command'
14
+ require 'flare/tools/cli/index_server_config'
14
15
 
15
16
  module Flare
16
17
  module Tools
@@ -19,16 +20,20 @@ module Flare
19
20
  include Flare::Util::Conversion
20
21
  include Flare::Util::Constant
21
22
  include Flare::Tools::Common
22
-
23
+ include Flare::Tools::Cli::IndexServerConfig
24
+
23
25
  myname :reconstruct
24
26
  desc "reconstruct the database of nodes by copying."
25
27
  usage "reconstruct [hostname:port] ..."
26
28
 
27
- def setup(opt)
28
- opt.on('--force', "commit changes without confirmation" ) {@force = true}
29
- opt.on('--safe', "reconstruct a node safely" ) {@safe = true}
30
- opt.on('--retry=COUNT', "specify retry count (default:#{@retry})") {|v| @retry = v.to_i}
31
- opt.on('--all', "reconstruct all nodes" ) {@all = true}
29
+ def setup
30
+ super
31
+ set_option_index_server
32
+ set_option_dry_run
33
+ set_option_force
34
+ @optp.on('--safe', "reconstruct a node safely" ) {@safe = true}
35
+ @optp.on('--retry=COUNT', "specify retry count (default:#{@retry})") {|v| @retry = v.to_i}
36
+ @optp.on('--all', "reconstruct all nodes" ) {@all = true}
32
37
  end
33
38
 
34
39
  def initialize
@@ -39,13 +44,15 @@ module Flare
39
44
  @all = false
40
45
  end
41
46
 
42
- def execute(config, *args)
47
+ def execute(config, args)
48
+ parse_index_server(config, args)
49
+
43
50
  if @all
44
51
  unless args.empty?
45
52
  puts "don't specify any nodes with --all option."
46
53
  return S_NG
47
54
  else
48
- Flare::Tools::IndexServer.open(config[:index_server_hostname], config[:index_server_port], config[:timeout]) do |s|
55
+ Flare::Tools::IndexServer.open(config[:index_server_hostname], config[:index_server_port], @timeout) do |s|
49
56
  cluster = Flare::Tools::Cluster.new(s.host, s.port, s.stats_nodes)
50
57
  args = cluster.master_and_slave_nodekeys
51
58
  end
@@ -61,16 +68,16 @@ module Flare
61
68
  return S_NG
62
69
  end
63
70
  end
64
-
71
+
65
72
  status = S_OK
66
73
 
67
- Flare::Tools::IndexServer.open(config[:index_server_hostname], config[:index_server_port], config[:timeout]) do |s|
74
+ Flare::Tools::IndexServer.open(config[:index_server_hostname], config[:index_server_port], @timeout) do |s|
68
75
  puts string_of_nodelist(s.stats_nodes, hosts.map {|x| nodekey_of(x[0], x[1])})
69
76
 
70
77
  hosts.each do |hostname,port|
71
78
  nodekey = nodekey_of hostname, port
72
79
  cluster = Flare::Tools::Cluster.new(s.host, s.port, s.stats_nodes)
73
-
80
+
74
81
  unless node = cluster.node_stat(nodekey)
75
82
  puts "#{nodekey} is not found in this cluster."
76
83
  return S_NG
@@ -111,14 +118,14 @@ module Flare
111
118
  end
112
119
  end
113
120
  end
114
- if exec && !config[:dry_run]
121
+ if exec && !@dry_run
115
122
  puts "turning down..."
116
123
  s.set_state(hostname, port, 'down')
117
124
 
118
125
  puts "waiting for node to be active again..."
119
126
  sleep 3
120
127
 
121
- Flare::Tools::Node.open(hostname, port, config[:timeout]) do |n|
128
+ Flare::Tools::Node.open(hostname, port, @timeout) do |n|
122
129
  n.flush_all
123
130
  end
124
131
 
@@ -137,7 +144,7 @@ module Flare
137
144
  end
138
145
  balance = node['balance']
139
146
  if resp
140
- wait_for_slave_construction(s, nodekey, config[:timeout])
147
+ wait_for_slave_construction(s, nodekey, @timeout)
141
148
  unless @force
142
149
  print "changing node's balance (node=#{nodekey}, balance=0 -> #{balance}) (y/n): "
143
150
  exec = interruptible {(gets.chomp.upcase == "Y")}
@@ -154,7 +161,7 @@ module Flare
154
161
 
155
162
  puts string_of_nodelist(s.stats_nodes, hosts.map {|x| "#{x[0]}:#{x[1]}"})
156
163
  end # open
157
-
164
+
158
165
  status
159
166
  end # execute()
160
167
 
@@ -7,27 +7,29 @@ require 'flare/tools/index_server'
7
7
  require 'flare/util/conversion'
8
8
  require 'flare/tools/common'
9
9
  require 'flare/tools/cli/sub_command'
10
+ require 'flare/tools/cli/index_server_config'
10
11
 
11
- #
12
12
  module Flare
13
13
  module Tools
14
14
  module Cli
15
15
 
16
- # == Description
17
- #
18
16
  class Remove < SubCommand
19
17
  include Flare::Util::Conversion
20
18
  include Flare::Tools::Common
19
+ include Flare::Tools::Cli::IndexServerConfig
21
20
 
22
21
  myname :remove
23
22
  desc "remove a node. (experimental)"
24
23
  usage "remove"
25
-
26
- def setup(opt)
27
- opt.on('--force', "commit changes without confirmation") {@force = true}
28
- opt.on('--wait=SECOND', "specify the time to wait node for getting ready (default:#{@wait})") {|v| @wait = v.to_i}
29
- opt.on('--retry=COUNT', "retry count(default:#{@retry})") {|v| @retry = v.to_i}
30
- opt.on('--connection-threshold=[COUNT]', "specify connection threashold (default:#{@connection_threshold})") {|v| @connection_threshold = v.to_i}
24
+
25
+ def setup
26
+ super
27
+ set_option_index_server
28
+ set_option_dry_run
29
+ set_option_force
30
+ @optp.on('--wait=SECOND', "specify the time to wait node for getting ready (default:#{@wait})") {|v| @wait = v.to_i}
31
+ @optp.on('--retry=COUNT', "retry count(default:#{@retry})") {|v| @retry = v.to_i}
32
+ @optp.on('--connection-threshold=[COUNT]', "specify connection threashold (default:#{@connection_threshold})") {|v| @connection_threshold = v.to_i}
31
33
  end
32
34
 
33
35
  def initialize
@@ -38,7 +40,9 @@ module Flare
38
40
  @connection_threshold = 2
39
41
  end
40
42
 
41
- def execute(config, *args)
43
+ def execute(config, args)
44
+ parse_index_server(config, args)
45
+
42
46
  hosts = args.map {|x| x.split(':')}
43
47
  hosts.each do |x|
44
48
  if x.size != 2
@@ -46,8 +50,8 @@ module Flare
46
50
  return S_NG
47
51
  end
48
52
  end
49
-
50
- Flare::Tools::IndexServer.open(config[:index_server_hostname], config[:index_server_port], config[:timeout]) do |s|
53
+
54
+ Flare::Tools::IndexServer.open(config[:index_server_hostname], config[:index_server_port], @timeout) do |s|
51
55
  cluster = fetch_cluster(s)
52
56
 
53
57
  hosts.each do |hostname,port|
@@ -60,7 +64,7 @@ module Flare
60
64
 
61
65
  hosts.each do |hostname,port|
62
66
  exec = false
63
- Flare::Tools::Node.open(hostname, port, config[:timeout]) do |n|
67
+ Flare::Tools::Node.open(hostname, port, @timeout) do |n|
64
68
  nwait = @wait
65
69
  node = n.stats
66
70
  cluster = Flare::Tools::Cluster.new(s.host, s.port, s.stats_nodes)
@@ -87,14 +91,14 @@ module Flare
87
91
  }
88
92
  end
89
93
  end
90
-
94
+
91
95
  if exec
92
96
  suc = false
93
97
  nretry = @retry
94
98
  while nretry > 0
95
99
  resp = false
96
100
  info "removing #{hostname}:#{port}."
97
- resp = s.node_remove(hostname, port) unless config[:dry_run]
101
+ resp = s.node_remove(hostname, port) unless @dry_run
98
102
  if resp
99
103
  suc = true
100
104
  break
@@ -109,10 +113,9 @@ module Flare
109
113
  end
110
114
  puts string_of_nodelist(s.stats_nodes)
111
115
  end
112
-
116
+
113
117
  S_OK
114
118
  end
115
-
116
119
  end
117
120
  end
118
121
  end
@@ -20,7 +20,7 @@ end
20
20
  module Flare
21
21
  module Tools
22
22
  module Cli
23
-
23
+
24
24
  class Restore < SubCommand
25
25
 
26
26
  class Restorer
@@ -70,35 +70,37 @@ module Flare
70
70
  include Flare::Util::Conversion
71
71
  include Flare::Util::Constant
72
72
  include Flare::Tools::Common
73
-
73
+
74
74
  myname :restore
75
75
  desc "restore data to nodes. (experimental)"
76
76
  usage "restore [hostname:port]"
77
-
78
- def setup(opt)
79
- opt.on('-i', '--input=FILE', "input from file") {|v| @input = v}
80
- opt.on('-f', '--format=FORMAT', "input format [#{Formats.join(',')}]") {|v|
77
+
78
+ def setup
79
+ super
80
+ set_option_dry_run
81
+ @optp.on('-i', '--input=FILE', "input from file") {|v| @input = v}
82
+ @optp.on('-f', '--format=FORMAT', "input format [#{Formats.join(',')}]") {|v|
81
83
  @format = v
82
84
  }
83
- opt.on('--bwlimit=BANDWIDTH', "bandwidth limit (bps)") {|v| @bwlimit = v}
84
- opt.on('--include=PATTERN', "include pattern") {|v|
85
+ @optp.on('--bwlimit=BANDWIDTH', "bandwidth limit (bps)") {|v| @bwlimit = v}
86
+ @optp.on('--include=PATTERN', "include pattern") {|v|
85
87
  begin
86
88
  @include = Regexp.new(v)
87
89
  rescue RegexpError => e
88
90
  raise "#{v} isn't a valid regular expression."
89
91
  end
90
92
  }
91
- opt.on('--prefix-include=STRING', "prefix string") {|v|
93
+ @optp.on('--prefix-include=STRING', "prefix string") {|v|
92
94
  @prefix_include = Regexp.new("^"+Regexp.escape(v))
93
- }
94
- opt.on('--exclude=PATTERN', "exclude pattern") {|v|
95
+ }
96
+ @optp.on('--exclude=PATTERN', "exclude pattern") {|v|
95
97
  begin
96
98
  @exclude = Regexp.new(v)
97
99
  rescue RegexpError => e
98
100
  raise "#{v} isn't a valid regular expression."
99
101
  end
100
102
  }
101
- opt.on('--print-keys', "enables key dump to console") {@print_key = true}
103
+ @optp.on('--print-keys', "enables key dump to console") {@print_key = true}
102
104
  end
103
105
 
104
106
  def initialize
@@ -115,16 +117,14 @@ module Flare
115
117
  @print_key = false
116
118
  end
117
119
 
118
- def execute(config, *args)
120
+ def execute(config, args)
119
121
  STDERR.puts "please install tokyocabinet via gem command." unless defined? TokyoCabinet
120
122
 
121
- dry_run = config[:dry_run]
122
-
123
123
  unless @format.nil? || Formats.include?(@format)
124
124
  STDERR.puts "unknown format: #{@format}"
125
125
  return S_NG
126
126
  end
127
-
127
+
128
128
  if @prefix_include
129
129
  if @include
130
130
  STDERR.puts "--include option is specified."
@@ -140,7 +140,7 @@ module Flare
140
140
  return S_NG
141
141
  end
142
142
  end
143
-
143
+
144
144
  restorer = case @format
145
145
  when TchRestorer.myname
146
146
  TchRestorer.new(@input)
@@ -149,7 +149,7 @@ module Flare
149
149
  end
150
150
 
151
151
  nodes = hosts.map do |hostname,port|
152
- Flare::Tools::Node.open(hostname, port.to_i, config[:timeout], @bwlimit, @bwlimit)
152
+ Flare::Tools::Node.open(hostname, port.to_i, @timeout, @bwlimit, @bwlimit)
153
153
  end
154
154
 
155
155
  count = 0
@@ -157,7 +157,7 @@ module Flare
157
157
  if @include.nil? || @include =~ key
158
158
  next if @exclude && @exclude =~ key
159
159
  STDOUT.puts key if @print_key
160
- nodes[0].set(key, data, flag, expire) unless dry_run
160
+ nodes[0].set(key, data, flag, expire) unless @dry_run
161
161
  count += 1
162
162
  end
163
163
  end
@@ -168,7 +168,7 @@ module Flare
168
168
  end
169
169
 
170
170
  restorer.close
171
-
171
+
172
172
  S_OK
173
173
  end # execute()
174
174