Skip to content

Commit 3a5f82f

Browse files
authored
Merge pull request #675 from Deydra71/manage-finalizer
Add ManageConsumerFinalizer for consumer finalizer lifecycle
2 parents b96da8d + ba20177 commit 3a5f82f

1 file changed

Lines changed: 67 additions & 0 deletions

File tree

modules/common/object/metadata.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,70 @@ func EnsureOwnerRef(
114114

115115
return nil
116116
}
117+
118+
// AddConsumerFinalizer adds consumerFinalizer to the given object.
119+
func AddConsumerFinalizer(
120+
ctx context.Context,
121+
h *helper.Helper,
122+
obj client.Object,
123+
consumerFinalizer string,
124+
) error {
125+
before := obj.DeepCopyObject().(client.Object)
126+
if controllerutil.AddFinalizer(obj, consumerFinalizer) {
127+
patch := client.MergeFromWithOptions(before, client.MergeFromWithOptimisticLock{})
128+
if err := h.GetClient().Patch(ctx, obj, patch); err != nil {
129+
return fmt.Errorf("failed to add consumer finalizer to %s: %w", obj.GetName(), err)
130+
}
131+
h.GetLogger().Info("Added consumer finalizer", "object", obj.GetName(), "finalizer", consumerFinalizer)
132+
}
133+
return nil
134+
}
135+
136+
// RemoveConsumerFinalizer removes consumerFinalizer from the given object.
137+
func RemoveConsumerFinalizer(
138+
ctx context.Context,
139+
h *helper.Helper,
140+
obj client.Object,
141+
consumerFinalizer string,
142+
) error {
143+
before := obj.DeepCopyObject().(client.Object)
144+
if controllerutil.RemoveFinalizer(obj, consumerFinalizer) {
145+
patch := client.MergeFromWithOptions(before, client.MergeFromWithOptimisticLock{})
146+
if err := h.GetClient().Patch(ctx, obj, patch); err != nil {
147+
return fmt.Errorf("failed to remove consumer finalizer from %s: %w", obj.GetName(), err)
148+
}
149+
h.GetLogger().Info("Removed consumer finalizer", "object", obj.GetName(), "finalizer", consumerFinalizer)
150+
}
151+
return nil
152+
}
153+
154+
// ManageConsumerFinalizer adds consumerFinalizer to newObj and removes it from oldObj.
155+
//
156+
// If both refer to the same object, returns early without mutating.
157+
func ManageConsumerFinalizer(
158+
ctx context.Context,
159+
h *helper.Helper,
160+
newObj client.Object,
161+
oldObj client.Object,
162+
consumerFinalizer string,
163+
) error {
164+
if newObj != nil && oldObj != nil &&
165+
newObj.GetNamespace() == oldObj.GetNamespace() &&
166+
newObj.GetName() == oldObj.GetName() {
167+
return nil
168+
}
169+
170+
if newObj != nil {
171+
if err := AddConsumerFinalizer(ctx, h, newObj, consumerFinalizer); err != nil {
172+
return err
173+
}
174+
}
175+
176+
if oldObj != nil {
177+
if err := RemoveConsumerFinalizer(ctx, h, oldObj, consumerFinalizer); err != nil {
178+
return err
179+
}
180+
}
181+
182+
return nil
183+
}

0 commit comments

Comments
 (0)