Skip to content

Commit 7141e97

Browse files
kekcleadernexus49
authored andcommitted
feat: use patch for finalizer updates
1 parent 058bfb0 commit 7141e97

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

controller/lifecycle/lifecycle.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,7 @@ func (l *LifecycleManager) addFinalizersIfNeeded(ctx context.Context, instance R
366366
}
367367

368368
update := false
369+
original := instance.DeepCopyObject().(client.Object)
369370
for _, subroutine := range l.subroutines {
370371
if len(subroutine.Finalizers()) > 0 {
371372
needsUpdate := l.addFinalizerIfNeeded(instance, subroutine)
@@ -375,7 +376,8 @@ func (l *LifecycleManager) addFinalizersIfNeeded(ctx context.Context, instance R
375376
}
376377
}
377378
if update {
378-
err := l.client.Update(ctx, instance)
379+
patch := client.MergeFrom(original)
380+
err := l.client.Patch(ctx, instance, patch)
379381
if err != nil {
380382
return err
381383
}
@@ -401,14 +403,16 @@ func (l *LifecycleManager) removeFinalizerIfNeeded(ctx context.Context, instance
401403

402404
if !result.Requeue && result.RequeueAfter == 0 {
403405
update := false
406+
original := instance.DeepCopyObject().(client.Object)
404407
for _, f := range subroutine.Finalizers() {
405408
needsUpdate := controllerutil.RemoveFinalizer(instance, f)
406409
if needsUpdate {
407410
update = true
408411
}
409412
}
410413
if update {
411-
err := l.client.Update(ctx, instance)
414+
patch := client.MergeFrom(original)
415+
err := l.client.Patch(ctx, instance, patch)
412416
if err != nil {
413417
return errors.NewOperatorError(errors.Wrap(err, "failed to update instance"), true, false)
414418
}

controller/testSupport/client.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ func CreateFakeClient(t *testing.T, objects ...client.Object) client.WithWatch {
1515
builder := fake.NewClientBuilder()
1616
s := runtime.NewScheme()
1717
sBuilder := scheme.Builder{GroupVersion: schema.GroupVersion{Group: "test.openmfp.io", Version: "v1alpha1"}}
18+
sBuilder.Register(&TestApiObject{})
1819
for _, obj := range objects {
1920
sBuilder.Register(obj)
2021
builder.WithStatusSubresource(obj)

0 commit comments

Comments
 (0)