class Kafkat::ClusterRestart::Subcommands::Next

Attributes

session[R]
topics[R]

Public Instance Methods

run() click to toggle source
# File lib/kafkat/command/cluster_restart.rb, line 94
def run
  unless Session.exists?
    puts "ERROR: no session in progress"
    puts "\n[Action] Please run 'start' command"
    exit 1
  end

  @session = Session.load!
  if @session.all_restarted?
    puts "All the brokers have been restarted"
  else
    pendings = @session.pending_brokers
    if pendings.size > 1
      puts "ERROR Illegal state: multiple brokers are in Pending state"
      exit 1
    elsif pendings.size == 1
      next_broker = pendings[0]
      puts "Broker #{next_broker} is in Pending state"
    else
      @topics = zookeeper.get_topics
      next_broker, cost = ClusterRestartHelper.select_broker_with_min_cost(session, topics)
      @session.update_states!(Session::STATE_PENDING, [next_broker])
      @session.save!
      puts "The next broker is: #{next_broker}"
    end
    puts "\n[Action-1] Restart broker #{next_broker} aka #{zookeeper.get_broker(next_broker).host}"
    puts "\n[Action-2] Run 'good #{next_broker}' to mark it as restarted."
  end
end