@@ -21,6 +21,7 @@ import (
2121 "encoding/json"
2222 "fmt"
2323 "log/slog"
24+ "time"
2425
2526 "github.com/red-hat-storage/odf-multicluster-orchestrator/addons/setup"
2627 "github.com/red-hat-storage/odf-multicluster-orchestrator/version"
@@ -141,29 +142,29 @@ func (r *MirrorPeerReconciler) Reconcile(ctx context.Context, req ctrl.Request)
141142 // MirrorPeer.Spec must be defined
142143 if err := undefinedMirrorPeerSpec (mirrorPeer .Spec ); err != nil {
143144 logger .Error ("MirrorPeer spec is undefined" , "error" , err )
144- return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , false , err )
145+ return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , 0 , err )
145146 }
146147 // MirrorPeer.Spec.Items must be unique
147148 if err := uniqueSpecItems (mirrorPeer .Spec ); err != nil {
148149 logger .Error ("MirrorPeer spec items are not unique" , "error" , err )
149- return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , false , err )
150+ return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , 0 , err )
150151 }
151152 for i := range mirrorPeer .Spec .Items {
152153 // MirrorPeer.Spec.Items must not have empty fields
153154 if err := emptySpecItems (mirrorPeer .Spec .Items [i ]); err != nil {
154155 logger .Error ("MirrorPeer spec items have empty fields" , "error" , err )
155- return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , false , err )
156+ return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , 0 , err )
156157 }
157158 // MirrorPeer.Spec.Items[*].ClusterName must be a valid ManagedCluster
158159 if err := isManagedCluster (ctx , r .Client , mirrorPeer .Spec .Items [i ].ClusterName ); err != nil {
159160 logger .Error ("Invalid ManagedCluster" , "ClusterName" , mirrorPeer .Spec .Items [i ].ClusterName , "error" , err )
160- return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , false , err )
161+ return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , 0 , err )
161162 }
162163 // MirrorPeer.Spec.Items[*].StorageClusterRef must have a compatible version
163164 if err := isVersionCompatible (mirrorPeer .Spec .Items [i ], clientInfoMap .Data ); err != nil {
164165 logger .Error ("Can not reconcile MirrorPeer" , "error" , err )
165166 mirrorPeer .Status .Phase = multiclusterv1alpha1 .IncompatibleVersion
166- return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , false , err )
167+ return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , 0 , err )
167168 } else {
168169 if mirrorPeer .Status .Phase == multiclusterv1alpha1 .IncompatibleVersion {
169170 mirrorPeer .Status .Phase = ""
@@ -267,12 +268,12 @@ func (r *MirrorPeerReconciler) Reconcile(ctx context.Context, req ctrl.Request)
267268 hasStorageClientRef , err := utils .IsStorageClientType (ctx , r .Client , mirrorPeer , r .CurrentNamespace )
268269 if err != nil {
269270 logger .Error ("Failed to determine if MirrorPeer contains StorageClient reference" , "error" , err )
270- return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , false , err )
271+ return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , 0 , err )
271272 }
272273
273274 if err := r .processManagedClusterAddon (ctx , mirrorPeer ); err != nil {
274275 logger .Error ("Failed to process managedclusteraddon" , "error" , err )
275- return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , false , err )
276+ return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , 0 , err )
276277 }
277278
278279 // update s3 profile when MirrorPeer changes
@@ -305,13 +306,13 @@ func (r *MirrorPeerReconciler) Reconcile(ctx context.Context, req ctrl.Request)
305306 return ctrl.Result {Requeue : true }, nil
306307 }
307308 logger .Error ("Error in fetching s3 internal secret" , "Cluster" , peerRef .ClusterName , "error" , err )
308- return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , false , err )
309+ return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , 0 , err )
309310 }
310311
311312 err = utils .CreateOrUpdateSecretsFromInternalSecret (ctx , r .Client , r .Scheme , r .CurrentNamespace , & s3Secret , mirrorPeer , logger )
312313 if err != nil {
313314 logger .Error ("Error in updating S3 profile" , "Cluster" , peerRef .ClusterName , "error" , err )
314- return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , false , err )
315+ return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , 0 , err )
315316 }
316317
317318 err = r .createDRClusters (ctx , peerRef .ClusterName , s3Secret , mirrorPeer )
@@ -321,7 +322,7 @@ func (r *MirrorPeerReconciler) Reconcile(ctx context.Context, req ctrl.Request)
321322 return ctrl.Result {Requeue : true }, nil
322323 }
323324 logger .Error ("Failed to create DRClusters for MirrorPeer" , "error" , err )
324- return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , false , err )
325+ return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , 0 , err )
325326 }
326327 }
327328 }
@@ -330,13 +331,14 @@ func (r *MirrorPeerReconciler) Reconcile(ctx context.Context, req ctrl.Request)
330331 result , err := createStorageClusterPeer (ctx , r .Client , logger , r .CurrentNamespace , mirrorPeer )
331332 if err != nil {
332333 logger .Error ("Failed to create StorageClusterPeer" , "error" , err )
333- return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , result .Requeue , err )
334+
335+ return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , result .RequeueAfter , err )
334336 }
335337
336338 result , err = createManifestWorkForClusterPairingConfigMap (ctx , r .Client , logger , r .CurrentNamespace , mirrorPeer )
337339 if err != nil {
338340 logger .Error ("Failed to create ManifestWork for ClusterPairingConfigMap" , "error" , err )
339- return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , result .Requeue , err )
341+ return r .updateMirrorPeerStatusMessage (ctx , mirrorPeer , result .RequeueAfter , err )
340342 }
341343 }
342344
@@ -460,7 +462,7 @@ func createStorageClusterPeer(ctx context.Context, client client.Client, logger
460462 if err != nil {
461463 if k8serrors .IsNotFound (err ) {
462464 logger .Info ("Client info config map not found. Retrying request another time..." )
463- return ctrl.Result {Requeue : true }, nil
465+ return ctrl.Result {RequeueAfter : 0 }, nil
464466 }
465467 return ctrl.Result {}, err
466468 }
@@ -1004,15 +1006,18 @@ func (r *MirrorPeerReconciler) updateMirrorPeerStatus(ctx context.Context, mirro
10041006}
10051007
10061008// updateMirrorPeerStatusMessage updates the MirrorPeer.Status.Message with the reconcile error message
1007- func (r * MirrorPeerReconciler ) updateMirrorPeerStatusMessage (ctx context.Context , mirrorPeer multiclusterv1alpha1.MirrorPeer , ctrlRequeue bool , err error ) (ctrl.Result , error ) {
1009+ func (r * MirrorPeerReconciler ) updateMirrorPeerStatusMessage (
1010+ ctx context.Context ,
1011+ mirrorPeer multiclusterv1alpha1.MirrorPeer ,
1012+ requeueAfter time.Duration ,
1013+ err error ,
1014+ ) (ctrl.Result , error ) {
10081015 mirrorPeer .Status .Message = err .Error ()
1009- statusErr := r .Client .Status ().Update (ctx , & mirrorPeer )
1010- if statusErr != nil {
1011- r .Logger .Error ("Error occurred while updating the status of mirrorpeer. Requeing request." , "Error " , statusErr )
1012- return ctrl.Result {Requeue : true }, nil
1016+ if statusErr := r .Client .Status ().Update (ctx , & mirrorPeer ); statusErr != nil {
1017+ r .Logger .Error ("Failed to update MirrorPeer status" , "error" , statusErr )
1018+ return ctrl.Result {RequeueAfter : time .Second }, nil
10131019 }
1014-
1015- return ctrl.Result {Requeue : ctrlRequeue }, err
1020+ return ctrl.Result {RequeueAfter : requeueAfter }, err
10161021}
10171022
10181023func isProviderModePeeringDone (ctx context.Context , client client.Client , logger * slog.Logger , currentNamespace string , mirrorPeer * multiclusterv1alpha1.MirrorPeer ) (bool , error ) {
0 commit comments