Kaynağa Gözat

Merge pull request #6842 from heyitsanthony/watch-prevkv

grpcproxy: support prevKV watcher
Anthony Romano 9 yıl önce
ebeveyn
işleme
a2e86c1371

+ 1 - 0
proxy/grpcproxy/watch.go

@@ -211,6 +211,7 @@ func (wps *watchProxyStream) recvLoop() error {
 
 				nextrev:  cr.StartRevision,
 				progress: cr.ProgressNotify,
+				prevKV:   cr.PrevKv,
 				filters:  v3rpc.FiltersFromRequest(cr),
 			}
 			if !w.wr.valid() {

+ 1 - 0
proxy/grpcproxy/watch_broadcast.go

@@ -59,6 +59,7 @@ func newWatchBroadcast(wp *watchProxy, w *watcher, update func(*watchBroadcast))
 				clientv3.WithProgressNotify(),
 				clientv3.WithCreatedNotify(),
 				clientv3.WithRev(wb.nextrev),
+				clientv3.WithPrevKV(),
 			)
 			for wr := range wch {
 				wb.bcast(wr)

+ 13 - 8
proxy/grpcproxy/watcher.go

@@ -37,6 +37,7 @@ type watcher struct {
 	wr       watchRange
 	filters  []mvcc.FilterFunc
 	progress bool
+	prevKV   bool
 
 	// id is the id returned to the client on its watch stream.
 	id int64
@@ -78,18 +79,22 @@ func (w *watcher) send(wr clientv3.WatchResponse) {
 		}
 
 		filtered := false
-		if len(w.filters) != 0 {
-			for _, filter := range w.filters {
-				if filter(*ev) {
-					filtered = true
-					break
-				}
+		for _, filter := range w.filters {
+			if filter(*ev) {
+				filtered = true
+				break
 			}
 		}
+		if filtered {
+			continue
+		}
 
-		if !filtered {
-			events = append(events, ev)
+		if !w.prevKV {
+			evCopy := *ev
+			evCopy.PrevKv = nil
+			ev = &evCopy
 		}
+		events = append(events, ev)
 	}
 
 	if lastRev >= w.nextrev {