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

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

Loading…
Cancel
Save