diff --git a/pkg/backup/request.go b/pkg/backup/request.go index b012992c0..eb9edcbe8 100644 --- a/pkg/backup/request.go +++ b/pkg/backup/request.go @@ -103,3 +103,7 @@ func (r *Request) FillVolumesInformation() { r.VolumesInformation.BackupOperations = *r.GetItemOperationsList() r.VolumesInformation.BackupName = r.Backup.Name } + +func (r *Request) StopWorkerPool() { + r.WorkerPool.Stop() +} diff --git a/pkg/controller/backup_controller.go b/pkg/controller/backup_controller.go index 1d3b9b9eb..f269353cb 100644 --- a/pkg/controller/backup_controller.go +++ b/pkg/controller/backup_controller.go @@ -289,7 +289,7 @@ func (b *backupReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctr log.Debug("Preparing backup request") request := b.prepareBackupRequest(ctx, original, log) // delete worker pool after reconcile - defer request.WorkerPool.Stop() + defer request.StopWorkerPool() if len(request.Status.ValidationErrors) > 0 { request.Status.Phase = velerov1api.BackupPhaseFailedValidation } else { diff --git a/pkg/controller/backup_queue_controller.go b/pkg/controller/backup_queue_controller.go index 1926f60cb..bd57f3c95 100644 --- a/pkg/controller/backup_queue_controller.go +++ b/pkg/controller/backup_queue_controller.go @@ -25,6 +25,7 @@ import ( "github.com/sirupsen/logrus" corev1api "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/types" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -154,11 +155,7 @@ func (r *backupQueueReconciler) detectNamespaceConflict(ctx context.Context, bac } func detectNSConflictsInternal(backup *velerov1api.Backup, earlierBackups []velerov1api.Backup, clusterNamespaces []string) (bool, string) { - backupNamespaces := namespacesForBackup(backup, clusterNamespaces) - backupNSMap := make(map[string]struct{}) - for _, ns := range backupNamespaces { - backupNSMap[ns] = struct{}{} - } + backupNamespaces := sets.NewString(namespacesForBackup(backup, clusterNamespaces)...) for _, earlierBackup := range earlierBackups { // This will never be true for the primary backup, but for the secondary // runnability check for queued backups ahead of the current backup, we @@ -168,11 +165,8 @@ func detectNSConflictsInternal(backup *velerov1api.Backup, earlierBackups []vele earlierBackup.Status.QueuePosition >= backup.Status.QueuePosition { continue } - runningNSList := namespacesForBackup(&earlierBackup, clusterNamespaces) - for _, runningNS := range runningNSList { - if _, found := backupNSMap[runningNS]; found { - return true, earlierBackup.Name - } + if backupNamespaces.HasAny(namespacesForBackup(&earlierBackup, clusterNamespaces)...) { + return true, earlierBackup.Name } } return false, ""