From a30ff33fb66de91bc8ee5785757a0bfb03d24e05 Mon Sep 17 00:00:00 2001 From: Alejandro Ruiz <4057165+aruiz14@users.noreply.github.com> Date: Fri, 24 Jan 2025 16:23:14 +0100 Subject: [PATCH] Prevent empty Patch updates (#3245) --- .../cmd/agent/controller/bundledeployment_controller.go | 4 ++++ internal/cmd/controller/reconciler/bundle_controller.go | 8 ++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/internal/cmd/agent/controller/bundledeployment_controller.go b/internal/cmd/agent/controller/bundledeployment_controller.go index aab2d2f043..73c8545da5 100644 --- a/internal/cmd/agent/controller/bundledeployment_controller.go +++ b/internal/cmd/agent/controller/bundledeployment_controller.go @@ -203,6 +203,10 @@ func (r *BundleDeploymentReconciler) Reconcile(ctx context.Context, req ctrl.Req func (r *BundleDeploymentReconciler) updateStatus(ctx context.Context, orig *fleetv1.BundleDeployment, obj *fleetv1.BundleDeployment) error { statusPatch := client.MergeFrom(orig) + if patchData, err := statusPatch.Data(obj); err == nil && string(patchData) == "{}" { + // skip update if patch is empty + return nil + } return r.Status().Patch(ctx, obj, statusPatch) } diff --git a/internal/cmd/controller/reconciler/bundle_controller.go b/internal/cmd/controller/reconciler/bundle_controller.go index a61cb7e2cc..74fc30e450 100644 --- a/internal/cmd/controller/reconciler/bundle_controller.go +++ b/internal/cmd/controller/reconciler/bundle_controller.go @@ -458,8 +458,12 @@ func (r *BundleReconciler) getOCIReference(ctx context.Context, bundle *fleet.Bu func (r *BundleReconciler) updateStatus(ctx context.Context, orig *fleet.Bundle, bundle *fleet.Bundle) error { logger := log.FromContext(ctx).WithName("bundle - updateStatus") statusPatch := client.MergeFrom(orig) - err := r.Status().Patch(ctx, bundle, statusPatch) - if err != nil { + + if patchData, err := statusPatch.Data(bundle); err == nil && string(patchData) == "{}" { + // skip update if patch is empty + return nil + } + if err := r.Status().Patch(ctx, bundle, statusPatch); err != nil { logger.V(1).Info("Reconcile failed update to bundle status", "status", bundle.Status, "error", err) return err }