浏览代码

Merge pull request #7103 from heyitsanthony/proxy-watch-close

grpcproxy: tear down watch when client context is done
Anthony Romano 9 年之前
父节点
当前提交
5feb4e1027
共有 1 个文件被更改,包括 12 次插入12 次删除
  1. 12 12
      proxy/grpcproxy/watch.go

+ 12 - 12
proxy/grpcproxy/watch.go

@@ -122,23 +122,23 @@ func (wp *watchProxy) Watch(stream pb.Watch_WatchServer) (err error) {
 		defer func() { stopc <- struct{}{} }()
 		wps.sendLoop()
 	}()
-	if leaderc != nil {
-		go func() {
-			defer func() { stopc <- struct{}{} }()
-			select {
-			case <-leaderc:
-			case <-ctx.Done():
-			}
-		}()
-	}
+	// tear down watch if leader goes down or entire watch proxy is terminated
+	go func() {
+		defer func() { stopc <- struct{}{} }()
+		select {
+		case <-leaderc:
+		case <-ctx.Done():
+		case <-wp.ctx.Done():
+		}
+	}()
 
 	<-stopc
+	cancel()
+
 	// recv/send may only shutdown after function exits;
 	// goroutine notifies proxy that stream is through
 	go func() {
-		if leaderc != nil {
-			<-stopc
-		}
+		<-stopc
 		<-stopc
 		wps.close()
 		wp.wg.Done()