From 4af9c39d776e27dafbd15eeacdeebb9e990f9ac6 Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Mon, 18 Sep 2023 22:27:37 +0300 Subject: [PATCH] resource: use Patch in APIFinalizer Signed-off-by: Dr. Stefan Schimanski --- pkg/resource/api.go | 6 ++++-- pkg/resource/api_test.go | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/pkg/resource/api.go b/pkg/resource/api.go index 8c60dd3e4..03621108b 100644 --- a/pkg/resource/api.go +++ b/pkg/resource/api.go @@ -161,8 +161,9 @@ func (a *APIFinalizer) AddFinalizer(ctx context.Context, obj Object) error { if meta.FinalizerExists(obj, a.finalizer) { return nil } + orig := obj.DeepCopyObject().(Object) meta.AddFinalizer(obj, a.finalizer) - return errors.Wrap(a.client.Update(ctx, obj), errUpdateObject) + return errors.Wrap(a.client.Patch(ctx, obj, client.MergeFromWithOptions(orig, client.MergeFromWithOptimisticLock{})), errUpdateObject) } // RemoveFinalizer from the supplied Managed resource. @@ -170,8 +171,9 @@ func (a *APIFinalizer) RemoveFinalizer(ctx context.Context, obj Object) error { if !meta.FinalizerExists(obj, a.finalizer) { return nil } + orig := obj.DeepCopyObject().(Object) meta.RemoveFinalizer(obj, a.finalizer) - return errors.Wrap(IgnoreNotFound(a.client.Update(ctx, obj)), errUpdateObject) + return errors.Wrap(IgnoreNotFound(a.client.Patch(ctx, obj, client.MergeFromWithOptions(orig, client.MergeFromWithOptimisticLock{}))), errUpdateObject) } // A FinalizerFns satisfy the Finalizer interface. diff --git a/pkg/resource/api_test.go b/pkg/resource/api_test.go index 731cee31e..a9431a91a 100644 --- a/pkg/resource/api_test.go +++ b/pkg/resource/api_test.go @@ -302,7 +302,7 @@ func TestManagedRemoveFinalizer(t *testing.T) { want want }{ "UpdateError": { - client: &test.MockClient{MockUpdate: test.NewMockUpdateFn(errBoom)}, + client: &test.MockClient{MockPatch: test.NewMockPatchFn(errBoom)}, args: args{ ctx: context.Background(), obj: &fake.Object{ObjectMeta: metav1.ObjectMeta{Finalizers: []string{finalizer}}}, @@ -313,7 +313,7 @@ func TestManagedRemoveFinalizer(t *testing.T) { }, }, "Successful": { - client: &test.MockClient{MockUpdate: test.NewMockUpdateFn(nil)}, + client: &test.MockClient{MockPatch: test.NewMockPatchFn(nil)}, args: args{ ctx: context.Background(), obj: &fake.Object{ObjectMeta: metav1.ObjectMeta{Finalizers: []string{finalizer}}}, @@ -360,7 +360,7 @@ func TestAPIFinalizerAdder(t *testing.T) { want want }{ "UpdateError": { - client: &test.MockClient{MockUpdate: test.NewMockUpdateFn(errBoom)}, + client: &test.MockClient{MockPatch: test.NewMockPatchFn(errBoom)}, args: args{ ctx: context.Background(), obj: &fake.Object{ObjectMeta: metav1.ObjectMeta{Finalizers: []string{}}}, @@ -371,7 +371,7 @@ func TestAPIFinalizerAdder(t *testing.T) { }, }, "Successful": { - client: &test.MockClient{MockUpdate: test.NewMockUpdateFn(nil)}, + client: &test.MockClient{MockPatch: test.NewMockPatchFn(nil)}, args: args{ ctx: context.Background(), obj: &fake.Object{ObjectMeta: metav1.ObjectMeta{Finalizers: []string{}}},