![]() Doing the initialization once was not good enough because it was not guaranteed that RunCustomEtcd gets called early enough, before there are other goroutines which use gRPC. The data race for test/integration/apiserver.TestWatchCacheUpdatedByEtcd was: WARNING: DATA RACE Read at 0x00000cfffb90 by goroutine 140052: k8s.io/kubernetes/vendor/google.golang.org/grpc/grpclog.V() /home/prow/go/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/vendor/google.golang.org/grpc/grpclog/grpclog.go:41 +0x30 k8s.io/kubernetes/vendor/google.golang.org/grpc/grpclog.(*componentData).V() /home/prow/go/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/vendor/google.golang.org/grpc/grpclog/component.go:103 +0x4e k8s.io/kubernetes/vendor/google.golang.org/grpc/internal/transport.(*http2Client).Close() /home/prow/go/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/vendor/google.golang.org/grpc/internal/transport/http2_client.go:955 +0xca k8s.io/kubernetes/vendor/google.golang.org/grpc/internal/transport.(*http2Client).reader() /home/prow/go/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/vendor/google.golang.org/grpc/internal/transport/http2_client.go:1619 +0xbfb k8s.io/kubernetes/vendor/google.golang.org/grpc/internal/transport.newHTTP2Client.func11() /home/prow/go/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/vendor/google.golang.org/grpc/internal/transport/http2_client.go:394 +0x47 Previous write at 0x00000cfffb90 by goroutine 145643: k8s.io/kubernetes/vendor/google.golang.org/grpc/grpclog.SetLoggerV2() /home/prow/go/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/vendor/google.golang.org/grpc/grpclog/loggerv2.go:75 +0x104 k8s.io/kubernetes/test/integration/framework.RunCustomEtcd.func2() /home/prow/go/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/test/integration/framework/etcd.go:157 +0x33 sync.(*Once).doSlow() /usr/local/go/src/sync/once.go:74 +0x101 sync.(*Once).Do() /usr/local/go/src/sync/once.go:65 +0x46 k8s.io/kubernetes/test/integration/framework.RunCustomEtcd() /home/prow/go/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/test/integration/framework/etcd.go:156 +0xb97 k8s.io/kubernetes/test/integration/apiserver.multiEtcdSetup() /home/prow/go/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/test/integration/apiserver/watchcache_test.go:41 +0xc4 k8s.io/kubernetes/test/integration/apiserver.TestWatchCacheUpdatedByEtcd() /home/prow/go/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/test/integration/apiserver/watchcache_test.go:92 +0xa9 testing.tRunner() /usr/local/go/src/testing/testing.go:1576 +0x216 testing.(*T).Run.func1() /usr/local/go/src/testing/testing.go:1629 +0x47 |
||
---|---|---|
.. | ||
controlplane_utils.go | ||
etcd.go | ||
flags.go | ||
goleak.go | ||
logger.go | ||
OWNERS | ||
perf_utils.go | ||
serializer.go | ||
test_server.go | ||
util.go |