diff --git a/controller/lifecycle/lifecycle.go b/controller/lifecycle/lifecycle.go index a9ef681..4de5d87 100644 --- a/controller/lifecycle/lifecycle.go +++ b/controller/lifecycle/lifecycle.go @@ -199,9 +199,10 @@ func (l *LifecycleManager) Reconcile(ctx context.Context, req ctrl.Request, inst } if l.spreadReconciles && instance.GetDeletionTimestamp().IsZero() { + original := instance.DeepCopyObject().(client.Object) removed := removeRefreshLabelIfExists(instance) if removed { - updateErr := l.client.Update(ctx, instance) + updateErr := l.client.Patch(ctx, instance, client.MergeFrom(original)) if updateErr != nil { return l.handleClientError("failed to update instance", log, err, generationChanged, sentryTags) } @@ -366,6 +367,7 @@ func (l *LifecycleManager) addFinalizersIfNeeded(ctx context.Context, instance R } update := false + original := instance.DeepCopyObject().(client.Object) for _, subroutine := range l.subroutines { if len(subroutine.Finalizers()) > 0 { needsUpdate := l.addFinalizerIfNeeded(instance, subroutine) @@ -375,7 +377,7 @@ func (l *LifecycleManager) addFinalizersIfNeeded(ctx context.Context, instance R } } if update { - err := l.client.Update(ctx, instance) + err := l.client.Patch(ctx, instance, client.MergeFrom(original)) if err != nil { return err } @@ -401,6 +403,7 @@ func (l *LifecycleManager) removeFinalizerIfNeeded(ctx context.Context, instance if !result.Requeue && result.RequeueAfter == 0 { update := false + original := instance.DeepCopyObject().(client.Object) for _, f := range subroutine.Finalizers() { needsUpdate := controllerutil.RemoveFinalizer(instance, f) if needsUpdate { @@ -408,7 +411,7 @@ func (l *LifecycleManager) removeFinalizerIfNeeded(ctx context.Context, instance } } if update { - err := l.client.Update(ctx, instance) + err := l.client.Patch(ctx, instance, client.MergeFrom(original)) if err != nil { return errors.NewOperatorError(errors.Wrap(err, "failed to update instance"), true, false) } diff --git a/controller/testSupport/client.go b/controller/testSupport/client.go index cf23977..4141f34 100644 --- a/controller/testSupport/client.go +++ b/controller/testSupport/client.go @@ -15,6 +15,7 @@ func CreateFakeClient(t *testing.T, objects ...client.Object) client.WithWatch { builder := fake.NewClientBuilder() s := runtime.NewScheme() sBuilder := scheme.Builder{GroupVersion: schema.GroupVersion{Group: "test.openmfp.io", Version: "v1alpha1"}} + sBuilder.Register(&TestApiObject{}) for _, obj := range objects { sBuilder.Register(obj) builder.WithStatusSubresource(obj)