From 06d0a6c0fdd4ed1920bdb070caa2b4304ff48fd9 Mon Sep 17 00:00:00 2001 From: apolcyn Date: Thu, 10 Aug 2023 12:25:29 -0700 Subject: [PATCH] [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) --- src/ruby/lib/grpc/generic/active_call.rb | 12 ++++-------- src/ruby/spec/generic/rpc_server_spec.rb | 6 +++--- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/ruby/lib/grpc/generic/active_call.rb b/src/ruby/lib/grpc/generic/active_call.rb index af85ae8b746..0c897d51998 100644 --- a/src/ruby/lib/grpc/generic/active_call.rb +++ b/src/ruby/lib/grpc/generic/active_call.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 diff --git a/src/ruby/spec/generic/rpc_server_spec.rb b/src/ruby/spec/generic/rpc_server_spec.rb index 08f458db384..6cb4ac2bda8 100644 --- a/src/ruby/spec/generic/rpc_server_spec.rb +++ b/src/ruby/spec/generic/rpc_server_spec.rb @@ -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)