From 78ddeef96c2a8d877bfbe7e78182dde8a55525d0 Mon Sep 17 00:00:00 2001 From: Lyndon-Li Date: Thu, 25 Sep 2025 18:19:23 +0800 Subject: [PATCH] add cache dir to VGDP Signed-off-by: Lyndon-Li --- pkg/cmd/cli/datamover/restore.go | 4 +++- pkg/cmd/cli/podvolume/restore.go | 4 +++- pkg/datamover/restore_micro_service.go | 5 ++++- pkg/datapath/file_system.go | 7 ++++--- pkg/podvolume/restore_micro_service.go | 5 ++++- pkg/repository/provider/provider.go | 1 + 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/pkg/cmd/cli/datamover/restore.go b/pkg/cmd/cli/datamover/restore.go index 7e11df822..b2efdbc34 100644 --- a/pkg/cmd/cli/datamover/restore.go +++ b/pkg/cmd/cli/datamover/restore.go @@ -53,6 +53,7 @@ type dataMoverRestoreConfig struct { volumePath string volumeMode string ddName string + cacheDir string resourceTimeout time.Duration } @@ -89,6 +90,7 @@ func NewRestoreCommand(f client.Factory) *cobra.Command { command.Flags().StringVar(&config.volumePath, "volume-path", config.volumePath, "The full path of the volume to be restored") command.Flags().StringVar(&config.volumeMode, "volume-mode", config.volumeMode, "The mode of the volume to be restored") command.Flags().StringVar(&config.ddName, "data-download", config.ddName, "The data download name") + command.Flags().StringVar(&config.cacheDir, "cache-volume-path", config.cacheDir, "The full path of the cache volume") command.Flags().DurationVar(&config.resourceTimeout, "resource-timeout", config.resourceTimeout, "How long to wait for resource processes which are not covered by other specific timeout parameters.") _ = command.MarkFlagRequired("volume-path") @@ -288,5 +290,5 @@ func (s *dataMoverRestore) createDataPathService() (dataPathService, error) { return datamover.NewRestoreMicroService(s.ctx, s.client, s.kubeClient, s.config.ddName, s.namespace, s.nodeName, datapath.AccessPoint{ ByPath: s.config.volumePath, VolMode: uploader.PersistentVolumeMode(s.config.volumeMode), - }, s.dataPathMgr, repoEnsurer, credGetter, duInformer, s.logger), nil + }, s.dataPathMgr, repoEnsurer, credGetter, duInformer, s.config.cacheDir, s.logger), nil } diff --git a/pkg/cmd/cli/podvolume/restore.go b/pkg/cmd/cli/podvolume/restore.go index 8d5924532..4c1596a04 100644 --- a/pkg/cmd/cli/podvolume/restore.go +++ b/pkg/cmd/cli/podvolume/restore.go @@ -51,6 +51,7 @@ import ( type podVolumeRestoreConfig struct { volumePath string pvrName string + cacheDir string resourceTimeout time.Duration } @@ -86,6 +87,7 @@ func NewRestoreCommand(f client.Factory) *cobra.Command { command.Flags().Var(formatFlag, "log-format", fmt.Sprintf("The format for log output. Valid values are %s.", strings.Join(formatFlag.AllowedValues(), ", "))) command.Flags().StringVar(&config.volumePath, "volume-path", config.volumePath, "The full path of the volume to be restored") command.Flags().StringVar(&config.pvrName, "pod-volume-restore", config.pvrName, "The PVR name") + command.Flags().StringVar(&config.cacheDir, "cache-volume-path", config.cacheDir, "The full path of the cache volume") command.Flags().DurationVar(&config.resourceTimeout, "resource-timeout", config.resourceTimeout, "How long to wait for resource processes which are not covered by other specific timeout parameters.") _ = command.MarkFlagRequired("volume-path") @@ -294,5 +296,5 @@ func (s *podVolumeRestore) createDataPathService() (dataPathService, error) { return podvolume.NewRestoreMicroService(s.ctx, s.client, s.kubeClient, s.config.pvrName, s.namespace, s.nodeName, datapath.AccessPoint{ ByPath: s.config.volumePath, VolMode: uploader.PersistentVolumeFilesystem, - }, s.dataPathMgr, repoEnsurer, credGetter, pvrInformer, s.logger), nil + }, s.dataPathMgr, repoEnsurer, credGetter, pvrInformer, s.config.cacheDir, s.logger), nil } diff --git a/pkg/datamover/restore_micro_service.go b/pkg/datamover/restore_micro_service.go index 25a3f3ff3..1b7ebcc09 100644 --- a/pkg/datamover/restore_micro_service.go +++ b/pkg/datamover/restore_micro_service.go @@ -61,11 +61,12 @@ type RestoreMicroService struct { ddInformer cache.Informer ddHandler cachetool.ResourceEventHandlerRegistration nodeName string + cacheDir string } func NewRestoreMicroService(ctx context.Context, client client.Client, kubeClient kubernetes.Interface, dataDownloadName string, namespace string, nodeName string, sourceTargetPath datapath.AccessPoint, dataPathMgr *datapath.Manager, repoEnsurer *repository.Ensurer, cred *credentials.CredentialGetter, - ddInformer cache.Informer, log logrus.FieldLogger) *RestoreMicroService { + ddInformer cache.Informer, cacheDir string, log logrus.FieldLogger) *RestoreMicroService { return &RestoreMicroService{ ctx: ctx, client: client, @@ -80,6 +81,7 @@ func NewRestoreMicroService(ctx context.Context, client client.Client, kubeClien nodeName: nodeName, resultSignal: make(chan dataPathResult), ddInformer: ddInformer, + cacheDir: cacheDir, } } @@ -172,6 +174,7 @@ func (r *RestoreMicroService) RunCancelableDataPath(ctx context.Context) (string RepoIdentifier: "", RepositoryEnsurer: r.repoEnsurer, CredentialGetter: r.credentialGetter, + CacheDir: r.cacheDir, }); err != nil { return "", errors.Wrap(err, "error to initialize data path") } diff --git a/pkg/datapath/file_system.go b/pkg/datapath/file_system.go index 7e8b292df..1ddf4b346 100644 --- a/pkg/datapath/file_system.go +++ b/pkg/datapath/file_system.go @@ -44,6 +44,7 @@ type FSBRInitParam struct { RepositoryEnsurer *repository.Ensurer CredentialGetter *credentials.CredentialGetter Filesystem filesystem.Interface + CacheDir string } // FSBRStartParam define the input param for FSBR start @@ -112,7 +113,7 @@ func (fs *fileSystemBR) Init(ctx context.Context, param any) error { return errors.Wrapf(err, "error to ensure backup repository %s-%s-%s", initParam.BSLName, initParam.SourceNamespace, initParam.RepositoryType) } - err = fs.boostRepoConnect(ctx, initParam.RepositoryType, initParam.CredentialGetter) + err = fs.boostRepoConnect(ctx, initParam.RepositoryType, initParam.CredentialGetter, initParam.CacheDir) if err != nil { return errors.Wrapf(err, "error to boost backup repository connection %s-%s-%s", initParam.BSLName, initParam.SourceNamespace, initParam.RepositoryType) } @@ -245,9 +246,9 @@ func (fs *fileSystemBR) Cancel() { fs.log.WithField("user", fs.jobName).Info("FileSystemBR is canceled") } -func (fs *fileSystemBR) boostRepoConnect(ctx context.Context, repositoryType string, credentialGetter *credentials.CredentialGetter) error { +func (fs *fileSystemBR) boostRepoConnect(ctx context.Context, repositoryType string, credentialGetter *credentials.CredentialGetter, cacheDir string) error { if repositoryType == velerov1api.BackupRepositoryTypeKopia { - if err := repoProvider.NewUnifiedRepoProvider(*credentialGetter, repositoryType, fs.log).BoostRepoConnect(ctx, repoProvider.RepoParam{BackupLocation: fs.backupLocation, BackupRepo: fs.backupRepo}); err != nil { + if err := repoProvider.NewUnifiedRepoProvider(*credentialGetter, repositoryType, fs.log).BoostRepoConnect(ctx, repoProvider.RepoParam{BackupLocation: fs.backupLocation, BackupRepo: fs.backupRepo, CacheDir: cacheDir}); err != nil { return err } } else { diff --git a/pkg/podvolume/restore_micro_service.go b/pkg/podvolume/restore_micro_service.go index 9bfc0a287..40d6aa1fb 100644 --- a/pkg/podvolume/restore_micro_service.go +++ b/pkg/podvolume/restore_micro_service.go @@ -63,11 +63,12 @@ type RestoreMicroService struct { pvrInformer cache.Informer pvrHandler cachetool.ResourceEventHandlerRegistration nodeName string + cacheDir string } func NewRestoreMicroService(ctx context.Context, client client.Client, kubeClient kubernetes.Interface, pvrName string, namespace string, nodeName string, sourceTargetPath datapath.AccessPoint, dataPathMgr *datapath.Manager, repoEnsurer *repository.Ensurer, cred *credentials.CredentialGetter, - pvrInformer cache.Informer, log logrus.FieldLogger) *RestoreMicroService { + pvrInformer cache.Informer, cacheDir string, log logrus.FieldLogger) *RestoreMicroService { return &RestoreMicroService{ ctx: ctx, client: client, @@ -82,6 +83,7 @@ func NewRestoreMicroService(ctx context.Context, client client.Client, kubeClien nodeName: nodeName, resultSignal: make(chan dataPathResult), pvrInformer: pvrInformer, + cacheDir: cacheDir, } } @@ -175,6 +177,7 @@ func (r *RestoreMicroService) RunCancelableDataPath(ctx context.Context) (string RepoIdentifier: "", RepositoryEnsurer: r.repoEnsurer, CredentialGetter: r.credentialGetter, + CacheDir: r.cacheDir, }); err != nil { return "", errors.Wrap(err, "error to initialize data path") } diff --git a/pkg/repository/provider/provider.go b/pkg/repository/provider/provider.go index d27d269da..822e69aba 100644 --- a/pkg/repository/provider/provider.go +++ b/pkg/repository/provider/provider.go @@ -27,6 +27,7 @@ import ( type RepoParam struct { BackupLocation *velerov1api.BackupStorageLocation BackupRepo *velerov1api.BackupRepository + CacheDir string } // Provider defines the methods to manipulate a backup repository