Merge pull request #10176 from blackpiglet/jxun/volume_policy_support_data_mover_setting

Support to set data mover for the uploader from volume policy.
This commit is contained in:
Xun Jiang/Bruce Jiang
2026-08-13 11:34:14 +08:00
committed by GitHub
6 changed files with 730 additions and 96 deletions
+12 -2
View File
@@ -407,6 +407,8 @@ func (p *pvcBackupItemAction) Execute(
"Backup": backup.Name,
})
dataMoverFromVolumePolicy := vh.GetDataMoverFromActionParameters(item, kuberesource.PersistentVolumeClaims)
dataUploadLog.Info("Starting data upload of backup")
dataUpload, err := createDataUpload(
@@ -418,6 +420,7 @@ func (p *pvcBackupItemAction) Execute(
operationID,
vsc,
fsType,
dataMoverFromVolumePolicy,
)
if err != nil {
dataUploadLog.WithError(err).Error("failed to submit DataUpload")
@@ -557,6 +560,7 @@ func newDataUpload(
operationID string,
vsc *snapshotv1api.VolumeSnapshotContent,
fsType string,
dataMoverFromVolumePolicy string,
) *velerov2alpha1.DataUpload {
parentSnapshot := ""
@@ -564,6 +568,11 @@ func newDataUpload(
parentSnapshot = veleroshared.DataUploadParentSnapshotNone
}
dataMover := backup.Spec.DataMover
if dataMoverFromVolumePolicy != "" {
dataMover = dataMoverFromVolumePolicy
}
dataUpload := &velerov2alpha1.DataUpload{
TypeMeta: metav1.TypeMeta{
APIVersion: velerov2alpha1.SchemeGroupVersion.String(),
@@ -596,7 +605,7 @@ func newDataUpload(
Driver: vsc.Spec.Driver,
},
SourcePVC: pvc.Name,
DataMover: backup.Spec.DataMover,
DataMover: dataMover,
BackupStorageLocation: backup.Spec.StorageLocation,
SourceNamespace: pvc.Namespace,
OperationTimeout: backup.Spec.CSISnapshotTimeout,
@@ -627,8 +636,9 @@ func createDataUpload(
operationID string,
vsc *snapshotv1api.VolumeSnapshotContent,
fsType string,
dataMoverFromVolumePolicy string,
) (*velerov2alpha1.DataUpload, error) {
dataUpload := newDataUpload(backup, vs, pvc, operationID, vsc, fsType)
dataUpload := newDataUpload(backup, vs, pvc, operationID, vsc, fsType, dataMoverFromVolumePolicy)
err := crClient.Create(ctx, dataUpload)
if err != nil {
+23 -8
View File
@@ -2229,12 +2229,13 @@ func TestGetOrCreateVolumeHelper(t *testing.T) {
func TestNewDataUpload(t *testing.T) {
tests := []struct {
name string
backupType velerov1api.BackupType
vsClassName *string
uploaderConfig *velerov1api.UploaderConfigForBackup
expectedParentSnap string
expectedDataMoverCfg map[string]string
name string
backupType velerov1api.BackupType
vsClassName *string
uploaderConfig *velerov1api.UploaderConfigForBackup
dataMoverFromVolumePolicy string
expectedParentSnap string
expectedDataMoverCfg map[string]string
}{
{
name: "Full backup type, no uploader config, no vs class name",
@@ -2262,6 +2263,15 @@ func TestNewDataUpload(t *testing.T) {
expectedParentSnap: "",
expectedDataMoverCfg: nil,
},
{
name: "Default backup type, uploader config with 0 parallel files",
backupType: "",
vsClassName: ptr.To("test-vs-class"),
uploaderConfig: &velerov1api.UploaderConfigForBackup{ParallelFilesUpload: 0},
dataMoverFromVolumePolicy: "velero-block",
expectedParentSnap: "",
expectedDataMoverCfg: nil,
},
}
for _, tc := range tests {
@@ -2310,7 +2320,7 @@ func TestNewDataUpload(t *testing.T) {
operationID := "test-op-id"
fsType := "ext4"
du := newDataUpload(backup, vs, pvc, operationID, vsc, fsType)
du := newDataUpload(backup, vs, pvc, operationID, vsc, fsType, tc.dataMoverFromVolumePolicy)
require.NotNil(t, du)
assert.Equal(t, velerov2alpha1.SchemeGroupVersion.String(), du.APIVersion)
@@ -2344,7 +2354,12 @@ func TestNewDataUpload(t *testing.T) {
}
assert.Equal(t, pvc.Name, du.Spec.SourcePVC)
assert.Equal(t, backup.Spec.DataMover, du.Spec.DataMover)
if tc.dataMoverFromVolumePolicy != "" {
assert.Equal(t, tc.dataMoverFromVolumePolicy, du.Spec.DataMover)
} else {
assert.Equal(t, backup.Spec.DataMover, du.Spec.DataMover)
}
assert.Equal(t, backup.Spec.StorageLocation, du.Spec.BackupStorageLocation)
assert.Equal(t, pvc.Namespace, du.Spec.SourceNamespace)
assert.Equal(t, backup.Spec.CSISnapshotTimeout, du.Spec.OperationTimeout)
@@ -28,4 +28,5 @@ type VolumeHelper interface {
ShouldPerformCustomAction(obj runtime.Unstructured, groupResource schema.GroupResource, matchParams map[string]any) (bool, error)
GetActionParameters(obj runtime.Unstructured, groupResource schema.GroupResource) (bool, string, map[string]any, error)
GetSnapshotClass(obj runtime.Unstructured, groupResource schema.GroupResource) (string, error)
GetDataMoverFromActionParameters(obj runtime.Unstructured, groupResource schema.GroupResource) string
}