Skip to content

Commit 9c3e4a0

Browse files
Merge pull request #1291 from JoelSpeed/update-oldest-delete-policy
OCPBUGS-42388: Ensure deletion annotation takes priority and oldestPolicy can distinguish longer ages
2 parents 1efafa4 + 38d8342 commit 9c3e4a0

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

pkg/controller/machineset/delete_policy.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ const (
4444
couldDelete deletePriority = 20.0
4545
mustNotDelete deletePriority = 0.0
4646

47-
secondsPerTenDays float64 = 864000
47+
secondsPerHundredDays float64 = 8640000
4848
)
4949

5050
type deletePriorityFunc func(machine *machinev1.Machine) deletePriority
@@ -67,7 +67,12 @@ func oldestDeletePriority(machine *machinev1.Machine) deletePriority {
6767
if d.Seconds() < 0 {
6868
return mustNotDelete
6969
}
70-
return deletePriority(float64(mustDelete) * (1.0 - math.Exp(-d.Seconds()/secondsPerTenDays)))
70+
71+
// The oldest machine, not already marked for deletion, should be deleted first.
72+
// The priority is calculated as a function of the time since the machine was created.
73+
// As the machine gets older the exponential term will approach 1, and the priority will approach the value of betterDelete.
74+
// With the current division by secondsPerHundredDays, the priority will tend to betterDelete after approx ~3750 days (~10.3 years).
75+
return deletePriority(float64(betterDelete) * (1.0 - math.Exp(-d.Seconds()/secondsPerHundredDays)))
7176
}
7277

7378
func newestDeletePriority(machine *machinev1.Machine) deletePriority {

pkg/controller/machineset/delete_policy_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,9 @@ func TestMachineOldestDelete(t *testing.T) {
281281
new := &machinev1.Machine{ObjectMeta: metav1.ObjectMeta{CreationTimestamp: metav1.NewTime(currentTime.Time.AddDate(0, 0, -5))}}
282282
old := &machinev1.Machine{ObjectMeta: metav1.ObjectMeta{CreationTimestamp: metav1.NewTime(currentTime.Time.AddDate(0, 0, -10))}}
283283
oldest := &machinev1.Machine{ObjectMeta: metav1.ObjectMeta{CreationTimestamp: metav1.NewTime(currentTime.Time.AddDate(0, 0, -10))}}
284+
old500Day := &machinev1.Machine{ObjectMeta: metav1.ObjectMeta{CreationTimestamp: metav1.NewTime(currentTime.Time.AddDate(0, 0, -500))}}
285+
old1000Day := &machinev1.Machine{ObjectMeta: metav1.ObjectMeta{CreationTimestamp: metav1.NewTime(currentTime.Time.AddDate(0, 0, -1000))}}
286+
old3750Day := &machinev1.Machine{ObjectMeta: metav1.ObjectMeta{CreationTimestamp: metav1.NewTime(currentTime.Time.AddDate(0, 0, -3750))}}
284287
annotatedMachine := &machinev1.Machine{ObjectMeta: metav1.ObjectMeta{Annotations: map[string]string{DeleteNodeAnnotation: "yes"}, CreationTimestamp: metav1.NewTime(currentTime.Time.AddDate(0, 0, -1))}}
285288
oldAnnotatedMachine := &machinev1.Machine{ObjectMeta: metav1.ObjectMeta{Annotations: map[string]string{oldDeleteNodeAnnotation: "yes"}, CreationTimestamp: metav1.NewTime(currentTime.Time.AddDate(0, 0, -1))}}
286289
unhealthyMachine := &machinev1.Machine{ObjectMeta: metav1.ObjectMeta{CreationTimestamp: metav1.NewTime(currentTime.Time.AddDate(0, 0, -10))}, Status: machinev1.MachineStatus{ErrorReason: &statusError}}
@@ -347,6 +350,22 @@ func TestMachineOldestDelete(t *testing.T) {
347350
},
348351
expect: []*machinev1.Machine{unhealthyMachine},
349352
},
353+
{
354+
desc: "func=oldestDeletePriority, diff=1 (old but with annotate priority)",
355+
diff: 1,
356+
machines: []*machinev1.Machine{
357+
new, annotatedMachine, old500Day, old1000Day, old3750Day,
358+
},
359+
expect: []*machinev1.Machine{annotatedMachine},
360+
},
361+
{
362+
desc: "func=oldestDeletePriority, diff=3 (old machines in order)",
363+
diff: 3,
364+
machines: []*machinev1.Machine{
365+
new, old500Day, old1000Day, old3750Day,
366+
},
367+
expect: []*machinev1.Machine{old3750Day, old1000Day, old500Day},
368+
},
350369
}
351370

352371
for _, test := range tests {

0 commit comments

Comments
 (0)