Skip to content

Commit 4db72ba

Browse files
Update sorting conditions to order root last and sort by transition time (#83)
1 parent 2fb17e6 commit 4db72ba

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

status/condition_set.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,13 @@ func (c ConditionSet) Set(condition Condition) (modified bool) {
120120
}
121121
conditions = append(conditions, condition)
122122
// Sorted for convenience of the consumer, i.e. kubectl.
123-
sort.Slice(conditions, func(i, j int) bool { return conditions[i].Type < conditions[j].Type })
123+
sort.SliceStable(conditions, func(i, j int) bool {
124+
// Order the root status condition at the end
125+
if conditions[i].Type == c.root || conditions[j].Type == c.root {
126+
return conditions[j].Type == c.root
127+
}
128+
return conditions[i].LastTransitionTime.Time.Before(conditions[j].LastTransitionTime.Time)
129+
})
124130
c.object.SetConditions(conditions)
125131

126132
// Recompute the root condition after setting any other condition

status/condition_set_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package status_test
33
import (
44
"time"
55

6+
"github.com/awslabs/operatorpkg/status"
67
. "github.com/onsi/ginkgo/v2"
78
. "github.com/onsi/gomega"
89

@@ -140,4 +141,27 @@ var _ = Describe("Conditions", func() {
140141
Expect(testObject.StatusConditions().IsTrue(ConditionTypeFoo, ConditionTypeBaz)).To(BeTrue())
141142
Expect(testObject.StatusConditions().IsTrue(ConditionTypeFoo, ConditionTypeBar, ConditionTypeBaz)).To(BeTrue())
142143
})
144+
It("should sort status conditions", func() {
145+
testObject := TestObject{}
146+
// Ready condition should be at the end
147+
Expect(testObject.StatusConditions().List()[len(testObject.StatusConditions().List())-1].Type).To(Equal(status.ConditionReady))
148+
149+
testObject.StatusConditions().SetTrue(ConditionTypeFoo)
150+
// Ready condition should be last with Foo condition second to last since it was recently updated
151+
Expect(testObject.StatusConditions().List()[len(testObject.StatusConditions().List())-1].Type).To(Equal(status.ConditionReady))
152+
Expect(testObject.StatusConditions().List()[len(testObject.StatusConditions().List())-2].Type).To(Equal(ConditionTypeFoo))
153+
154+
testObject.StatusConditions().SetTrue(ConditionTypeBar)
155+
// Ready condition should be last with Bar condition second to last since it was recently updated and Foo condition third to last
156+
Expect(testObject.StatusConditions().List()[len(testObject.StatusConditions().List())-1].Type).To(Equal(status.ConditionReady))
157+
Expect(testObject.StatusConditions().List()[len(testObject.StatusConditions().List())-2].Type).To(Equal(ConditionTypeBar))
158+
Expect(testObject.StatusConditions().List()[len(testObject.StatusConditions().List())-3].Type).To(Equal(ConditionTypeFoo))
159+
160+
testObject.StatusConditions().SetTrue(ConditionTypeBaz)
161+
// Ready condition should be last with Bar condition second to last since it was recently updated, Bar condition third to last, and Foo condition at the top
162+
Expect(testObject.StatusConditions().List()[len(testObject.StatusConditions().List())-1].Type).To(Equal(status.ConditionReady))
163+
Expect(testObject.StatusConditions().List()[len(testObject.StatusConditions().List())-2].Type).To(Equal(ConditionTypeBaz))
164+
Expect(testObject.StatusConditions().List()[len(testObject.StatusConditions().List())-3].Type).To(Equal(ConditionTypeBar))
165+
Expect(testObject.StatusConditions().List()[len(testObject.StatusConditions().List())-4].Type).To(Equal(ConditionTypeFoo))
166+
})
143167
})

0 commit comments

Comments
 (0)