Skip to content

Commit d04883c

Browse files
authored
Merge pull request kubernetes#130061 from mimowo/make-backoffperindex-stable
Graduate Backoff Limit Per Index as stable
2 parents 2fc329c + d44ac38 commit d04883c

File tree

15 files changed

+106
-48
lines changed

15 files changed

+106
-48
lines changed

api/openapi-spec/swagger.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/openapi-spec/v3/apis__batch__v1_openapi.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/apis/batch/types.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,6 @@ const (
132132
// This is an action which might be taken on a pod failure - mark the
133133
// Job's index as failed to avoid restarts within this index. This action
134134
// can only be used when backoffLimitPerIndex is set.
135-
// This value is beta-level.
136135
PodFailurePolicyActionFailIndex PodFailurePolicyAction = "FailIndex"
137136

138137
// This is an action which might be taken on a pod failure - the counter towards
@@ -226,8 +225,6 @@ type PodFailurePolicyRule struct {
226225
// running pods are terminated.
227226
// - FailIndex: indicates that the pod's index is marked as Failed and will
228227
// not be restarted.
229-
// This value is beta-level. It can be used when the
230-
// `JobBackoffLimitPerIndex` feature gate is enabled (enabled by default).
231228
// - Ignore: indicates that the counter towards the .backoffLimit is not
232229
// incremented and a replacement pod is created.
233230
// - Count: indicates that the pod is handled in the default way - the
@@ -363,8 +360,6 @@ type JobSpec struct {
363360
// batch.kubernetes.io/job-index-failure-count annotation. It can only
364361
// be set when Job's completionMode=Indexed, and the Pod's restart
365362
// policy is Never. The field is immutable.
366-
// This field is beta-level. It can be used when the `JobBackoffLimitPerIndex`
367-
// feature gate is enabled (enabled by default).
368363
// +optional
369364
BackoffLimitPerIndex *int32
370365

@@ -376,8 +371,6 @@ type JobSpec struct {
376371
// It can only be specified when backoffLimitPerIndex is set.
377372
// It can be null or up to completions. It is required and must be
378373
// less than or equal to 10^4 when is completions greater than 10^5.
379-
// This field is beta-level. It can be used when the `JobBackoffLimitPerIndex`
380-
// feature gate is enabled (enabled by default).
381374
// +optional
382375
MaxFailedIndexes *int32
383376

@@ -571,8 +564,6 @@ type JobStatus struct {
571564
// represented as "1,3-5,7".
572565
// The set of failed indexes cannot overlap with the set of completed indexes.
573566
//
574-
// This field is beta-level. It can be used when the `JobBackoffLimitPerIndex`
575-
// feature gate is enabled (enabled by default).
576567
// +optional
577568
FailedIndexes *string
578569

pkg/controller/job/job_controller_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2437,6 +2437,10 @@ func TestTrackJobStatusAndRemoveFinalizers(t *testing.T) {
24372437
}
24382438
for name, tc := range cases {
24392439
t.Run(name, func(t *testing.T) {
2440+
if !tc.enableJobBackoffLimitPerIndex {
2441+
// TODO: this will be removed in 1.36
2442+
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, feature.DefaultFeatureGate, utilversion.MustParse("1.32"))
2443+
}
24402444
featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, features.JobBackoffLimitPerIndex, tc.enableJobBackoffLimitPerIndex)
24412445
featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, features.JobSuccessPolicy, tc.enableJobSuccessPolicy)
24422446
featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, features.JobPodReplacementPolicy, tc.enableJobPodReplacementPolicy)
@@ -5171,6 +5175,10 @@ func TestSyncJobWithJobSuccessPolicy(t *testing.T) {
51715175
}
51725176
for name, tc := range testCases {
51735177
t.Run(name, func(t *testing.T) {
5178+
if !tc.enableBackoffLimitPerIndex {
5179+
// TODO: this will be removed in 1.36
5180+
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, feature.DefaultFeatureGate, utilversion.MustParse("1.32"))
5181+
}
51745182
featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, features.JobBackoffLimitPerIndex, tc.enableBackoffLimitPerIndex)
51755183
featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, features.JobSuccessPolicy, tc.enableJobSuccessPolicy)
51765184
featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, features.JobPodReplacementPolicy, tc.enableJobPodReplacementPolicy)
@@ -5849,6 +5857,10 @@ func TestSyncJobWithJobBackoffLimitPerIndex(t *testing.T) {
58495857
}
58505858
for name, tc := range testCases {
58515859
t.Run(name, func(t *testing.T) {
5860+
if !tc.enableJobBackoffLimitPerIndex {
5861+
// TODO: this will be removed in 1.36
5862+
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, feature.DefaultFeatureGate, utilversion.MustParse("1.32"))
5863+
}
58525864
featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, features.JobBackoffLimitPerIndex, tc.enableJobBackoffLimitPerIndex)
58535865
featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, features.JobPodReplacementPolicy, tc.enableJobPodReplacementPolicy)
58545866
featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, features.JobManagedBy, tc.enableJobManagedBy)

pkg/controller/job/pod_failure_policy_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
batch "k8s.io/api/batch/v1"
2424
v1 "k8s.io/api/core/v1"
2525
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
26+
utilversion "k8s.io/apimachinery/pkg/util/version"
2627
utilfeature "k8s.io/apiserver/pkg/util/feature"
2728
featuregatetesting "k8s.io/component-base/featuregate/testing"
2829
_ "k8s.io/kubernetes/pkg/apis/core/install"
@@ -867,6 +868,10 @@ func TestMatchPodFailurePolicy(t *testing.T) {
867868
}
868869
for name, tc := range testCases {
869870
t.Run(name, func(t *testing.T) {
871+
if !tc.enableJobBackoffLimitPerIndex {
872+
// TODO: this will be removed in 1.36
873+
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, utilversion.MustParse("1.32"))
874+
}
870875
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.JobBackoffLimitPerIndex, tc.enableJobBackoffLimitPerIndex)
871876
jobFailMessage, countFailed, action := matchPodFailurePolicy(tc.podFailurePolicy, tc.failedPod)
872877
if diff := cmp.Diff(tc.wantJobFailureMessage, jobFailMessage); diff != "" {

pkg/features/versioned_kube_features.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,7 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
415415
JobBackoffLimitPerIndex: {
416416
{Version: version.MustParse("1.28"), Default: false, PreRelease: featuregate.Alpha},
417417
{Version: version.MustParse("1.29"), Default: true, PreRelease: featuregate.Beta},
418+
{Version: version.MustParse("1.33"), Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.36
418419
},
419420

420421
JobManagedBy: {

0 commit comments

Comments
 (0)