diff options
author | Alexander Polcyn <apolcyn@google.com> | 2018-04-03 16:08:01 -0700 |
---|---|---|
committer | Alexander Polcyn <apolcyn@google.com> | 2018-04-03 20:47:24 -0700 |
commit | ae937d34d6d517ffb29b8a22f947cdc3461aa1ca (patch) | |
tree | 12f66ab9cea170b4ac46f3fdd5e80d8b23e4d1a4 /src/ruby/lib | |
parent | 786126dd41822155493c175eda2d0e54a2b1012f (diff) |
Never throw CallErrors for failed bidi reads or writes
Diffstat (limited to 'src/ruby/lib')
-rw-r--r-- | src/ruby/lib/grpc/generic/bidi_call.rb | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/src/ruby/lib/grpc/generic/bidi_call.rb b/src/ruby/lib/grpc/generic/bidi_call.rb index 086455db0b..ffb232b827 100644 --- a/src/ruby/lib/grpc/generic/bidi_call.rb +++ b/src/ruby/lib/grpc/generic/bidi_call.rb @@ -124,12 +124,18 @@ module GRPC def read_using_run_batch ops = { RECV_MESSAGE => nil } ops[RECV_INITIAL_METADATA] = nil unless @metadata_received - batch_result = @call.run_batch(ops) - unless @metadata_received - @call.metadata = batch_result.metadata - @metadata_received = true + begin + batch_result = @call.run_batch(ops) + unless @metadata_received + @call.metadata = batch_result.metadata + @metadata_received = true + end + batch_result + rescue GRPC::Core::CallError => e + GRPC.logger.warn('bidi call: read_using_run_batch failed') + GRPC.logger.warn(e) + nil end - batch_result end # set_output_stream_done is relevant on client-side @@ -155,7 +161,12 @@ module GRPC GRPC.logger.debug("bidi-write-loop: #{count} writes done") if is_client GRPC.logger.debug("bidi-write-loop: client sent #{count}, waiting") - @call.run_batch(SEND_CLOSE_FROM_CLIENT => nil) + begin + @call.run_batch(SEND_CLOSE_FROM_CLIENT => nil) + rescue GRPC::Core::CallError => e + GRPC.logger.warn('bidi-write-loop: send close failed') + GRPC.logger.warn(e) + end GRPC.logger.debug('bidi-write-loop: done') end GRPC.logger.debug('bidi-write-loop: finished') @@ -187,7 +198,7 @@ module GRPC batch_result = read_using_run_batch # handle the next message - if batch_result.message.nil? + if batch_result.nil? || batch_result.message.nil? GRPC.logger.debug("bidi-read-loop: null batch #{batch_result}") if is_client |