瀏覽代碼

grpcproxy: only coalesce watchers that have received create response

Current watchers may have nextrev=0; check response count instead.
Anthony Romano 9 年之前
父節點
當前提交
e40da39143
共有 1 個文件被更改,包括 4 次插入2 次删除
  1. 4 2
      proxy/grpcproxy/watch_broadcasts.go

+ 4 - 2
proxy/grpcproxy/watch_broadcasts.go

@@ -60,8 +60,10 @@ func (wbs *watchBroadcasts) coalesce(wb *watchBroadcast) {
 			continue
 		}
 		wbswb.mu.Lock()
-		// NB: victim lock already held
-		if wb.nextrev >= wbswb.nextrev && wbswb.nextrev != 0 {
+		// 1. check if wbswb is behind wb so it won't skip any events in wb
+		// 2. ensure wbswb started; nextrev == 0 may mean wbswb is waiting
+		// for a current watcher and expects a create event from the server.
+		if wb.nextrev >= wbswb.nextrev && wbswb.responses > 0 {
 			for w := range wb.receivers {
 				wbswb.receivers[w] = struct{}{}
 				wbs.watchers[w] = wbswb