From 506c570f1c5d4b1c29ae6da588a51da42d5a72c3 Mon Sep 17 00:00:00 2001 From: Stefan Bueringer Date: Thu, 4 May 2023 16:44:05 +0200 Subject: [PATCH] ClusterResourceSet: continue aplying when apply for a single cluster failed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stefan Büringer buringerst@vmware.com --- .../clusterresourceset_controller.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/exp/addons/internal/controllers/clusterresourceset_controller.go b/exp/addons/internal/controllers/clusterresourceset_controller.go index c17eb0cc5454..fac5504473f7 100644 --- a/exp/addons/internal/controllers/clusterresourceset_controller.go +++ b/exp/addons/internal/controllers/clusterresourceset_controller.go @@ -145,18 +145,32 @@ func (r *ClusterResourceSetReconciler) Reconcile(ctx context.Context, req ctrl.R return r.reconcileDelete(ctx, clusters, clusterResourceSet) } + errs := []error{} + errClusterLockedOccurred := false for _, cluster := range clusters { if err := r.ApplyClusterResourceSet(ctx, cluster, clusterResourceSet); err != nil { // Requeue if the reconcile failed because the ClusterCacheTracker was locked for // the current cluster because of concurrent access. if errors.Is(err, remote.ErrClusterLocked) { log.V(5).Info("Requeuing because another worker has the lock on the ClusterCacheTracker") - return ctrl.Result{Requeue: true}, nil + errClusterLockedOccurred = true + } else { + // Append the error if the error is not ErrClusterLocked. + errs = append(errs, err) } - return ctrl.Result{}, err } } + // Return an aggregated error if errors occurred. + if len(errs) > 0 { + return ctrl.Result{}, kerrors.NewAggregate(errs) + } + + // Requeue if ErrClusterLocked was returned for one of the clusters. + if errClusterLockedOccurred { + return ctrl.Result{Requeue: true}, nil + } + return ctrl.Result{}, nil }