module Flare::Tools::Common
Constants
- NodeListFormat
- NodeListHeader
Public Instance Methods
address_of_hostname(hostname)
click to toggle source
# File lib/flare/tools/common.rb, line 63 def address_of_hostname(hostname) Resolv.getaddress(hostname) rescue Resolv::ResolvError hostname end
fetch_cluster(s)
click to toggle source
# File lib/flare/tools/common.rb, line 17 def fetch_cluster s Flare::Tools::Cluster.new(s.host, s.port, s.stats_nodes) end
hostname_of_address(ipaddr)
click to toggle source
# File lib/flare/tools/common.rb, line 69 def hostname_of_address(ipaddr) Resolv.getname(ipaddr) rescue Resolv::ResolvError ipaddr end
nodekey_of(*args)
click to toggle source
# File lib/flare/tools/common.rb, line 39 def nodekey_of *args if args.size == 1 args = if args[0].kind_of?(Array) args[0] elsif args[0].kind_of?(String) args[0].split(':') end end if args.size >= 2 hostname, port = args if hostname.kind_of?(String) && port.kind_of?(String) if port.empty? port = Flare::Util::Constant::DefaultNodePort return "#{hostname}:#{port}" elsif /^\d+$/ =~ port return "#{hostname}:#{port}" end elsif hostname.kind_of?(String) && port.kind_of?(Integer) return "#{hostname}:#{port}" end end nil end
string_of_nodelist(nodes, opt = {})
click to toggle source
# File lib/flare/tools/common.rb, line 82 def string_of_nodelist(nodes, opt = {}) format = NodeListFormat+"\n" ret = format % NodeListHeader.map{|x| x[1]}.flatten nodes.each do |nodekey, node| if opt.empty? || opt.include?(nodekey) partition = if node['partition'] == "-1" "-" else node['partition'] end ret += format % [ nodekey, partition, node['role'], node['state'], node['balance'], ] end end ret end
user_confirmed(opt = { true => /^Y$/, false => /^N$/ })
click to toggle source
# File lib/flare/tools/common.rb, line 21 def user_confirmed opt = { true => /^Y$/, false => /^N$/ }, &block ret = nil while ret.nil? line = gets.chomp.upcase opt.each do |key,pattern| if patterns =~ line ret = key break end end end if block.nil? ret else block.call(ret) end end
wait_for_master_construction(index_server, nodekey, timeout, silent = false)
click to toggle source
s:IndexServer, nodekey:“hostname:port”, timeout(second):Integer -> state:String
# File lib/flare/tools/common.rb, line 142 def wait_for_master_construction(index_server, nodekey, timeout, silent = false) cluster = Flare::Tools::Cluster.new(index_server.host, index_server.port, index_server.stats_nodes) master = cluster.node_stat(nodekey) partition = master['partition'].to_i m_hostname, m_port = cluster.master_in_partition(partition).split(':') m = Flare::Tools::Stats.open(m_hostname, m_port.to_i, timeout) start = Time.now while true cluster = Flare::Tools::Cluster.new(index_server.host, index_server.port, index_server.stats_nodes) master = cluster.node_stat(nodekey) stats_master = m.stats ts_diff = Time.now-start state_master = master['state']; role_master = master['role']; item_m = stats_master['curr_items'].to_i; eta = "n/a"; unless silent STDERR.puts "%d (role = %s, state = %s) [ETA: %s sec (elapsed = %d sec)]" % [item_m, role_master, state_master, eta, ts_diff] end if role_master == "master" && state_master == "active" if partition != 0 warn "The master should be ready after the reconstruction but it became active." end break end break if role_master == "master" && state_master == "ready" sleep 1 end info "state is ready -> stop waiting" unless silent m.close state_master end
wait_for_servers(index_server, timeout = Flare::Util::Constant::DefaultTimeout, silent = false)
click to toggle source
# File lib/flare/tools/common.rb, line 175 def wait_for_servers(index_server, timeout = Flare::Util::Constant::DefaultTimeout, silent = false) index_server.stats_nodes.each do |nodekey, v| hostname, port = nodekey.split(':') is_alive = false while is_alive begin Flare::Tools::Node.open(hostname, port.to_i, 2) do |n| n.ping is_alize = true end rescue Errno::ECONNREFUSED rescue SocketError end sleep 1 unless is_alive end end end
wait_for_slave_construction(index_server, nodekey, timeout, silent = false)
click to toggle source
s:IndexServer, nodekey:“hostname:port”, timeout(second):Integer -> state:String
# File lib/flare/tools/common.rb, line 105 def wait_for_slave_construction(index_server, nodekey, timeout, silent = false) cluster = Flare::Tools::Cluster.new(index_server.host, index_server.port, index_server.stats_nodes) slave = cluster.node_stat(nodekey) partition = slave['partition'].to_i m_hostname, m_port = cluster.master_in_partition(partition).split(':') s_hostname, s_port = nodekey.split(':') m = Flare::Tools::Stats.open(m_hostname, m_port.to_i, timeout) s = Flare::Tools::Stats.open(s_hostname, s_port.to_i, timeout) start = Time.now while true cluster = Flare::Tools::Cluster.new(index_server.host, index_server.port, index_server.stats_nodes) slave = cluster.node_stat(nodekey) stats_master = m.stats stats_slave = s.stats ts_diff = Time.now-start state_slave = slave['state']; role_slave = slave['role']; item_m = stats_master['curr_items'].to_i; item_s = stats_slave['curr_items'].to_i; eta = if ts_diff > 0 && item_s > 0 ((item_m - item_s) / (item_s / ts_diff)).to_i; else "n/a"; end unless silent STDERR.puts "%d/%d (role = %s, state = %s) [ETA: %s sec (elapsed = %d sec)]" % [item_s, item_m, role_slave, state_slave, eta, ts_diff] end break if role_slave == "slave" && state_slave == "active" sleep 1 end info "state is active -> stop waiting" unless silent m.close s.close state_slave end