Do not attempt to truncate revision history if revisionHistoryLimit is negative

This commit is contained in:
Arda Güçlü 2024-12-19 11:35:29 +03:00
parent 2413b97219
commit 60c9a5ecbd
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])