mirror of
https://github.com/vmware-tanzu/velero.git
synced 2026-01-03 11:45:20 +00:00
cache volume for data download
Signed-off-by: Lyndon-Li <lyonghui@vmware.com>
This commit is contained in:
@@ -60,6 +60,7 @@ import (
|
|||||||
"github.com/vmware-tanzu/velero/pkg/exposer"
|
"github.com/vmware-tanzu/velero/pkg/exposer"
|
||||||
"github.com/vmware-tanzu/velero/pkg/metrics"
|
"github.com/vmware-tanzu/velero/pkg/metrics"
|
||||||
"github.com/vmware-tanzu/velero/pkg/nodeagent"
|
"github.com/vmware-tanzu/velero/pkg/nodeagent"
|
||||||
|
repository "github.com/vmware-tanzu/velero/pkg/repository/manager"
|
||||||
velerotypes "github.com/vmware-tanzu/velero/pkg/types"
|
velerotypes "github.com/vmware-tanzu/velero/pkg/types"
|
||||||
"github.com/vmware-tanzu/velero/pkg/util/filesystem"
|
"github.com/vmware-tanzu/velero/pkg/util/filesystem"
|
||||||
"github.com/vmware-tanzu/velero/pkg/util/kube"
|
"github.com/vmware-tanzu/velero/pkg/util/kube"
|
||||||
@@ -144,6 +145,7 @@ type nodeAgentServer struct {
|
|||||||
dataPathConfigs *velerotypes.NodeAgentConfigs
|
dataPathConfigs *velerotypes.NodeAgentConfigs
|
||||||
backupRepoConfigs map[string]string
|
backupRepoConfigs map[string]string
|
||||||
vgdpCounter *exposer.VgdpCounter
|
vgdpCounter *exposer.VgdpCounter
|
||||||
|
repoConfigMgr repository.ConfigManager
|
||||||
}
|
}
|
||||||
|
|
||||||
func newNodeAgentServer(logger logrus.FieldLogger, factory client.Factory, config nodeAgentServerConfig) (*nodeAgentServer, error) {
|
func newNodeAgentServer(logger logrus.FieldLogger, factory client.Factory, config nodeAgentServerConfig) (*nodeAgentServer, error) {
|
||||||
@@ -237,6 +239,7 @@ func newNodeAgentServer(logger logrus.FieldLogger, factory client.Factory, confi
|
|||||||
namespace: factory.Namespace(),
|
namespace: factory.Namespace(),
|
||||||
nodeName: nodeName,
|
nodeName: nodeName,
|
||||||
metricsAddress: config.metricsAddress,
|
metricsAddress: config.metricsAddress,
|
||||||
|
repoConfigMgr: repository.NewConfigManager(logger),
|
||||||
}
|
}
|
||||||
|
|
||||||
// the cache isn't initialized yet when "validatePodVolumesHostPath" is called, the client returned by the manager cannot
|
// the cache isn't initialized yet when "validatePodVolumesHostPath" is called, the client returned by the manager cannot
|
||||||
@@ -386,6 +389,12 @@ func (s *nodeAgentServer) run() {
|
|||||||
s.logger.Infof("Using customized restorePVC config %v", restorePVCConfig)
|
s.logger.Infof("Using customized restorePVC config %v", restorePVCConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var cachePVCConfig *velerotypes.CachePVC
|
||||||
|
if s.dataPathConfigs != nil && s.dataPathConfigs.CachePVCConfig != nil {
|
||||||
|
cachePVCConfig = s.dataPathConfigs.CachePVCConfig
|
||||||
|
s.logger.Infof("Using customized cachePVC config %v", cachePVCConfig)
|
||||||
|
}
|
||||||
|
|
||||||
dataDownloadReconciler := controller.NewDataDownloadReconciler(
|
dataDownloadReconciler := controller.NewDataDownloadReconciler(
|
||||||
s.mgr.GetClient(),
|
s.mgr.GetClient(),
|
||||||
s.mgr,
|
s.mgr,
|
||||||
@@ -394,12 +403,15 @@ func (s *nodeAgentServer) run() {
|
|||||||
s.vgdpCounter,
|
s.vgdpCounter,
|
||||||
loadAffinity,
|
loadAffinity,
|
||||||
restorePVCConfig,
|
restorePVCConfig,
|
||||||
|
s.backupRepoConfigs,
|
||||||
|
cachePVCConfig,
|
||||||
podResources,
|
podResources,
|
||||||
s.nodeName,
|
s.nodeName,
|
||||||
s.config.dataMoverPrepareTimeout,
|
s.config.dataMoverPrepareTimeout,
|
||||||
s.logger,
|
s.logger,
|
||||||
s.metrics,
|
s.metrics,
|
||||||
dataMovePriorityClass,
|
dataMovePriorityClass,
|
||||||
|
s.repoConfigMgr,
|
||||||
)
|
)
|
||||||
|
|
||||||
if err := dataDownloadReconciler.SetupWithManager(s.mgr); err != nil {
|
if err := dataDownloadReconciler.SetupWithManager(s.mgr); err != nil {
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ import (
|
|||||||
"github.com/vmware-tanzu/velero/pkg/exposer"
|
"github.com/vmware-tanzu/velero/pkg/exposer"
|
||||||
"github.com/vmware-tanzu/velero/pkg/metrics"
|
"github.com/vmware-tanzu/velero/pkg/metrics"
|
||||||
"github.com/vmware-tanzu/velero/pkg/nodeagent"
|
"github.com/vmware-tanzu/velero/pkg/nodeagent"
|
||||||
|
repository "github.com/vmware-tanzu/velero/pkg/repository/manager"
|
||||||
velerotypes "github.com/vmware-tanzu/velero/pkg/types"
|
velerotypes "github.com/vmware-tanzu/velero/pkg/types"
|
||||||
"github.com/vmware-tanzu/velero/pkg/uploader"
|
"github.com/vmware-tanzu/velero/pkg/uploader"
|
||||||
"github.com/vmware-tanzu/velero/pkg/util"
|
"github.com/vmware-tanzu/velero/pkg/util"
|
||||||
@@ -68,11 +69,14 @@ type DataDownloadReconciler struct {
|
|||||||
vgdpCounter *exposer.VgdpCounter
|
vgdpCounter *exposer.VgdpCounter
|
||||||
loadAffinity []*kube.LoadAffinity
|
loadAffinity []*kube.LoadAffinity
|
||||||
restorePVCConfig velerotypes.RestorePVC
|
restorePVCConfig velerotypes.RestorePVC
|
||||||
|
backupRepoConfigs map[string]string
|
||||||
|
cacheVolumeConfigs *velerotypes.CachePVC
|
||||||
podResources corev1api.ResourceRequirements
|
podResources corev1api.ResourceRequirements
|
||||||
preparingTimeout time.Duration
|
preparingTimeout time.Duration
|
||||||
metrics *metrics.ServerMetrics
|
metrics *metrics.ServerMetrics
|
||||||
cancelledDataDownload map[string]time.Time
|
cancelledDataDownload map[string]time.Time
|
||||||
dataMovePriorityClass string
|
dataMovePriorityClass string
|
||||||
|
repoConfigMgr repository.ConfigManager
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDataDownloadReconciler(
|
func NewDataDownloadReconciler(
|
||||||
@@ -83,12 +87,15 @@ func NewDataDownloadReconciler(
|
|||||||
counter *exposer.VgdpCounter,
|
counter *exposer.VgdpCounter,
|
||||||
loadAffinity []*kube.LoadAffinity,
|
loadAffinity []*kube.LoadAffinity,
|
||||||
restorePVCConfig velerotypes.RestorePVC,
|
restorePVCConfig velerotypes.RestorePVC,
|
||||||
|
backupRepoConfigs map[string]string,
|
||||||
|
cacheVolumeConfigs *velerotypes.CachePVC,
|
||||||
podResources corev1api.ResourceRequirements,
|
podResources corev1api.ResourceRequirements,
|
||||||
nodeName string,
|
nodeName string,
|
||||||
preparingTimeout time.Duration,
|
preparingTimeout time.Duration,
|
||||||
logger logrus.FieldLogger,
|
logger logrus.FieldLogger,
|
||||||
metrics *metrics.ServerMetrics,
|
metrics *metrics.ServerMetrics,
|
||||||
dataMovePriorityClass string,
|
dataMovePriorityClass string,
|
||||||
|
repoConfigMgr repository.ConfigManager,
|
||||||
) *DataDownloadReconciler {
|
) *DataDownloadReconciler {
|
||||||
return &DataDownloadReconciler{
|
return &DataDownloadReconciler{
|
||||||
client: client,
|
client: client,
|
||||||
@@ -99,6 +106,8 @@ func NewDataDownloadReconciler(
|
|||||||
nodeName: nodeName,
|
nodeName: nodeName,
|
||||||
restoreExposer: exposer.NewGenericRestoreExposer(kubeClient, logger),
|
restoreExposer: exposer.NewGenericRestoreExposer(kubeClient, logger),
|
||||||
restorePVCConfig: restorePVCConfig,
|
restorePVCConfig: restorePVCConfig,
|
||||||
|
backupRepoConfigs: backupRepoConfigs,
|
||||||
|
cacheVolumeConfigs: cacheVolumeConfigs,
|
||||||
dataPathMgr: dataPathMgr,
|
dataPathMgr: dataPathMgr,
|
||||||
vgdpCounter: counter,
|
vgdpCounter: counter,
|
||||||
loadAffinity: loadAffinity,
|
loadAffinity: loadAffinity,
|
||||||
@@ -107,6 +116,7 @@ func NewDataDownloadReconciler(
|
|||||||
metrics: metrics,
|
metrics: metrics,
|
||||||
cancelledDataDownload: make(map[string]time.Time),
|
cancelledDataDownload: make(map[string]time.Time),
|
||||||
dataMovePriorityClass: dataMovePriorityClass,
|
dataMovePriorityClass: dataMovePriorityClass,
|
||||||
|
repoConfigMgr: repoConfigMgr,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -882,6 +892,19 @@ func (r *DataDownloadReconciler) setupExposeParam(dd *velerov2alpha1api.DataDown
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var cacheVolume *exposer.CacheConfigs
|
||||||
|
if r.cacheVolumeConfigs != nil {
|
||||||
|
if limit, err := r.repoConfigMgr.ClientSideCacheLimit(velerov1api.BackupRepositoryTypeKopia, r.backupRepoConfigs); err != nil {
|
||||||
|
log.WithError(err).Warnf("Failed to get client side cache limit for repo type %s from configs %v", velerov1api.BackupRepositoryTypeKopia, r.backupRepoConfigs)
|
||||||
|
} else {
|
||||||
|
cacheVolume = &exposer.CacheConfigs{
|
||||||
|
Limit: limit,
|
||||||
|
StorageClass: r.cacheVolumeConfigs.StorageClass,
|
||||||
|
ResidentThreshold: r.cacheVolumeConfigs.ResidentThreshold,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return exposer.GenericRestoreExposeParam{
|
return exposer.GenericRestoreExposeParam{
|
||||||
TargetPVCName: dd.Spec.TargetVolume.PVC,
|
TargetPVCName: dd.Spec.TargetVolume.PVC,
|
||||||
TargetNamespace: dd.Spec.TargetVolume.Namespace,
|
TargetNamespace: dd.Spec.TargetVolume.Namespace,
|
||||||
@@ -895,6 +918,8 @@ func (r *DataDownloadReconciler) setupExposeParam(dd *velerov2alpha1api.DataDown
|
|||||||
RestorePVCConfig: r.restorePVCConfig,
|
RestorePVCConfig: r.restorePVCConfig,
|
||||||
LoadAffinity: r.loadAffinity,
|
LoadAffinity: r.loadAffinity,
|
||||||
PriorityClassName: r.dataMovePriorityClass,
|
PriorityClassName: r.dataMovePriorityClass,
|
||||||
|
RestoreSize: dd.Spec.SnapshotSize,
|
||||||
|
CacheVolume: cacheVolume,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ func initDataDownloadReconcilerWithError(t *testing.T, objects []any, needError
|
|||||||
|
|
||||||
dataPathMgr := datapath.NewManager(1)
|
dataPathMgr := datapath.NewManager(1)
|
||||||
|
|
||||||
return NewDataDownloadReconciler(&fakeClient, nil, fakeKubeClient, dataPathMgr, nil, nil, velerotypes.RestorePVC{}, corev1api.ResourceRequirements{}, "test-node", time.Minute*5, velerotest.NewLogger(), metrics.NewServerMetrics(), ""), nil
|
return NewDataDownloadReconciler(&fakeClient, nil, fakeKubeClient, dataPathMgr, nil, nil, velerotypes.RestorePVC{}, nil, nil, corev1api.ResourceRequirements{}, "test-node", time.Minute*5, velerotest.NewLogger(), metrics.NewServerMetrics(), "", nil), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDataDownloadReconcile(t *testing.T) {
|
func TestDataDownloadReconcile(t *testing.T) {
|
||||||
|
|||||||
Reference in New Issue
Block a user