From e3cae09e63d72edef9cf841979418291acc31b17 Mon Sep 17 00:00:00 2001 From: Joe Betz Date: Tue, 10 Sep 2024 12:34:36 -0400 Subject: [PATCH 1/2] Promote RetryGenerateName to GA --- pkg/features/kube_features.go | 2 -- pkg/features/versioned_kube_features.go | 5 +++++ .../k8s.io/apiserver/pkg/features/kube_features.go | 8 ++++++-- .../test_data/unversioned_feature_list.yaml | 6 ------ .../test_data/versioned_feature_list.yaml | 14 ++++++++++++++ 5 files changed, 25 insertions(+), 10 deletions(-) diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index 8fbe2673c26..8b9c757a7d4 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -1002,8 +1002,6 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS genericfeatures.ResilientWatchCacheInitialization: {Default: true, PreRelease: featuregate.Beta}, - genericfeatures.RetryGenerateName: {Default: true, PreRelease: featuregate.Beta}, - genericfeatures.SeparateCacheWatchRPC: {Default: true, PreRelease: featuregate.Beta}, genericfeatures.StorageVersionAPI: {Default: false, PreRelease: featuregate.Alpha}, diff --git a/pkg/features/versioned_kube_features.go b/pkg/features/versioned_kube_features.go index 048474947c6..634dbaad1a9 100644 --- a/pkg/features/versioned_kube_features.go +++ b/pkg/features/versioned_kube_features.go @@ -431,4 +431,9 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate KubeletRegistrationGetOnExistsOnly: { {Version: version.MustParse("1.32"), Default: false, PreRelease: featuregate.Deprecated}, }, + genericfeatures.RetryGenerateName: { + {Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Alpha}, + {Version: version.MustParse("1.31"), Default: true, PreRelease: featuregate.Beta}, + {Version: version.MustParse("1.32"), Default: true, LockToDefault: true, PreRelease: featuregate.GA}, + }, } diff --git a/staging/src/k8s.io/apiserver/pkg/features/kube_features.go b/staging/src/k8s.io/apiserver/pkg/features/kube_features.go index 3749145f116..7a323328ef8 100644 --- a/staging/src/k8s.io/apiserver/pkg/features/kube_features.go +++ b/staging/src/k8s.io/apiserver/pkg/features/kube_features.go @@ -189,6 +189,7 @@ const ( // owner: @jpbetz // alpha: v1.30 // beta: v1.31 + // ga: v1.32 // Resource create requests using generateName are retried automatically by the apiserver // if the generated name conflicts with an existing resource name, up to a maximum number of 7 retries. RetryGenerateName featuregate.Feature = "RetryGenerateName" @@ -307,6 +308,11 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate {Version: version.MustParse("1.31"), Default: false, PreRelease: featuregate.Alpha}, {Version: version.MustParse("1.32"), Default: true, PreRelease: featuregate.Beta}, }, + RetryGenerateName: { + {Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Alpha}, + {Version: version.MustParse("1.31"), Default: true, PreRelease: featuregate.Beta}, + {Version: version.MustParse("1.32"), Default: true, LockToDefault: true, PreRelease: featuregate.GA}, + }, } // defaultKubernetesFeatureGates consists of all known Kubernetes-specific feature keys. @@ -344,8 +350,6 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS ResilientWatchCacheInitialization: {Default: true, PreRelease: featuregate.Beta}, - RetryGenerateName: {Default: true, PreRelease: featuregate.Beta}, - SeparateCacheWatchRPC: {Default: true, PreRelease: featuregate.Beta}, StorageVersionAPI: {Default: false, PreRelease: featuregate.Alpha}, diff --git a/test/featuregates_linter/test_data/unversioned_feature_list.yaml b/test/featuregates_linter/test_data/unversioned_feature_list.yaml index ab64d8e6f7e..064657c462d 100644 --- a/test/featuregates_linter/test_data/unversioned_feature_list.yaml +++ b/test/featuregates_linter/test_data/unversioned_feature_list.yaml @@ -178,12 +178,6 @@ lockToDefault: false preRelease: Beta version: "" -- name: RetryGenerateName - versionedSpecs: - - default: true - lockToDefault: false - preRelease: Beta - version: "" - name: SeparateCacheWatchRPC versionedSpecs: - default: true diff --git a/test/featuregates_linter/test_data/versioned_feature_list.yaml b/test/featuregates_linter/test_data/versioned_feature_list.yaml index e0dc157f936..2b7911bf29e 100644 --- a/test/featuregates_linter/test_data/versioned_feature_list.yaml +++ b/test/featuregates_linter/test_data/versioned_feature_list.yaml @@ -700,6 +700,20 @@ lockToDefault: false preRelease: Alpha version: "1.31" +- name: RetryGenerateName + versionedSpecs: + - default: false + lockToDefault: false + preRelease: Alpha + version: "1.30" + - default: true + lockToDefault: false + preRelease: Beta + version: "1.31" + - default: true + lockToDefault: true + preRelease: GA + version: "1.32" - name: RotateKubeletServerCertificate versionedSpecs: - default: false From 0d14bac9a606cd49e6c346c1220ebdbf1b18fa09 Mon Sep 17 00:00:00 2001 From: Joe Betz Date: Thu, 19 Sep 2024 11:34:59 -0400 Subject: [PATCH 2/2] Preserve testing of RetryGenerateName feature disablement --- .../apiserver/pkg/registry/generic/registry/store_test.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store_test.go b/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store_test.go index 7ef8544994a..e11cf8d3de7 100644 --- a/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store_test.go +++ b/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store_test.go @@ -45,6 +45,7 @@ import ( "k8s.io/apimachinery/pkg/selection" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apimachinery/pkg/util/version" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apiserver/pkg/apis/example" examplev1 "k8s.io/apiserver/pkg/apis/example/v1" @@ -447,6 +448,8 @@ func TestStoreCreateWithRetryNameGenerate(t *testing.T) { } func TestStoreCreateWithRetryNameGenerateFeatureDisabled(t *testing.T) { + // Preserve testing of disabled RetryGenerateName feature gate since it can still be disabled when emulation version is set. + featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.31")) featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.RetryGenerateName, false) namedObj := func(id int) *example.Pod { return &example.Pod{ @@ -2981,6 +2984,8 @@ func (p *predictableNameGenerator) GenerateName(base string) string { } func TestStoreCreateGenerateNameConflict(t *testing.T) { + // Preserve testing of disabled RetryGenerateName feature gate since it can still be disabled when emulation version is set. + featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.31")) featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.RetryGenerateName, false) // podA will be stored with name foo12345