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)