@@ -145,18 +145,32 @@ func (r *ClusterResourceSetReconciler) Reconcile(ctx context.Context, req ctrl.R
145
145
return r .reconcileDelete (ctx , clusters , clusterResourceSet )
146
146
}
147
147
148
+ errs := []error {}
149
+ errClusterLockedOccurred := false
148
150
for _ , cluster := range clusters {
149
151
if err := r .ApplyClusterResourceSet (ctx , cluster , clusterResourceSet ); err != nil {
150
152
// Requeue if the reconcile failed because the ClusterCacheTracker was locked for
151
153
// the current cluster because of concurrent access.
152
154
if errors .Is (err , remote .ErrClusterLocked ) {
153
155
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 )
155
160
}
156
- return ctrl.Result {}, err
157
161
}
158
162
}
159
163
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
+
160
174
return ctrl.Result {}, nil
161
175
}
162
176
0 commit comments