From 260d4bef0733fef11a7ad36a62447e05933322d1 Mon Sep 17 00:00:00 2001 From: Michal Pryc Date: Tue, 14 May 2024 14:06:05 +0200 Subject: [PATCH] Fix for the Reconcile loop is not exitting properly Fixes issue #65 Whenever we want to exit with error state from the reconcile loop that is considered final state we should use TerminalError. Returning standard error will cause Reconcile to requeue. Signed-off-by: Michal Pryc --- .../controller/nonadminbackup_controller.go | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/internal/controller/nonadminbackup_controller.go b/internal/controller/nonadminbackup_controller.go index d8ac1a9..85456c2 100644 --- a/internal/controller/nonadminbackup_controller.go +++ b/internal/controller/nonadminbackup_controller.go @@ -31,6 +31,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/reconcile" nacv1alpha1 "github.com/migtools/oadp-non-admin/api/v1alpha1" "github.com/migtools/oadp-non-admin/internal/common/constant" @@ -89,22 +90,28 @@ func (r *NonAdminBackupReconciler) Reconcile(ctx context.Context, req ctrl.Reque reconcileExit, reconcileRequeue, reconcileErr := r.InitNonAdminBackup(ctx, rLog, &nab) if reconcileRequeue { return ctrl.Result{Requeue: true, RequeueAfter: requeueTimeSeconds * time.Second}, reconcileErr - } else if reconcileExit || reconcileErr != nil { - return ctrl.Result{}, reconcileErr + } else if reconcileExit && reconcileErr != nil { + return ctrl.Result{}, reconcile.TerminalError(reconcileErr) + } else if reconcileExit { + return ctrl.Result{}, nil } reconcileExit, reconcileRequeue, reconcileErr = r.ValidateVeleroBackupSpec(ctx, rLog, &nab) if reconcileRequeue { return ctrl.Result{Requeue: true, RequeueAfter: requeueTimeSeconds * time.Second}, reconcileErr - } else if reconcileExit || reconcileErr != nil { - return ctrl.Result{}, reconcileErr + } else if reconcileExit && reconcileErr != nil { + return ctrl.Result{}, reconcile.TerminalError(reconcileErr) + } else if reconcileExit { + return ctrl.Result{}, nil } reconcileExit, reconcileRequeue, reconcileErr = r.CreateVeleroBackupSpec(ctx, rLog, &nab) if reconcileRequeue { return ctrl.Result{Requeue: true, RequeueAfter: requeueTimeSeconds * time.Second}, reconcileErr - } else if reconcileExit || reconcileErr != nil { - return ctrl.Result{}, reconcileErr + } else if reconcileExit && reconcileErr != nil { + return ctrl.Result{}, reconcile.TerminalError(reconcileErr) + } else if reconcileExit { + return ctrl.Result{}, nil } logger.V(1).Info(">>> Reconcile NonAdminBackup - loop end")