From c2654a6851e65497ccfeb6804d94c433819155a5 Mon Sep 17 00:00:00 2001 From: Ben Luddy Date: Wed, 10 Nov 2021 16:48:49 -0500 Subject: [PATCH] Fix flake caused by sampling signal counter too early. TestFlowControlSignal has been flaking occasionally (somewhere around 0.5% on my machine using golang.org/x/tools/cmd/stress with -p 20). The intent was to sample the number of times the signal fired at the moment a backend receives a connection from the proxy as an alternative to test doubles, but the signal count was being sampled (and recorded) immediately on calls to (net.Listener).Accept() -- before blocking -- instead of immediately after unblocking. The flake no longer occurs on my machine (again, using stress -p 20) with this patch. --- .../pkg/apiserver/handler_proxy_test.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy_test.go b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy_test.go index f5a832bf7ed..3b469699c5d 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy_test.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy_test.go @@ -921,8 +921,11 @@ type hookedListener struct { } func (wl *hookedListener) Accept() (net.Conn, error) { - wl.onAccept() - return wl.l.Accept() + conn, err := wl.l.Accept() + if err == nil { + wl.onAccept() + } + return conn, err } func (wl *hookedListener) Close() error { @@ -1015,10 +1018,13 @@ func TestFlowControlSignal(t *testing.T) { req := tc.Request req.URL = surl - _, err = server.Client().Do(&req) + res, err := server.Client().Do(&req) if err != nil { t.Fatalf("unexpected error: %v", err) } + if err := res.Body.Close(); err != nil { + t.Fatalf("unexpected error: %v", err) + } if fired := (atomic.LoadInt32(&signalCountOnAccept) > 0); tc.SignalExpected && !fired { t.Errorf("flow control signal expected but not fired")