Browse Source

clientv3: only update initReq.rev == 0 with creation watch revision

Always updating the initReq.rev on watch create will resume from the wrong
revision if initReq is ever nonzero.
Anthony Romano 8 years ago
parent
commit
4ab818a856
1 changed files with 10 additions and 1 deletions
  1. 10 1
      clientv3/watch.go

+ 10 - 1
clientv3/watch.go

@@ -615,11 +615,20 @@ func (w *watchGrpcStream) serveSubstream(ws *watcherStream, resumec chan struct{
 					// send first creation event only if requested
 					// send first creation event only if requested
 					if ws.initReq.createdNotify {
 					if ws.initReq.createdNotify {
 						ws.outc <- *wr
 						ws.outc <- *wr
+						if ws.initReq.rev == 0 {
+							// current revision of store; returning the
+							// create response binds the current revision to
+							// this revision, so restart with it if there's a
+							// disconnect before receiving any events.
+							nextRev = wr.Header.Revision
+						}
 					}
 					}
 				}
 				}
+			} else {
+				// current progress of watch; <= store revision
+				nextRev = wr.Header.Revision
 			}
 			}
 
 
-			nextRev = wr.Header.Revision
 			if len(wr.Events) > 0 {
 			if len(wr.Events) > 0 {
 				nextRev = wr.Events[len(wr.Events)-1].Kv.ModRevision + 1
 				nextRev = wr.Events[len(wr.Events)-1].Kv.ModRevision + 1
 			}
 			}