Browse Source

Merge pull request #9105 from spzala/getrevision

etcdserver/api/v3rpc: debug user cancellation and log warning for rest
Xiang Li 8 years ago
parent
commit
44e1f6f019
3 changed files with 43 additions and 6 deletions
  1. 10 2
      etcdserver/api/v3rpc/lease.go
  2. 13 0
      etcdserver/api/v3rpc/util.go
  3. 20 4
      etcdserver/api/v3rpc/watch.go

+ 10 - 2
etcdserver/api/v3rpc/lease.go

@@ -107,7 +107,11 @@ func (ls *LeaseServer) leaseKeepAlive(stream pb.Lease_LeaseKeepAliveServer) erro
 			return nil
 			return nil
 		}
 		}
 		if err != nil {
 		if err != nil {
-			plog.Debugf("failed to receive lease keepalive request from gRPC stream (%q)", err.Error())
+			if isClientCtxErr(stream.Context().Err(), err) {
+				plog.Debugf("failed to receive lease 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
 			return err
 		}
 		}
 
 
@@ -133,7 +137,11 @@ func (ls *LeaseServer) leaseKeepAlive(stream pb.Lease_LeaseKeepAliveServer) erro
 		resp.TTL = ttl
 		resp.TTL = ttl
 		err = stream.Send(resp)
 		err = stream.Send(resp)
 		if err != nil {
 		if err != nil {
-			plog.Debugf("failed to send lease keepalive response to gRPC stream (%q)", err.Error())
+			if isClientCtxErr(stream.Context().Err(), err) {
+				plog.Debugf("failed to send lease keepalive response to gRPC stream (%q)", err.Error())
+			} else {
+				plog.Warningf("failed to send lease keepalive response to gRPC stream (%q)", err.Error())
+			}
 			return err
 			return err
 		}
 		}
 	}
 	}

+ 13 - 0
etcdserver/api/v3rpc/util.go

@@ -81,3 +81,16 @@ func togRPCError(err error) error {
 	}
 	}
 	return grpcErr
 	return grpcErr
 }
 }
+
+func isClientCtxErr(ctxErr error, err error) bool {
+	if ctxErr != nil {
+		return true
+	}
+
+	ev, ok := status.FromError(err)
+	if !ok {
+		return false
+	}
+	code := ev.Code()
+	return code == codes.Canceled || code == codes.DeadlineExceeded
+}

+ 20 - 4
etcdserver/api/v3rpc/watch.go

@@ -140,7 +140,11 @@ func (ws *watchServer) Watch(stream pb.Watch_WatchServer) (err error) {
 	// deadlock when calling sws.close().
 	// deadlock when calling sws.close().
 	go func() {
 	go func() {
 		if rerr := sws.recvLoop(); rerr != nil {
 		if rerr := sws.recvLoop(); rerr != nil {
-			plog.Debugf("failed to receive watch request from gRPC stream (%q)", rerr.Error())
+			if isClientCtxErr(stream.Context().Err(), rerr) {
+				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())
+			}
 			errc <- rerr
 			errc <- rerr
 		}
 		}
 	}()
 	}()
@@ -342,7 +346,11 @@ func (sws *serverWatchStream) sendLoop() {
 
 
 			mvcc.ReportEventReceived(len(evs))
 			mvcc.ReportEventReceived(len(evs))
 			if err := sws.gRPCStream.Send(wr); err != nil {
 			if err := sws.gRPCStream.Send(wr); err != nil {
-				plog.Debugf("failed to send watch response to gRPC stream (%q)", err.Error())
+				if isClientCtxErr(sws.gRPCStream.Context().Err(), err) {
+					plog.Debugf("failed to send watch response to gRPC stream (%q)", err.Error())
+				} else {
+					plog.Warningf("failed to send watch response to gRPC stream (%q)", err.Error())
+				}
 				return
 				return
 			}
 			}
 
 
@@ -359,7 +367,11 @@ func (sws *serverWatchStream) sendLoop() {
 			}
 			}
 
 
 			if err := sws.gRPCStream.Send(c); err != nil {
 			if err := sws.gRPCStream.Send(c); err != nil {
-				plog.Debugf("failed to send watch control response to gRPC stream (%q)", err.Error())
+				if isClientCtxErr(sws.gRPCStream.Context().Err(), err) {
+					plog.Debugf("failed to send watch control response to gRPC stream (%q)", err.Error())
+				} else {
+					plog.Warningf("failed to send watch control response to gRPC stream (%q)", err.Error())
+				}
 				return
 				return
 			}
 			}
 
 
@@ -375,7 +387,11 @@ func (sws *serverWatchStream) sendLoop() {
 				for _, v := range pending[wid] {
 				for _, v := range pending[wid] {
 					mvcc.ReportEventReceived(len(v.Events))
 					mvcc.ReportEventReceived(len(v.Events))
 					if err := sws.gRPCStream.Send(v); err != nil {
 					if err := sws.gRPCStream.Send(v); err != nil {
-						plog.Debugf("failed to send pending watch response to gRPC stream (%q)", err.Error())
+						if isClientCtxErr(sws.gRPCStream.Context().Err(), err) {
+							plog.Debugf("failed to send pending watch response to gRPC stream (%q)", err.Error())
+						} else {
+							plog.Warningf("failed to send pending watch response to gRPC stream (%q)", err.Error())
+						}
 						return
 						return
 					}
 					}
 				}
 				}