Skip to content

Commit a4f6608

Browse files
authored
Merge pull request #8611 from sbueringer/pr-fix-crs
🐛 ClusterResourceSet: continue applying when apply for a single cluster failed
2 parents 813991b + 506c570 commit a4f6608

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

exp/addons/internal/controllers/clusterresourceset_controller.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,18 +145,32 @@ func (r *ClusterResourceSetReconciler) Reconcile(ctx context.Context, req ctrl.R
145145
return r.reconcileDelete(ctx, clusters, clusterResourceSet)
146146
}
147147

148+
errs := []error{}
149+
errClusterLockedOccurred := false
148150
for _, cluster := range clusters {
149151
if err := r.ApplyClusterResourceSet(ctx, cluster, clusterResourceSet); err != nil {
150152
// Requeue if the reconcile failed because the ClusterCacheTracker was locked for
151153
// the current cluster because of concurrent access.
152154
if errors.Is(err, remote.ErrClusterLocked) {
153155
log.V(5).Info("Requeuing because another worker has the lock on the ClusterCacheTracker")
154-
return ctrl.Result{Requeue: true}, nil
156+
errClusterLockedOccurred = true
157+
} else {
158+
// Append the error if the error is not ErrClusterLocked.
159+
errs = append(errs, err)
155160
}
156-
return ctrl.Result{}, err
157161
}
158162
}
159163

164+
// Return an aggregated error if errors occurred.
165+
if len(errs) > 0 {
166+
return ctrl.Result{}, kerrors.NewAggregate(errs)
167+
}
168+
169+
// Requeue if ErrClusterLocked was returned for one of the clusters.
170+
if errClusterLockedOccurred {
171+
return ctrl.Result{Requeue: true}, nil
172+
}
173+
160174
return ctrl.Result{}, nil
161175
}
162176

0 commit comments

Comments
 (0)