From f351c6d1eccd196fb7a9ac89097b05690b03babb Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Fri, 2 Jun 2023 16:52:21 +0200 Subject: [PATCH] k8s.io/apiserver: apply storage object count tracker implicitly --- cmd/kube-apiserver/app/server.go | 3 ++- pkg/controlplane/instance_test.go | 4 ++-- .../src/k8s.io/apiserver/pkg/server/options/etcd.go | 11 ++++++----- .../k8s.io/apiserver/pkg/server/options/etcd_test.go | 4 ++-- .../apiserver/pkg/server/options/recommended.go | 2 +- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index da420e82162..634722127f5 100644 --- a/cmd/kube-apiserver/app/server.go +++ b/cmd/kube-apiserver/app/server.go @@ -402,12 +402,13 @@ func buildGenericConfig( } else { s.Etcd.StorageConfig.Transport.TracerProvider = oteltrace.NewNoopTracerProvider() } - if lastErr = s.Etcd.Complete(genericConfig.StorageObjectCountTracker, genericConfig.DrainedNotify(), genericConfig.AddPostStartHook); lastErr != nil { + if lastErr = s.Etcd.Complete(genericConfig.DrainedNotify(), genericConfig.AddPostStartHook); lastErr != nil { return } storageFactoryConfig := kubeapiserver.NewStorageFactoryConfig() storageFactoryConfig.APIResourceConfig = genericConfig.MergedResourceConfig + storageFactoryConfig.StorageConfig.StorageObjectCountTracker = genericConfig.StorageObjectCountTracker storageFactory, lastErr = storageFactoryConfig.Complete(s.Etcd).New() if lastErr != nil { return diff --git a/pkg/controlplane/instance_test.go b/pkg/controlplane/instance_test.go index 1a7eda254cd..1655b92b5ee 100644 --- a/pkg/controlplane/instance_test.go +++ b/pkg/controlplane/instance_test.go @@ -88,13 +88,13 @@ func setUp(t *testing.T) (*etcd3testing.EtcdTestServer, Config, *assert.Assertio } storageFactoryConfig := kubeapiserver.NewStorageFactoryConfig() + storageConfig.StorageObjectCountTracker = config.GenericConfig.StorageObjectCountTracker resourceEncoding := resourceconfig.MergeResourceEncodingConfigs(storageFactoryConfig.DefaultResourceEncoding, storageFactoryConfig.ResourceEncodingOverrides) storageFactory := serverstorage.NewDefaultStorageFactory(*storageConfig, "application/vnd.kubernetes.protobuf", storageFactoryConfig.Serializer, resourceEncoding, DefaultAPIResourceConfigSource(), nil) - etcdOptions := options.NewEtcdOptions(storageConfig) // unit tests don't need watch cache and it leaks lots of goroutines with etcd testing functions during unit tests etcdOptions.EnableWatchCache = false - if err := etcdOptions.Complete(config.GenericConfig.StorageObjectCountTracker, config.GenericConfig.DrainedNotify(), config.GenericConfig.AddPostStartHook); err != nil { + if err := etcdOptions.Complete(config.GenericConfig.DrainedNotify(), config.GenericConfig.AddPostStartHook); err != nil { t.Fatal(err) } err := etcdOptions.ApplyWithStorageFactoryTo(storageFactory, config.GenericConfig) diff --git a/staging/src/k8s.io/apiserver/pkg/server/options/etcd.go b/staging/src/k8s.io/apiserver/pkg/server/options/etcd.go index 6aabbf255be..26e1701b5ce 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/options/etcd.go +++ b/staging/src/k8s.io/apiserver/pkg/server/options/etcd.go @@ -38,7 +38,6 @@ import ( serverstorage "k8s.io/apiserver/pkg/server/storage" "k8s.io/apiserver/pkg/storage/storagebackend" storagefactory "k8s.io/apiserver/pkg/storage/storagebackend/factory" - flowcontrolrequest "k8s.io/apiserver/pkg/util/flowcontrol/request" "k8s.io/klog/v2" ) @@ -216,7 +215,6 @@ func (s *EtcdOptions) AddFlags(fs *pflag.FlagSet) { // up objects that must be created once and reused across multiple invocations such as storage transformers. // This method mutates the receiver (EtcdOptions). It must never mutate the inputs. func (s *EtcdOptions) Complete( - storageObjectCountTracker flowcontrolrequest.StorageObjectCountTracker, stopCh <-chan struct{}, addPostStartHook func(name string, hook server.PostStartHookFunc) error, ) error { @@ -283,8 +281,6 @@ func (s *EtcdOptions) Complete( } } - s.StorageConfig.StorageObjectCountTracker = storageObjectCountTracker - s.complete = true // nolint:govet // The only code path where closeTransformers does not get called is when it gets stored in dynamicTransformers. @@ -297,7 +293,12 @@ func (s *EtcdOptions) ApplyTo(c *server.Config) error { return nil } - return s.ApplyWithStorageFactoryTo(&SimpleStorageFactory{StorageConfig: s.StorageConfig}, c) + storageConfig := s.StorageConfig + if storageConfig.StorageObjectCountTracker == nil { + storageConfig.StorageObjectCountTracker = c.StorageObjectCountTracker + } + + return s.ApplyWithStorageFactoryTo(&SimpleStorageFactory{StorageConfig: storageConfig}, c) } // ApplyWithStorageFactoryTo mutates the provided server.Config. It must never mutate the receiver (EtcdOptions). diff --git a/staging/src/k8s.io/apiserver/pkg/server/options/etcd_test.go b/staging/src/k8s.io/apiserver/pkg/server/options/etcd_test.go index 884d2d4c829..06434e0f615 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/options/etcd_test.go +++ b/staging/src/k8s.io/apiserver/pkg/server/options/etcd_test.go @@ -306,7 +306,7 @@ func TestKMSHealthzEndpoint(t *testing.T) { EncryptionProviderConfigAutomaticReload: tc.reload, SkipHealthEndpoints: tc.skipHealth, } - if err := etcdOptions.Complete(serverConfig.StorageObjectCountTracker, serverConfig.DrainedNotify(), serverConfig.AddPostStartHook); err != nil { + if err := etcdOptions.Complete(serverConfig.DrainedNotify(), serverConfig.AddPostStartHook); err != nil { t.Fatal(err) } if err := etcdOptions.ApplyTo(serverConfig); err != nil { @@ -345,7 +345,7 @@ func TestReadinessCheck(t *testing.T) { t.Run(tc.name, func(t *testing.T) { serverConfig := server.NewConfig(codecs) etcdOptions := &EtcdOptions{SkipHealthEndpoints: tc.skipHealth} - if err := etcdOptions.Complete(serverConfig.StorageObjectCountTracker, serverConfig.DrainedNotify(), serverConfig.AddPostStartHook); err != nil { + if err := etcdOptions.Complete(serverConfig.DrainedNotify(), serverConfig.AddPostStartHook); err != nil { t.Fatal(err) } if err := etcdOptions.ApplyTo(serverConfig); err != nil { diff --git a/staging/src/k8s.io/apiserver/pkg/server/options/recommended.go b/staging/src/k8s.io/apiserver/pkg/server/options/recommended.go index 073c2180d5e..82e4b955013 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/options/recommended.go +++ b/staging/src/k8s.io/apiserver/pkg/server/options/recommended.go @@ -101,7 +101,7 @@ func (o *RecommendedOptions) AddFlags(fs *pflag.FlagSet) { // ApplyTo adds RecommendedOptions to the server configuration. // pluginInitializers can be empty, it is only need for additional initializers. func (o *RecommendedOptions) ApplyTo(config *server.RecommendedConfig) error { - if err := o.Etcd.Complete(config.Config.StorageObjectCountTracker, config.Config.DrainedNotify(), config.Config.AddPostStartHook); err != nil { + if err := o.Etcd.Complete(config.Config.DrainedNotify(), config.Config.AddPostStartHook); err != nil { return err } if err := o.Etcd.ApplyTo(&config.Config); err != nil {