From aad28b3c55221ae504f3f8b866cefc61cf1c7386 Mon Sep 17 00:00:00 2001 From: Yuxuan Li Date: Thu, 6 Apr 2017 14:40:53 -0700 Subject: [PATCH] add error handling for InvalidArgument error from sendResponse() --- server.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/server.go b/server.go index 7956c22a..04db9fa6 100644 --- a/server.go +++ b/server.go @@ -777,6 +777,19 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport. if err := s.sendResponse(t, stream, reply, s.opts.cp, opts); err != nil { // TODO: Translate error into a status.Status error if necessary? // TODO: Write status when appropriate. + s, ok := status.FromError(err) + if !ok { + // TODO: Parse possible non-status error + } else { + switch s.Code() { + case codes.InvalidArgument: + if e := t.WriteStatus(stream, s); e != nil { + grpclog.Printf("grpc: Server.processUnaryRPC failed to write status: %v", e) + } + // TODO: Add cases if needed + default: + } + } return err } if trInfo != nil {