diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index 439bea9b999..4ec5ca37d60 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -1003,8 +1003,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 7b8603fde74..a3dac4f5447 100644 --- a/pkg/features/versioned_kube_features.go +++ b/pkg/features/versioned_kube_features.go @@ -438,4 +438,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 5ec3bf65956..80bd5117357 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" @@ -300,6 +301,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. @@ -337,8 +343,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/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 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 00d6f8c8c7e..f51f723d8d2 100644 --- a/test/featuregates_linter/test_data/versioned_feature_list.yaml +++ b/test/featuregates_linter/test_data/versioned_feature_list.yaml @@ -706,6 +706,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