From bf2d50c41a6d79ed5db40da79686d2bd62a211e6 Mon Sep 17 00:00:00 2001 From: Jean-Marc ANDRE Date: Thu, 27 Apr 2023 15:37:15 +0200 Subject: [PATCH] We don't want to snapshot the same volume multiple time (subpath) --- controllers/backupsession_controller_helpers.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/controllers/backupsession_controller_helpers.go b/controllers/backupsession_controller_helpers.go index d94154d..071576c 100644 --- a/controllers/backupsession_controller_helpers.go +++ b/controllers/backupsession_controller_helpers.go @@ -257,9 +257,10 @@ func (r *BackupSessionReconciler) createVolumeFromSnapshot(vs *volumesnapshotv1. func (r *BackupSessionReconciler) snapshotVolumes(vms []corev1.VolumeMount, podSpec *corev1.PodSpec) (err error) { // We snapshot/check all the volumes. If at least one of the snapshot is not ready to use. We reschedule. + alreadySnapshoted := make(map[string]struct{}) for _, vm := range vms { for i, volume := range podSpec.Volumes { - if vm.Name == volume.Name { + if _, done := alreadySnapshoted[volume.Name]; done == false && vm.Name == volume.Name { var vs *volumesnapshotv1.VolumeSnapshot vs, err = r.snapshotVolume(volume) if IsNotReadyToUse(err) { @@ -273,6 +274,7 @@ func (r *BackupSessionReconciler) snapshotVolumes(vms []corev1.VolumeMount, podS } if vs != nil { // The snapshot is ready. We create a PVC from it. + alreadySnapshoted[volume.Name] = struct{}{} backupPVCName, err := r.createVolumeFromSnapshot(vs) if err != nil { r.Log.Error(err, "unable to create volume from snapshot", "vs", vs)