class GrpcKit::Session::DrainController

Public Class Methods

new(draining_time = 5) click to toggle source
# File lib/grpc_kit/session/drain_controller.rb, line 17
def initialize(draining_time = 5)
  @draining_time = draining_time
  @status = Status::NOT_START
end

Public Instance Methods

next(session) click to toggle source

@return [void]

# File lib/grpc_kit/session/drain_controller.rb, line 38
def next(session)
  case @status
  when Status::NOT_START
    # next_step
  when Status::STARTED
    session.submit_shutdown
    next_step
  when Status::SENT_SHUTDOWN
    session.submit_ping
    @sent_time = Time.now.to_i
    next_step
  when Status::SENT_PING
    # skip until #recv_ping_ack is called (1RTT)
  when Status::RECV_PING_ACK
    if @sent_time && (Time.now.to_i - @sent_time) > @draining_time
      return
    end

    session.submit_goaway(session.last_proc_stream_id, DS9::NO_ERROR)
    next_step
  when Status::SENT_GOAWAY
    # session.shutdown
  end
end
recv_ping_ack() click to toggle source

@return [void]

# File lib/grpc_kit/session/drain_controller.rb, line 31
def recv_ping_ack
  if @status == Status::SENT_PING
    next_step
  end
end
start_draining() click to toggle source
# File lib/grpc_kit/session/drain_controller.rb, line 26
def start_draining
  @status = Status::STARTED
end
start_draining?() click to toggle source
# File lib/grpc_kit/session/drain_controller.rb, line 22
def start_draining?
  @status > Status::NOT_START
end

Private Instance Methods

next_step() click to toggle source
# File lib/grpc_kit/session/drain_controller.rb, line 65
def next_step
  @status += 1
end