From a65e11e04dab7e5a81c53f6fec8c47070a8cacc0 Mon Sep 17 00:00:00 2001 From: Lyndon-Li Date: Tue, 3 Jun 2025 13:45:40 +0800 Subject: [PATCH] data path for vgdp ms pvb Signed-off-by: Lyndon-Li --- pkg/builder/pod_volume_backup_builder.go | 6 +++++ pkg/cmd/cli/podvolume/backup.go | 6 ++--- pkg/podvolume/backup_micro_service.go | 2 +- pkg/podvolume/util_test.go | 31 ++++++++++++++++++++++++ 4 files changed, 41 insertions(+), 4 deletions(-) diff --git a/pkg/builder/pod_volume_backup_builder.go b/pkg/builder/pod_volume_backup_builder.go index 80cb55042..ac89f21de 100644 --- a/pkg/builder/pod_volume_backup_builder.go +++ b/pkg/builder/pod_volume_backup_builder.go @@ -113,3 +113,9 @@ func (b *PodVolumeBackupBuilder) UploaderType(uploaderType string) *PodVolumeBac b.object.Spec.UploaderType = uploaderType return b } + +// Annotations sets the PodVolumeBackup's Annotations. +func (b *PodVolumeBackupBuilder) Annotations(annotations map[string]string) *PodVolumeBackupBuilder { + b.object.Annotations = annotations + return b +} diff --git a/pkg/cmd/cli/podvolume/backup.go b/pkg/cmd/cli/podvolume/backup.go index 537caa3cb..ed2d6c09a 100644 --- a/pkg/cmd/cli/podvolume/backup.go +++ b/pkg/cmd/cli/podvolume/backup.go @@ -24,7 +24,7 @@ import ( "github.com/pkg/errors" "github.com/sirupsen/logrus" "github.com/spf13/cobra" - v1 "k8s.io/api/core/v1" + corev1api "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/kubernetes" @@ -128,7 +128,7 @@ func newPodVolumeBackup(logger logrus.FieldLogger, factory client.Factory, confi return nil, errors.Wrap(err, "error to add velero v1 scheme") } - if err := v1.AddToScheme(scheme); err != nil { + if err := corev1api.AddToScheme(scheme); err != nil { cancelFunc() return nil, errors.Wrap(err, "error to add core v1 scheme") } @@ -139,7 +139,7 @@ func newPodVolumeBackup(logger logrus.FieldLogger, factory client.Factory, confi cacheOption := ctlcache.Options{ Scheme: scheme, ByObject: map[ctlclient.Object]ctlcache.ByObject{ - &v1.Pod{}: { + &corev1api.Pod{}: { Field: fields.Set{"spec.nodeName": nodeName}.AsSelector(), }, &velerov1api.PodVolumeBackup{}: { diff --git a/pkg/podvolume/backup_micro_service.go b/pkg/podvolume/backup_micro_service.go index 275b57fb9..3c9cbab61 100644 --- a/pkg/podvolume/backup_micro_service.go +++ b/pkg/podvolume/backup_micro_service.go @@ -300,7 +300,7 @@ func (r *BackupMicroService) closeDataPath(ctx context.Context, duName string) { } func (r *BackupMicroService) cancelPodVolumeBackup(pvb *velerov1api.PodVolumeBackup) { - r.logger.WithField("pvb", pvb.Name).Info("PVB is being canceled") + r.logger.WithField("PVB", pvb.Name).Info("PVB is being canceled") r.eventRecorder.Event(pvb, false, datapath.EventReasonCancelling, "Canceling for PVB %s", pvb.Name) diff --git a/pkg/podvolume/util_test.go b/pkg/podvolume/util_test.go index 395b45a3f..bfd33e55e 100644 --- a/pkg/podvolume/util_test.go +++ b/pkg/podvolume/util_test.go @@ -300,3 +300,34 @@ func TestVolumeHasNonRestorableSource(t *testing.T) { }) } } + +func TestGetRealSource(t *testing.T) { + testCases := []struct { + name string + pvb *velerov1api.PodVolumeBackup + expected string + }{ + { + name: "pvb with empty annotation", + pvb: builder.ForPodVolumeBackup("fake-ns", "fake-name").PodNamespace("fake-pod-ns").PodName("fake-pod-name").Volume("fake-volume").Result(), + expected: "fake-pod-ns/fake-pod-name/fake-volume", + }, + { + name: "pvb without pvc name annotation", + pvb: builder.ForPodVolumeBackup("fake-ns", "fake-name").PodNamespace("fake-pod-ns").PodName("fake-pod-name").Volume("fake-volume").Annotations(map[string]string{}).Result(), + expected: "fake-pod-ns/fake-pod-name/fake-volume", + }, + { + name: "pvb with pvc name annotation", + pvb: builder.ForPodVolumeBackup("fake-ns", "fake-name").PodNamespace("fake-pod-ns").PodName("fake-pod-name").Volume("fake-volume").Annotations(map[string]string{"velero.io/pvc-name": "fake-pvc-name"}).Result(), + expected: "fake-pod-ns/fake-pod-name/fake-pvc-name", + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + actual := GetRealSource(tc.pvb) + assert.Equal(t, tc.expected, actual) + }) + } +}