diff --git a/changelogs/unreleased/9498-sseago b/changelogs/unreleased/9498-sseago new file mode 100644 index 000000000..80443a34f --- /dev/null +++ b/changelogs/unreleased/9498-sseago @@ -0,0 +1 @@ +Remove backup from running list when backup fails validation diff --git a/pkg/controller/backup_controller.go b/pkg/controller/backup_controller.go index 37faafd68..496308a6e 100644 --- a/pkg/controller/backup_controller.go +++ b/pkg/controller/backup_controller.go @@ -307,6 +307,16 @@ func (b *backupReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctr backupScheduleName := request.GetLabels()[velerov1api.ScheduleNameLabel] + b.backupTracker.Add(request.Namespace, request.Name) + defer func() { + switch request.Status.Phase { + case velerov1api.BackupPhaseCompleted, velerov1api.BackupPhasePartiallyFailed, velerov1api.BackupPhaseFailed, velerov1api.BackupPhaseFailedValidation: + b.backupTracker.Delete(request.Namespace, request.Name) + case velerov1api.BackupPhaseWaitingForPluginOperations, velerov1api.BackupPhaseWaitingForPluginOperationsPartiallyFailed, velerov1api.BackupPhaseFinalizing, velerov1api.BackupPhaseFinalizingPartiallyFailed: + b.backupTracker.AddPostProcessing(request.Namespace, request.Name) + } + }() + if request.Status.Phase == velerov1api.BackupPhaseFailedValidation { log.Debug("failed to validate backup status") b.metrics.RegisterBackupValidationFailure(backupScheduleName) @@ -318,16 +328,6 @@ func (b *backupReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctr // store ref to just-updated item for creating patch original = request.Backup.DeepCopy() - b.backupTracker.Add(request.Namespace, request.Name) - defer func() { - switch request.Status.Phase { - case velerov1api.BackupPhaseCompleted, velerov1api.BackupPhasePartiallyFailed, velerov1api.BackupPhaseFailed, velerov1api.BackupPhaseFailedValidation: - b.backupTracker.Delete(request.Namespace, request.Name) - case velerov1api.BackupPhaseWaitingForPluginOperations, velerov1api.BackupPhaseWaitingForPluginOperationsPartiallyFailed, velerov1api.BackupPhaseFinalizing, velerov1api.BackupPhaseFinalizingPartiallyFailed: - b.backupTracker.AddPostProcessing(request.Namespace, request.Name) - } - }() - log.Debug("Running backup") b.metrics.RegisterBackupAttempt(backupScheduleName) diff --git a/pkg/controller/backup_controller_test.go b/pkg/controller/backup_controller_test.go index e0b554ff1..386498900 100644 --- a/pkg/controller/backup_controller_test.go +++ b/pkg/controller/backup_controller_test.go @@ -246,6 +246,7 @@ func TestProcessBackupValidationFailures(t *testing.T) { clock: &clock.RealClock{}, formatFlag: formatFlag, metrics: metrics.NewServerMetrics(), + backupTracker: NewBackupTracker(), } require.NotNil(t, test.backup)