From 96c1c19c9d103a094eb6416db4a19e815782a613 Mon Sep 17 00:00:00 2001 From: "Sahdev P. Zala" Date: Fri, 5 Jan 2018 19:38:24 -0500 Subject: [PATCH] Log: debug user cancellation and log warning for rest The context errors with Canceled or DeadlineExceeded code are typically for user cancellation which should be at debug level. For other error codes we should display a warning. Fixes #9085 --- etcdserver/api/v3rpc/lease.go | 11 ++++++++++- etcdserver/api/v3rpc/watch.go | 9 +++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/etcdserver/api/v3rpc/lease.go b/etcdserver/api/v3rpc/lease.go index 13602b4e652..e4f7724095a 100644 --- a/etcdserver/api/v3rpc/lease.go +++ b/etcdserver/api/v3rpc/lease.go @@ -22,6 +22,9 @@ import ( "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes" pb "github.com/coreos/etcd/etcdserver/etcdserverpb" "github.com/coreos/etcd/lease" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" ) type LeaseServer struct { @@ -107,7 +110,13 @@ func (ls *LeaseServer) leaseKeepAlive(stream pb.Lease_LeaseKeepAliveServer) erro return nil } if err != nil { - plog.Debugf("failed to receive lease keepalive request from gRPC stream (%q)", err.Error()) + ev, _ := status.FromError(err) + code := ev.Code() + if code == codes.Canceled || code == codes.DeadlineExceeded { + plog.Debugf("failed to receive lease 123 keepalive request from gRPC stream (%q)", err.Error()) + } else { + plog.Warningf("failed to receive lease keepalive request from gRPC stream (%q)", err.Error()) + } return err } diff --git a/etcdserver/api/v3rpc/watch.go b/etcdserver/api/v3rpc/watch.go index 89bc5a3f52b..a4004af96c6 100644 --- a/etcdserver/api/v3rpc/watch.go +++ b/etcdserver/api/v3rpc/watch.go @@ -26,6 +26,9 @@ import ( pb "github.com/coreos/etcd/etcdserver/etcdserverpb" "github.com/coreos/etcd/mvcc" "github.com/coreos/etcd/mvcc/mvccpb" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" ) type watchServer struct { @@ -140,8 +143,10 @@ func (ws *watchServer) Watch(stream pb.Watch_WatchServer) (err error) { // deadlock when calling sws.close(). go func() { if rerr := sws.recvLoop(); rerr != nil { - if stream.Context().Err() == context.Canceled { - plog.Debugf("failed to receive watch request from gRPC stream 11 (%q)", rerr.Error()) + ev, _ := status.FromError(rerr) + code := ev.Code() + if code == codes.Canceled || code == codes.DeadlineExceeded { + plog.Debugf("failed to receive watch request from gRPC stream (%q)", rerr.Error()) } else { plog.Warningf("failed to receive watch request from gRPC stream (%q)", rerr.Error()) }