class Flare::Tools::Cli::Dump
Constants
- Formats
- Iterators
- SizeOfByte
Public Class Methods
new()
click to toggle source
Calls superclass method
# File lib/flare/tools/cli/dump.rb, line 126 def initialize super @output = nil @format = nil @bwlimit = 0 @all = false @raw = false @partition_size = 1 end
Public Instance Methods
execute(config, args)
click to toggle source
# File lib/flare/tools/cli/dump.rb, line 136 def execute(config, args) parse_index_server(config, args) STDERR.puts "please install tokyocabinet via gem command." unless defined? TokyoCabinet cluster = nil Flare::Tools::IndexServer.open(config[:index_server_hostname], config[:index_server_port], @timeout) do |s| cluster = Flare::Tools::Cluster.new(s.host, s.port, s.stats_nodes) end return S_NG if cluster.nil? partition_size = cluster.partition_size if @all if args.size > 0 STDERR.puts "don't specify any nodes with --all option." return S_NG else args = cluster.master_nodekeys end else if args.size == 0 STDERR.puts "please specify --all option to get complete dump." return S_NG end end unless Formats.include?(@format) STDERR.puts "unknown format: #{@format}" return S_NG end hosts = args.map {|x| x.split(':')} hosts.each do |x| if x.size == 2 x << cluster.partition_of_nodename("#{x[0]}:#{x[1]}") elsif x.size == 4 if x[3] =~ /^\d+$/ STDERR.puts "invalid partition number '#{x.join(':')}'." x[3] = x[3].to_i else STDERR.puts "invalid partition number '#{x.join(':')}'." return S_NG end else STDERR.puts "invalid argument '#{x.join(':')}'." return S_NG end end dumper = case @format when CsvDumper.myname CsvDumper.new(@output || STDOUT) when TchDumper.myname TchDumper.new @output else DefaultDumper.new(@output || STDOUT) end hosts.each do |hostname,port,partition| Flare::Tools::Node.open(hostname, port.to_i, @timeout, 0, @bwlimit) do |n| interval = 0 part, partsize = if @raw [0, 1] else [partition, partition_size] end bwlimit = @bwlimit/1024/SizeOfByte count = 0 STDERR.print "dumping from #{hostname}:#{port}::#{part} of #{partsize} partitions ... " n.dump(interval, part, partsize, bwlimit) do |data, key, flag, len, version, expire| dumper.write data, key, flag, len, version, expire count += 1 false end STDERR.puts "#{count}" end end dumper.close S_OK end
setup()
click to toggle source
Calls superclass method
# File lib/flare/tools/cli/dump.rb, line 114 def setup super set_option_index_server @optp.on('-o', '--output=FILE', "output to file") {|v| @output = v} @optp.on('-f', '--format=FORMAT', "specify output format [#{Formats.join(',')}]") {|v| @format = v} @optp.on( '--bwlimit=BANDWIDTH', "specify bandwidth limit (bps)") {|v| @bwlimit = Flare::Util::Bwlimit.bps(v) } @optp.on('--all', "dump from all master nodes") {|v| @all = true} @optp.on('--raw', "raw dump mode (for debugging)") {|v| @raw = true} end