aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar murgatroid99 <mlumish@google.com>2016-05-03 10:51:49 -0700
committerGravatar murgatroid99 <mlumish@google.com>2016-05-03 10:51:49 -0700
commit38281cfa59097c7006a6514fca791a7b50b7ff8a (patch)
tree3be30727e3a68a80c665d1d17f8c8fad9a0abcc3
parent6bac7d3467c99dccc30e8447bc84237bb54b99fe (diff)
Ruby: improve server error handling, fix a reference error
-rw-r--r--src/ruby/lib/grpc/generic/rpc_server.rb17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/ruby/lib/grpc/generic/rpc_server.rb b/src/ruby/lib/grpc/generic/rpc_server.rb
index 7f3a38a9f4..9a2af04947 100644
--- a/src/ruby/lib/grpc/generic/rpc_server.rb
+++ b/src/ruby/lib/grpc/generic/rpc_server.rb
@@ -332,15 +332,13 @@ module GRPC
# the current thread to terminate it.
def run_till_terminated
GRPC.trap_signals
- stopped = false
t = Thread.new do
run
- stopped = true
end
+ t.abort_on_exception = true
wait_till_running
- loop do
+ until running_state == :stopped
sleep SIGNAL_CHECK_PERIOD
- break if stopped
break unless GRPC.handle_signals
end
stop
@@ -416,7 +414,7 @@ module GRPC
GRPC.logger.warn("NOT AVAILABLE: too many jobs_waiting: #{an_rpc}")
noop = proc { |x| x }
c = ActiveCall.new(an_rpc.call, @cq, noop, noop, an_rpc.deadline)
- c.send_status(StatusCodes::RESOURCE_EXHAUSTED, '')
+ c.send_status(GRPC::Core::StatusCodes::RESOURCE_EXHAUSTED, '')
nil
end
@@ -427,7 +425,7 @@ module GRPC
GRPC.logger.warn("UNIMPLEMENTED: #{an_rpc}")
noop = proc { |x| x }
c = ActiveCall.new(an_rpc.call, @cq, noop, noop, an_rpc.deadline)
- c.send_status(StatusCodes::UNIMPLEMENTED, '')
+ c.send_status(GRPC::Core::StatusCodes::UNIMPLEMENTED, '')
nil
end
@@ -443,7 +441,12 @@ module GRPC
unless active_call.nil?
@pool.schedule(active_call) do |ac|
c, mth = ac
- rpc_descs[mth].run_server_method(c, rpc_handlers[mth])
+ begin
+ rpc_descs[mth].run_server_method(c, rpc_handlers[mth])
+ rescue StandardError => e
+ c.send_status(code = GRPC::Core::StatusCodes::INTERNAL,
+ details = "Server handler failed")
+ end
end
end
rescue Core::CallError, RuntimeError => e