From 1746e2ddbd1e1837e00a1f1de50e6f17a13f252f Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Fri, 15 Apr 2016 11:45:50 +0200 Subject: [PATCH] rpc: increased log level in case RPC request could not be read --- rpc/errors.go | 17 +++++++++++++++++ rpc/json.go | 3 +++ rpc/server.go | 6 ++++-- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/rpc/errors.go b/rpc/errors.go index bc352fc45b..26e2926ee3 100644 --- a/rpc/errors.go +++ b/rpc/errors.go @@ -18,6 +18,11 @@ package rpc import "fmt" +var ( + // ErrConnectionClosed is thrown when the connection is closed + ErrConnectionClosed = new(connectionClosedError) +) + // request is for an unknown service type methodNotFoundError struct { service string @@ -95,3 +100,15 @@ func (e *shutdownError) Code() int { func (e *shutdownError) Error() string { return "server is shutting down" } + +// connectionClosedError is thrown when the connection is closed +type connectionClosedError struct { +} + +func (e *connectionClosedError) Code() int { + return 0 +} + +func (e *connectionClosedError) Error() string { + return "connection closed" +} diff --git a/rpc/json.go b/rpc/json.go index 8a3bea2eeb..b55ae64c7e 100644 --- a/rpc/json.go +++ b/rpc/json.go @@ -119,6 +119,9 @@ func (c *jsonCodec) ReadRequestHeaders() ([]rpcRequest, bool, RPCError) { var incomingMsg json.RawMessage if err := c.d.Decode(&incomingMsg); err != nil { + if err == io.EOF { + return nil, false, ErrConnectionClosed + } return nil, false, &invalidRequestError{err.Error()} } diff --git a/rpc/server.go b/rpc/server.go index cf90eba02a..ab6960785b 100644 --- a/rpc/server.go +++ b/rpc/server.go @@ -185,8 +185,10 @@ func (s *Server) serveRequest(codec ServerCodec, singleShot bool, options CodecO for atomic.LoadInt32(&s.run) == 1 { reqs, batch, err := s.readRequest(codec) if err != nil { - glog.V(logger.Debug).Infof("%v\n", err) - codec.Write(codec.CreateErrorResponse(nil, err)) + if err != ErrConnectionClosed { + glog.V(logger.Error).Infof("%v\n", err) + codec.Write(codec.CreateErrorResponse(nil, err)) + } return nil }