class Flare::Tools::Cli::Activate

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/flare/tools/cli/activate.rb, line 37
def initialize
  super
  @force = false
end

Public Instance Methods

execute(config, args) click to toggle source
# File lib/flare/tools/cli/activate.rb, line 42
def execute(config, args)
  parse_index_server(config, args)
  return S_NG if args.size < 1

  hosts = args.map {|x| x.split(':')}
  hosts.each do |x|
    if x.size != 2
      puts "invalid argument '#{x.join(':')}'."
      return S_NG
    end
  end

  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)
    nodes = s.stats_nodes.sort_by{|key, val| [val['partition'], val['role'], key]}

    hosts.each do |hostname,port|
      nodekey = nodekey_of hostname, port
      ipaddr = address_of_hostname(hostname)

      unless cluster.has_nodekey? nodekey
        error "invalid 'hostname:port' pair: #{nodekey}"
        return S_NG
      end

      node = cluster.node_stat(nodekey)

      exec = @force
      if exec
      elsif node['state'] == 'active'
        warn "#{ipaddr}:#{port} is already active."
      else
        STDERR.print "turning node up (node=#{ipaddr}:#{port}, state=#{node['state']} -> activate) (y/n): "
        exec = interruptible {
          (gets.chomp.upcase == "Y")
        }
      end
      if exec && !@dry_run
        if @force
          begin
            s.set_state(hostname, port, 'active')
          rescue Timeout::Error => e
            error "failed to activate #{nodekey} (timeout)"
            raise e
          end
        else
          resp = false
          until resp
            resp = s.set_state(hostname, port, 'active')
            unless resp
              STDERR.print "turning node up (node=#{ipaddr}:#{port}, state=#{node['state']} -> activate) (y/n): "
              exec = interruptible {
                (gets.chomp.upcase == "Y")
              }
            end
          end
        end
      end
    end

    STDOUT.puts string_of_nodelist(s.stats_nodes, hosts.map {|x| "#{x[0]}:#{x[1]}"})
  end

  S_OK
end
setup() click to toggle source
Calls superclass method
# File lib/flare/tools/cli/activate.rb, line 30
def setup
  super
  set_option_index_server
  set_option_dry_run
  set_option_force
end