From 2ca513a15d0afb281e7e99f8a7a76def36617b61 Mon Sep 17 00:00:00 2001 From: Ziheng Liu Date: Mon, 28 Oct 2019 19:06:43 -0400 Subject: [PATCH] Prevent 2 goroutines from being leaked if proxy hangs Signed-off-by: Ziheng Liu --- test/e2e/framework/kubelet/stats.go | 5 ++--- test/e2e/framework/metrics/kubelet_metrics.go | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/test/e2e/framework/kubelet/stats.go b/test/e2e/framework/kubelet/stats.go index f3171a1915c..e0e66445748 100644 --- a/test/e2e/framework/kubelet/stats.go +++ b/test/e2e/framework/kubelet/stats.go @@ -89,10 +89,9 @@ type RuntimeOperationErrorRate struct { // ProxyRequest performs a get on a node proxy endpoint given the nodename and rest client. func ProxyRequest(c clientset.Interface, node, endpoint string, port int) (restclient.Result, error) { - // proxy tends to hang in some cases when Node is not ready. Add an artificial timeout for this call. - // This will leak a goroutine if proxy hangs. #22165 + // proxy tends to hang in some cases when Node is not ready. Add an artificial timeout for this call. #22165 var result restclient.Result - finished := make(chan struct{}) + finished := make(chan struct{}, 1) go func() { result = c.CoreV1().RESTClient().Get(). Resource("nodes"). diff --git a/test/e2e/framework/metrics/kubelet_metrics.go b/test/e2e/framework/metrics/kubelet_metrics.go index ada354f66ae..a023e3a4770 100644 --- a/test/e2e/framework/metrics/kubelet_metrics.go +++ b/test/e2e/framework/metrics/kubelet_metrics.go @@ -76,8 +76,7 @@ func parseKubeletMetrics(data string) (KubeletMetrics, error) { func (g *Grabber) getMetricsFromNode(nodeName string, kubeletPort int) (string, error) { // There's a problem with timing out during proxy. Wrapping this in a goroutine to prevent deadlock. - // Hanging goroutine will be leaked. - finished := make(chan struct{}) + finished := make(chan struct{}, 1) var err error var rawOutput []byte go func() {