Merge pull request #129322 from ardaguclu/automated-cherry-pick-of-#129301-upstream-release-1.32

Automated cherry pick of #129301: Do not attempt to truncate revision history if revisionHistoryLimit is negative
This commit is contained in:
Kubernetes Prow Robot 2025-01-09 03:46:31 -08:00 committed by GitHub
commit 4466b1347a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 36 additions and 1 deletions

View File

@ -194,7 +194,7 @@ func (ssc *defaultStatefulSetControl) truncateHistory(
}
historyLen := len(history)
historyLimit := int(*set.Spec.RevisionHistoryLimit)
if historyLen <= historyLimit {
if historyLimit < 0 || historyLen <= historyLimit {
return nil
}
// delete any non-live history to maintain the revision limit.

View File

@ -53,6 +53,7 @@ import (
"k8s.io/kubernetes/pkg/controller"
"k8s.io/kubernetes/pkg/controller/history"
"k8s.io/kubernetes/pkg/features"
"k8s.io/utils/ptr"
)
type invariantFunc func(set *apps.StatefulSet, om *fakeObjectManager) error
@ -2031,6 +2032,13 @@ func TestStatefulSetControlLimitsHistory(t *testing.T) {
if err != nil {
t.Fatalf("%s: %s", test.name, err)
}
if *set.Spec.RevisionHistoryLimit < 0 {
// If the revisionHistoryLimit is negative value, we don't truncate
// the revision history and it is incremental.
continue
}
if len(revisions) > int(*set.Spec.RevisionHistoryLimit)+2 {
t.Fatalf("%s: %d greater than limit %d", test.name, len(revisions), *set.Spec.RevisionHistoryLimit)
}
@ -2052,6 +2060,33 @@ func TestStatefulSetControlLimitsHistory(t *testing.T) {
return burst(newStatefulSet(3))
},
},
{
name: "zero revisionHistoryLimit",
invariants: assertMonotonicInvariants,
initial: func() *apps.StatefulSet {
sts := newStatefulSet(3)
sts.Spec.RevisionHistoryLimit = ptr.To(int32(0))
return sts
},
},
{
name: "negative revisionHistoryLimit",
invariants: assertMonotonicInvariants,
initial: func() *apps.StatefulSet {
sts := newStatefulSet(3)
sts.Spec.RevisionHistoryLimit = ptr.To(int32(-2))
return sts
},
},
{
name: "positive revisionHistoryLimit",
invariants: assertMonotonicInvariants,
initial: func() *apps.StatefulSet {
sts := newStatefulSet(3)
sts.Spec.RevisionHistoryLimit = ptr.To(int32(5))
return sts
},
},
}
for i := range tests {
testFn(t, &tests[i])