From f2a27c3864606e82f98b2ea0058598f179aec54f Mon Sep 17 00:00:00 2001 From: 0xLeo258 Date: Thu, 11 Sep 2025 14:45:39 +0800 Subject: [PATCH] fix9247: Protect VolumeSnapshot field Signed-off-by: 0xLeo258 --- pkg/backup/item_backupper.go | 2 ++ pkg/backup/request.go | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/backup/item_backupper.go b/pkg/backup/item_backupper.go index b890b23c3..7b7f5cf62 100644 --- a/pkg/backup/item_backupper.go +++ b/pkg/backup/item_backupper.go @@ -699,6 +699,8 @@ func (ib *itemBackupper) takePVSnapshot(obj runtime.Unstructured, log logrus.Fie snapshot.Status.Phase = volume.SnapshotPhaseCompleted snapshot.Status.ProviderSnapshotID = snapshotID } + ib.backupRequest.requestLock.Lock() + defer ib.backupRequest.requestLock.Unlock() ib.backupRequest.VolumeSnapshots = append(ib.backupRequest.VolumeSnapshots, snapshot) // nil errors are automatically removed diff --git a/pkg/backup/request.go b/pkg/backup/request.go index 3ec05ee04..b81bde74d 100644 --- a/pkg/backup/request.go +++ b/pkg/backup/request.go @@ -17,6 +17,8 @@ limitations under the License. package backup import ( + "sync" + "github.com/vmware-tanzu/velero/internal/hook" "github.com/vmware-tanzu/velero/internal/resourcepolicies" "github.com/vmware-tanzu/velero/internal/volume" @@ -36,7 +38,7 @@ type itemKey struct { // materialized (e.g. backup/snapshot locations, includes/excludes, etc.) type Request struct { *velerov1api.Backup - + requestLock sync.Mutex StorageLocation *velerov1api.BackupStorageLocation SnapshotLocations []*velerov1api.VolumeSnapshotLocation NamespaceIncludesExcludes *collections.IncludesExcludes