Skip to content

Commit e1c6f7c

Browse files
Bump all obersved generation version of all conditions when object is deleting
1 parent b88f099 commit e1c6f7c

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

status/condition_set.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,10 @@ func (c ConditionSet) Set(condition Condition) (modified bool) {
113113
condition.ObservedGeneration = c.object.GetGeneration()
114114
for _, cond := range c.object.GetConditions() {
115115
if cond.Type != condition.Type {
116+
// If we are deleting, we just bump all the observed generations
117+
if !c.object.GetDeletionTimestamp().IsZero() {
118+
cond.ObservedGeneration = c.object.GetGeneration()
119+
}
116120
conditions = append(conditions, cond)
117121
} else {
118122
foundCondition = true

status/condition_set_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/awslabs/operatorpkg/test"
88
. "github.com/onsi/ginkgo/v2"
99
. "github.com/onsi/gomega"
10+
"github.com/samber/lo"
1011

1112
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1213
)
@@ -164,4 +165,34 @@ var _ = Describe("Conditions", func() {
164165
Expect(testObject.StatusConditions().List()[len(testObject.StatusConditions().List())-3].Type).To(Equal(test.ConditionTypeBar))
165166
Expect(testObject.StatusConditions().List()[len(testObject.StatusConditions().List())-4].Type).To(Equal(test.ConditionTypeFoo))
166167
})
168+
169+
It("should bump generation of all conditions when deleting", func() {
170+
testObject := test.Object(&test.CustomObject{})
171+
// Conditions should be initialized
172+
conditions := testObject.StatusConditions()
173+
// Expect status to be unkown
174+
Expect(conditions.Get(test.ConditionTypeFoo).GetStatus()).To(Equal(metav1.ConditionUnknown))
175+
Expect(conditions.Get(test.ConditionTypeBar).GetStatus()).To(Equal(metav1.ConditionUnknown))
176+
Expect(conditions.Root().GetStatus()).To(Equal(metav1.ConditionUnknown))
177+
178+
// set conditions to true and expect generation set
179+
Expect(conditions.SetTrue(test.ConditionTypeFoo)).To(BeTrue())
180+
Expect(conditions.SetTrue(test.ConditionTypeBar)).To(BeTrue())
181+
Expect(conditions.Get(test.ConditionTypeFoo).Status).To(Equal(metav1.ConditionTrue))
182+
Expect(conditions.Get(test.ConditionTypeBar).Status).To(Equal(metav1.ConditionTrue))
183+
Expect(conditions.Get(test.ConditionTypeFoo).ObservedGeneration).To(Equal(int64(1)))
184+
Expect(conditions.Get(test.ConditionTypeBar).ObservedGeneration).To(Equal(int64(1)))
185+
186+
// set deletion timestamp and bump observed generation
187+
testObject.SetDeletionTimestamp(lo.ToPtr(metav1.Now()))
188+
testObject.SetGeneration(2)
189+
190+
// set one condition to true again; ensure all the other conditions observed generation is bumped
191+
// make sure root condition is also true and not unknown
192+
Expect(conditions.SetTrue(test.ConditionTypeFoo)).To(BeTrue())
193+
Expect(conditions.Get(test.ConditionTypeFoo).ObservedGeneration).To(Equal(int64(2)))
194+
Expect(conditions.Get(test.ConditionTypeBar).ObservedGeneration).To(Equal(int64(2)))
195+
Expect(conditions.Root().Status).To(Equal(metav1.ConditionTrue))
196+
Expect(conditions.Root().ObservedGeneration).To(Equal(int64(2)))
197+
})
167198
})

0 commit comments

Comments
 (0)