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