[ruby] improve handling for recv_message op failures (#34016)

[ruby] improve handling for recv_message op failures (don't assume recv_message ops won't fail e.g. if the call was cancelled by the peer)
pull/34040/head
apolcyn 2 years ago committed by GitHub
parent b4063a8c3f
commit 06d0a6c0fd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      src/ruby/lib/grpc/generic/active_call.rb
  2. 6
      src/ruby/spec/generic/rpc_server_spec.rb

@ -261,6 +261,9 @@ module GRPC
@metadata_received = true
end
get_message_from_batch_result(batch_result)
rescue GRPC::Core::CallError => e
GRPC.logger.info("remote_read: #{e}")
nil
end
def get_message_from_batch_result(recv_message_batch_result)
@ -327,14 +330,7 @@ module GRPC
def each_remote_read_then_finish
return enum_for(:each_remote_read_then_finish) unless block_given?
loop do
resp =
begin
remote_read
rescue GRPC::Core::CallError => e
GRPC.logger.warn("In each_remote_read_then_finish: #{e}")
nil
end
resp = remote_read
break if resp.nil? # the last response was received
yield resp
end

@ -668,9 +668,9 @@ describe GRPC::RpcServer do
def check_multi_req_view_of_finished_call(call)
common_check_of_finished_server_call(call)
expect do
call.each_remote_read.each { |r| p r }
end.to raise_error(GRPC::Core::CallError)
l = []
call.each_remote_read.each { |r| l << r }
expect(l.size).to eq(0)
end
def common_check_of_finished_server_call(call)

Loading…
Cancel
Save