Browse Source

Merge pull request #3897 from xiang90/fix_watch

v3rpc: do not send closing event
Xiang Li 10 years ago
parent
commit
11d00c7919
1 changed files with 13 additions and 1 deletions
  1. 13 1
      etcdserver/api/v3rpc/watch.go

+ 13 - 1
etcdserver/api/v3rpc/watch.go

@@ -61,12 +61,24 @@ func (ws *watchServer) Watch(stream pb.Watch_WatchServer) error {
 func sendLoop(stream pb.Watch_WatchServer, watcher storage.Watcher, closec chan struct{}) {
 	for {
 		select {
-		case e := <-watcher.Chan():
+		case e, ok := <-watcher.Chan():
+			if !ok {
+				return
+			}
 			err := stream.Send(&pb.WatchResponse{Event: &e})
+			storage.ReportEventReceived()
 			if err != nil {
 				return
 			}
 		case <-closec:
+			// drain the chan to clean up pending events
+			for {
+				_, ok := <-watcher.Chan()
+				if !ok {
+					return
+				}
+				storage.ReportEventReceived()
+			}
 			return
 		}
 	}