From d66ced5730fa60c04b0a39df58a156b7045585f6 Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Tue, 14 Jan 2025 14:06:31 +0100 Subject: [PATCH] client-go/tools/cache: fix TestAddWhileActive 4638ba971661497b147906b8977ae206c9dd6e44 added tracking of the goroutine which executes informer.Run. In the TestAddWhileActive the original `go informer.Run()` was left in place, causing a data race between the two `informer.Run` instances: ================== WARNING: DATA RACE Read at 0x00c000262398 by goroutine 5302: k8s.io/client-go/tools/cache.(*controller).RunWithContext() /home/prow/go/src/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/controller.go:162 +0x1ad k8s.io/client-go/tools/cache.(*sharedIndexInformer).RunWithContext() /home/prow/go/src/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/shared_informer.go:584 +0x6c5 k8s.io/client-go/tools/cache.(*sharedIndexInformer).Run() /home/prow/go/src/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/shared_informer.go:527 +0x48 k8s.io/client-go/tools/cache.TestAddWhileActive.gowrap1() /home/prow/go/src/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/shared_informer_test.go:1080 +0x17 Previous write at 0x00c000262398 by goroutine 5301: k8s.io/client-go/tools/cache.New() /home/prow/go/src/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/controller.go:142 +0x9de k8s.io/client-go/tools/cache.(*sharedIndexInformer).RunWithContext.func1() /home/prow/go/src/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/shared_informer.go:562 +0xa78 k8s.io/client-go/tools/cache.(*sharedIndexInformer).RunWithContext() /home/prow/go/src/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/shared_informer.go:565 +0x119 k8s.io/client-go/tools/cache.(*sharedIndexInformer).Run() /home/prow/go/src/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/shared_informer.go:527 +0x44 k8s.io/client-go/tools/cache.(*sharedIndexInformer).Run-fm() :1 +0x17 k8s.io/client-go/tools/cache.TestAddWhileActive.(*Group).StartWithChannel.func2() /home/prow/go/src/k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/util/wait/wait.go:55 +0x38 k8s.io/apimachinery/pkg/util/wait.(*Group).Start.func1() /home/prow/go/src/k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/util/wait/wait.go:72 +0x86 Goroutine 5302 (running) created at: k8s.io/client-go/tools/cache.TestAddWhileActive() /home/prow/go/src/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/shared_informer_test.go:1080 +0x93e testing.tRunner() /usr/local/go/src/testing/testing.go:1690 +0x226 testing.(*T).Run.gowrap1() /usr/local/go/src/testing/testing.go:1743 +0x44 Goroutine 5301 (running) created at: k8s.io/apimachinery/pkg/util/wait.(*Group).Start() /home/prow/go/src/k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/util/wait/wait.go:70 +0xe4 k8s.io/apimachinery/pkg/util/wait.(*Group).StartWithChannel() /home/prow/go/src/k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/util/wait/wait.go:54 +0x7e6 k8s.io/client-go/tools/cache.TestAddWhileActive() /home/prow/go/src/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/shared_informer_test.go:1074 +0x6a1 testing.tRunner() /usr/local/go/src/testing/testing.go:1690 +0x226 testing.(*T).Run.gowrap1() /usr/local/go/src/testing/testing.go:1743 +0x44 ================== --- staging/src/k8s.io/client-go/tools/cache/shared_informer_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/staging/src/k8s.io/client-go/tools/cache/shared_informer_test.go b/staging/src/k8s.io/client-go/tools/cache/shared_informer_test.go index d17db6bdd94..39f4eabce4e 100644 --- a/staging/src/k8s.io/client-go/tools/cache/shared_informer_test.go +++ b/staging/src/k8s.io/client-go/tools/cache/shared_informer_test.go @@ -1077,7 +1077,6 @@ func TestAddWhileActive(t *testing.T) { wg.Wait() }() - go informer.Run(stop) source.Add(&v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "pod1"}}) if !listener1.ok() {