@@ -338,24 +338,24 @@ func (v *BackupVolumesInformation) generateVolumeInfoForSkippedPV() {
338338 tmpVolumeInfos := make ([]* BackupVolumeInfo , 0 )
339339
340340 for pvName , skippedReason := range v .SkippedPVs {
341- if pvcPVInfo := v .pvMap .retrieve (pvName , "" , "" ); pvcPVInfo != nil {
342- volumeInfo := & BackupVolumeInfo {
343- PVCName : pvcPVInfo .PVCName ,
344- PVCNamespace : pvcPVInfo .PVCNamespace ,
345- PVName : pvName ,
346- SnapshotDataMoved : false ,
347- Skipped : true ,
348- SkippedReason : skippedReason ,
349- PVInfo : & PVInfo {
350- ReclaimPolicy : string (pvcPVInfo .PV .Spec .PersistentVolumeReclaimPolicy ),
351- Labels : pvcPVInfo .PV .Labels ,
352- },
353- }
354- tmpVolumeInfos = append (tmpVolumeInfos , volumeInfo )
355- } else {
341+ pvcPVInfo := v .pvMap .retrieve (pvName , "" , "" )
342+ if pvcPVInfo == nil {
356343 v .logger .Warnf ("Cannot find info for PV %s" , pvName )
357344 continue
358345 }
346+ volumeInfo := & BackupVolumeInfo {
347+ PVCName : pvcPVInfo .PVCName ,
348+ PVCNamespace : pvcPVInfo .PVCNamespace ,
349+ PVName : pvName ,
350+ SnapshotDataMoved : false ,
351+ Skipped : true ,
352+ SkippedReason : skippedReason ,
353+ PVInfo : & PVInfo {
354+ ReclaimPolicy : string (pvcPVInfo .PV .Spec .PersistentVolumeReclaimPolicy ),
355+ Labels : pvcPVInfo .PV .Labels ,
356+ },
357+ }
358+ tmpVolumeInfos = append (tmpVolumeInfos , volumeInfo )
359359 }
360360
361361 v .volumeInfos = append (v .volumeInfos , tmpVolumeInfos ... )
@@ -366,32 +366,32 @@ func (v *BackupVolumesInformation) generateVolumeInfoForVeleroNativeSnapshot() {
366366 tmpVolumeInfos := make ([]* BackupVolumeInfo , 0 )
367367
368368 for _ , nativeSnapshot := range v .NativeSnapshots {
369- if pvcPVInfo := v .pvMap .retrieve (nativeSnapshot .Spec .PersistentVolumeName , "" , "" ); pvcPVInfo != nil {
370- volumeResult := VolumeResultFailed
371- if nativeSnapshot .Status .Phase == SnapshotPhaseCompleted {
372- volumeResult = VolumeResultSucceeded
373- }
374- volumeInfo := & BackupVolumeInfo {
375- BackupMethod : NativeSnapshot ,
376- PVCName : pvcPVInfo .PVCName ,
377- PVCNamespace : pvcPVInfo .PVCNamespace ,
378- PVName : pvcPVInfo .PV .Name ,
379- SnapshotDataMoved : false ,
380- Skipped : false ,
381- // Only set Succeeded to true when the NativeSnapshot's phase is Completed,
382- // although NativeSnapshot doesn't check whether the snapshot creation result.
383- Result : volumeResult ,
384- NativeSnapshotInfo : newNativeSnapshotInfo (nativeSnapshot ),
385- PVInfo : & PVInfo {
386- ReclaimPolicy : string (pvcPVInfo .PV .Spec .PersistentVolumeReclaimPolicy ),
387- Labels : pvcPVInfo .PV .Labels ,
388- },
389- }
390- tmpVolumeInfos = append (tmpVolumeInfos , volumeInfo )
391- } else {
369+ pvcPVInfo := v .pvMap .retrieve (nativeSnapshot .Spec .PersistentVolumeName , "" , "" )
370+ if pvcPVInfo == nil {
392371 v .logger .Warnf ("cannot find info for PV %s" , nativeSnapshot .Spec .PersistentVolumeName )
393372 continue
394373 }
374+ volumeResult := VolumeResultFailed
375+ if nativeSnapshot .Status .Phase == SnapshotPhaseCompleted {
376+ volumeResult = VolumeResultSucceeded
377+ }
378+ volumeInfo := & BackupVolumeInfo {
379+ BackupMethod : NativeSnapshot ,
380+ PVCName : pvcPVInfo .PVCName ,
381+ PVCNamespace : pvcPVInfo .PVCNamespace ,
382+ PVName : pvcPVInfo .PV .Name ,
383+ SnapshotDataMoved : false ,
384+ Skipped : false ,
385+ // Only set Succeeded to true when the NativeSnapshot's phase is Completed,
386+ // although NativeSnapshot doesn't check whether the snapshot creation result.
387+ Result : volumeResult ,
388+ NativeSnapshotInfo : newNativeSnapshotInfo (nativeSnapshot ),
389+ PVInfo : & PVInfo {
390+ ReclaimPolicy : string (pvcPVInfo .PV .Spec .PersistentVolumeReclaimPolicy ),
391+ Labels : pvcPVInfo .PV .Labels ,
392+ },
393+ }
394+ tmpVolumeInfos = append (tmpVolumeInfos , volumeInfo )
395395 }
396396
397397 v .volumeInfos = append (v .volumeInfos , tmpVolumeInfos ... )
@@ -461,38 +461,38 @@ func (v *BackupVolumesInformation) generateVolumeInfoForCSIVolumeSnapshot() {
461461 if volumeSnapshotContent .Status .SnapshotHandle != nil {
462462 snapshotHandle = * volumeSnapshotContent .Status .SnapshotHandle
463463 }
464- if pvcPVInfo := v .pvMap .retrieve ("" , * volumeSnapshot .Spec .Source .PersistentVolumeClaimName , volumeSnapshot .Namespace ); pvcPVInfo != nil {
465- volumeInfo := & BackupVolumeInfo {
466- BackupMethod : CSISnapshot ,
467- PVCName : pvcPVInfo .PVCName ,
468- PVCNamespace : pvcPVInfo .PVCNamespace ,
469- PVName : pvcPVInfo .PV .Name ,
470- Skipped : false ,
471- SnapshotDataMoved : false ,
472- PreserveLocalSnapshot : true ,
473- CSISnapshotInfo : & CSISnapshotInfo {
474- VSCName : * volumeSnapshot .Status .BoundVolumeSnapshotContentName ,
475- Size : size ,
476- Driver : volumeSnapshotClass .Driver ,
477- SnapshotHandle : snapshotHandle ,
478- OperationID : operation .Spec .OperationID ,
479- ReadyToUse : volumeSnapshot .Status .ReadyToUse ,
480- },
481- PVInfo : & PVInfo {
482- ReclaimPolicy : string (pvcPVInfo .PV .Spec .PersistentVolumeReclaimPolicy ),
483- Labels : pvcPVInfo .PV .Labels ,
484- },
485- }
486-
487- if volumeSnapshot .Status .CreationTime != nil {
488- volumeInfo .StartTimestamp = volumeSnapshot .Status .CreationTime
489- }
490-
491- tmpVolumeInfos = append (tmpVolumeInfos , volumeInfo )
492- } else {
464+ pvcPVInfo := v .pvMap .retrieve ("" , * volumeSnapshot .Spec .Source .PersistentVolumeClaimName , volumeSnapshot .Namespace )
465+ if pvcPVInfo == nil {
493466 v .logger .Warnf ("cannot find info for PVC %s/%s" , volumeSnapshot .Namespace , volumeSnapshot .Spec .Source .PersistentVolumeClaimName )
494467 continue
495468 }
469+ volumeInfo := & BackupVolumeInfo {
470+ BackupMethod : CSISnapshot ,
471+ PVCName : pvcPVInfo .PVCName ,
472+ PVCNamespace : pvcPVInfo .PVCNamespace ,
473+ PVName : pvcPVInfo .PV .Name ,
474+ Skipped : false ,
475+ SnapshotDataMoved : false ,
476+ PreserveLocalSnapshot : true ,
477+ CSISnapshotInfo : & CSISnapshotInfo {
478+ VSCName : * volumeSnapshot .Status .BoundVolumeSnapshotContentName ,
479+ Size : size ,
480+ Driver : volumeSnapshotClass .Driver ,
481+ SnapshotHandle : snapshotHandle ,
482+ OperationID : operation .Spec .OperationID ,
483+ ReadyToUse : volumeSnapshot .Status .ReadyToUse ,
484+ },
485+ PVInfo : & PVInfo {
486+ ReclaimPolicy : string (pvcPVInfo .PV .Spec .PersistentVolumeReclaimPolicy ),
487+ Labels : pvcPVInfo .PV .Labels ,
488+ },
489+ }
490+
491+ if volumeSnapshot .Status .CreationTime != nil {
492+ volumeInfo .StartTimestamp = volumeSnapshot .Status .CreationTime
493+ }
494+
495+ tmpVolumeInfos = append (tmpVolumeInfos , volumeInfo )
496496 }
497497
498498 v .volumeInfos = append (v .volumeInfos , tmpVolumeInfos ... )
@@ -524,18 +524,18 @@ func (v *BackupVolumesInformation) generateVolumeInfoFromPVB() {
524524 continue
525525 }
526526 if pvcName != "" {
527- if pvcPVInfo := v .pvMap .retrieve ("" , pvcName , pvb .Spec .Pod .Namespace ); pvcPVInfo != nil {
528- volumeInfo .PVCName = pvcPVInfo .PVCName
529- volumeInfo .PVCNamespace = pvcPVInfo .PVCNamespace
530- volumeInfo .PVName = pvcPVInfo .PV .Name
531- volumeInfo .PVInfo = & PVInfo {
532- ReclaimPolicy : string (pvcPVInfo .PV .Spec .PersistentVolumeReclaimPolicy ),
533- Labels : pvcPVInfo .PV .Labels ,
534- }
535- } else {
527+ pvcPVInfo := v .pvMap .retrieve ("" , pvcName , pvb .Spec .Pod .Namespace )
528+ if pvcPVInfo == nil {
536529 v .logger .Warnf ("Cannot find info for PVC %s/%s" , pvb .Spec .Pod .Namespace , pvcName )
537530 continue
538531 }
532+ volumeInfo .PVCName = pvcPVInfo .PVCName
533+ volumeInfo .PVCNamespace = pvcPVInfo .PVCNamespace
534+ volumeInfo .PVName = pvcPVInfo .PV .Name
535+ volumeInfo .PVInfo = & PVInfo {
536+ ReclaimPolicy : string (pvcPVInfo .PV .Spec .PersistentVolumeReclaimPolicy ),
537+ Labels : pvcPVInfo .PV .Labels ,
538+ }
539539 } else {
540540 v .logger .Debug ("The PVB %s doesn't have a corresponding PVC" , pvb .Name )
541541 }
@@ -615,51 +615,50 @@ func (v *BackupVolumesInformation) generateVolumeInfoFromDataUpload() {
615615 driverUsedByVSClass = vsClassList [index ].Driver
616616 }
617617 }
618-
619- if pvcPVInfo := v .pvMap .retrieve (
618+ pvcPVInfo := v .pvMap .retrieve (
620619 "" ,
621620 operation .Spec .ResourceIdentifier .Name ,
622621 operation .Spec .ResourceIdentifier .Namespace ,
623- ); pvcPVInfo != nil {
624- dataMover := veleroDatamover
625- if dataUpload .Spec .DataMover != "" {
626- dataMover = dataUpload .Spec .DataMover
627- }
628-
629- volumeInfo := & BackupVolumeInfo {
630- BackupMethod : CSISnapshot ,
631- PVCName : pvcPVInfo .PVCName ,
632- PVCNamespace : pvcPVInfo .PVCNamespace ,
633- PVName : pvcPVInfo .PV .Name ,
634- SnapshotDataMoved : true ,
635- Skipped : false ,
636- CSISnapshotInfo : & CSISnapshotInfo {
637- SnapshotHandle : FieldValueIsUnknown ,
638- VSCName : FieldValueIsUnknown ,
639- OperationID : FieldValueIsUnknown ,
640- Driver : driverUsedByVSClass ,
641- },
642- SnapshotDataMovementInfo : & SnapshotDataMovementInfo {
643- DataMover : dataMover ,
644- UploaderType : velerov1api .BackupRepositoryTypeKopia ,
645- OperationID : operation .Spec .OperationID ,
646- Phase : dataUpload .Status .Phase ,
647- },
648- PVInfo : & PVInfo {
649- ReclaimPolicy : string (pvcPVInfo .PV .Spec .PersistentVolumeReclaimPolicy ),
650- Labels : pvcPVInfo .PV .Labels ,
651- },
652- }
653-
654- if dataUpload .Status .StartTimestamp != nil {
655- volumeInfo .StartTimestamp = dataUpload .Status .StartTimestamp
656- }
657-
658- tmpVolumeInfos = append (tmpVolumeInfos , volumeInfo )
659- } else {
622+ )
623+ if pvcPVInfo == nil {
660624 v .logger .Warnf ("Cannot find info for PVC %s/%s" , operation .Spec .ResourceIdentifier .Namespace , operation .Spec .ResourceIdentifier .Name )
661625 continue
662626 }
627+ dataMover := veleroDatamover
628+ if dataUpload .Spec .DataMover != "" {
629+ dataMover = dataUpload .Spec .DataMover
630+ }
631+
632+ volumeInfo := & BackupVolumeInfo {
633+ BackupMethod : CSISnapshot ,
634+ PVCName : pvcPVInfo .PVCName ,
635+ PVCNamespace : pvcPVInfo .PVCNamespace ,
636+ PVName : pvcPVInfo .PV .Name ,
637+ SnapshotDataMoved : true ,
638+ Skipped : false ,
639+ CSISnapshotInfo : & CSISnapshotInfo {
640+ SnapshotHandle : FieldValueIsUnknown ,
641+ VSCName : FieldValueIsUnknown ,
642+ OperationID : FieldValueIsUnknown ,
643+ Driver : driverUsedByVSClass ,
644+ },
645+ SnapshotDataMovementInfo : & SnapshotDataMovementInfo {
646+ DataMover : dataMover ,
647+ UploaderType : velerov1api .BackupRepositoryTypeKopia ,
648+ OperationID : operation .Spec .OperationID ,
649+ Phase : dataUpload .Status .Phase ,
650+ },
651+ PVInfo : & PVInfo {
652+ ReclaimPolicy : string (pvcPVInfo .PV .Spec .PersistentVolumeReclaimPolicy ),
653+ Labels : pvcPVInfo .PV .Labels ,
654+ },
655+ }
656+
657+ if dataUpload .Status .StartTimestamp != nil {
658+ volumeInfo .StartTimestamp = dataUpload .Status .StartTimestamp
659+ }
660+
661+ tmpVolumeInfos = append (tmpVolumeInfos , volumeInfo )
663662 }
664663
665664 v .volumeInfos = append (v .volumeInfos , tmpVolumeInfos ... )
@@ -754,17 +753,16 @@ func (t *RestoreVolumeInfoTracker) Populate(ctx context.Context, restoredResourc
754753 t .pvcCSISnapshotMap [pvc .Namespace + "/" + pvcName ] = * vs
755754 }
756755 }
757- if pvc .Status .Phase == corev1api .ClaimBound && pvc .Spec .VolumeName != "" {
758- pv := & corev1api.PersistentVolume {}
759- if err := t .client .Get (ctx , kbclient.ObjectKey {Name : pvc .Spec .VolumeName }, pv ); err != nil {
760- log .WithError (err ).Error ("Failed to get PV" )
761- } else {
762- t .pvPvc .insert (* pv , pvcName , pvcNS )
763- }
764- } else {
756+ if ! (pvc .Status .Phase == corev1api .ClaimBound && pvc .Spec .VolumeName != "" ) {
765757 log .Warn ("PVC is not bound or has no volume name" )
766758 continue
767759 }
760+ pv := & corev1api.PersistentVolume {}
761+ if err := t .client .Get (ctx , kbclient.ObjectKey {Name : pvc .Spec .VolumeName }, pv ); err != nil {
762+ log .WithError (err ).Error ("Failed to get PV" )
763+ } else {
764+ t .pvPvc .insert (* pv , pvcName , pvcNS )
765+ }
768766 }
769767 if err := t .client .List (ctx , t .datadownloadList , & kbclient.ListOptions {
770768 Namespace : t .restore .Namespace ,
@@ -791,19 +789,18 @@ func (t *RestoreVolumeInfoTracker) Result() []*RestoreVolumeInfo {
791789 t .log .WithError (err ).Warn ("Fail to get PVC from PodVolumeRestore: " , pvr .Name )
792790 continue
793791 }
794- if pvcName != "" {
795- volumeInfo .PVCName = pvcName
796- volumeInfo .PVCNamespace = pvr .Spec .Pod .Namespace
797- if pvcPVInfo := t .pvPvc .retrieve ("" , pvcName , pvr .Spec .Pod .Namespace ); pvcPVInfo != nil {
798- volumeInfo .PVName = pvcPVInfo .PV .Name
799- }
800- } else {
792+ if pvcName == "" {
801793 // In this case, the volume is not bound to a PVC and
802794 // the PVR will not be able to populate into the volume, so we'll skip it
803795 t .log .Warnf ("unable to get PVC for PodVolumeRestore %s/%s, pod: %s/%s, volume: %s" ,
804796 pvr .Namespace , pvr .Name , pvr .Spec .Pod .Namespace , pvr .Spec .Pod .Name , pvr .Spec .Volume )
805797 continue
806798 }
799+ volumeInfo .PVCName = pvcName
800+ volumeInfo .PVCNamespace = pvr .Spec .Pod .Namespace
801+ if pvcPVInfo := t .pvPvc .retrieve ("" , pvcName , pvr .Spec .Pod .Namespace ); pvcPVInfo != nil {
802+ volumeInfo .PVName = pvcPVInfo .PV .Name
803+ }
807804 volumeInfos = append (volumeInfos , volumeInfo )
808805 }
809806
0 commit comments