Fix the dd and du's node affinity issue.
Run the E2E test on kind / build (push) Failing after 12m15s
Run the E2E test on kind / setup-test-matrix (push) Successful in 4s
Run the E2E test on kind / run-e2e-test (push) Has been skipped

Signed-off-by: Xun Jiang <xun.jiang@broadcom.com>
This commit is contained in:
Xun Jiang
2025-07-31 15:05:22 +08:00
parent 458e01be0f
commit 315db7adf6
10 changed files with 678 additions and 149 deletions
+9 -1
View File
@@ -878,7 +878,15 @@ func (r *DataDownloadReconciler) setupExposeParam(dd *velerov2alpha1api.DataDown
}
}
affinity := kube.GetLoadAffinityByStorageClass(r.loadAffinity, dd.Spec.BackupStorageLocation, log)
targetPVC, err := r.getTargetPVC(context.Background(), dd)
if err != nil {
return exposer.GenericRestoreExposeParam{}, fmt.Errorf("fail to get targetPVC %s: %w", dd.Spec.TargetVolume.PVC, err)
}
if targetPVC.Spec.StorageClassName == nil {
return exposer.GenericRestoreExposeParam{}, fmt.Errorf("targetPVC's StorageClass is nil")
}
affinity := kube.GetLoadAffinityByStorageClass(r.loadAffinity, *targetPVC.Spec.StorageClassName, log)
return exposer.GenericRestoreExposeParam{
TargetPVCName: dd.Spec.TargetVolume.PVC,
@@ -334,7 +334,7 @@ func TestDataDownloadReconcile(t *testing.T) {
{
name: "dd expose failed",
dd: dataDownloadBuilder().Finalizers([]string{DataUploadDownloadFinalizer}).Result(),
targetPVC: builder.ForPersistentVolumeClaim("test-ns", "test-pvc").Result(),
targetPVC: builder.ForPersistentVolumeClaim("test-ns", "test-pvc").StorageClass("test-sc").Result(),
isExposeErr: true,
expected: dataDownloadBuilder().Finalizers([]string{DataUploadDownloadFinalizer}).Phase(velerov2alpha1api.DataDownloadPhaseFailed).Message("error to expose snapshot").Result(),
expectedErr: "Error to expose restore exposer",
@@ -465,6 +465,13 @@ func TestDataDownloadReconcile(t *testing.T) {
expectDataPath: true,
expectCancelRecord: true,
},
{
name: "pvc StorageClass is nil",
dd: dataDownloadBuilder().Finalizers([]string{DataUploadDownloadFinalizer}).Result(),
targetPVC: builder.ForPersistentVolumeClaim("test-ns", "test-pvc").Result(),
expected: dataDownloadBuilder().Finalizers([]string{DataUploadDownloadFinalizer}).Phase(velerov2alpha1api.DataDownloadPhaseFailed).Message("failed to set exposer parameters: targetPVC's StorageClass is nil").Result(),
expectedErr: "targetPVC's StorageClass is nil",
},
}
for _, test := range tests {
@@ -536,9 +543,9 @@ func TestDataDownloadReconcile(t *testing.T) {
r.restoreExposer = nil
} else {
r.restoreExposer = func() exposer.GenericRestoreExposer {
ep := exposermockes.NewGenericRestoreExposer(t)
ep := exposermockes.NewMockGenericRestoreExposer(t)
if test.isExposeErr {
ep.On("Expose", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(errors.New("Error to expose restore exposer"))
ep.On("Expose", mock.Anything, mock.Anything, mock.Anything).Return(errors.New("Error to expose restore exposer"))
} else if test.notNilExpose {
hostingPod := builder.ForPod("test-ns", "test-name").Volumes(&corev1api.Volume{Name: "test-pvc"}).Result()
hostingPod.ObjectMeta.SetUID("test-uid")
@@ -699,7 +706,7 @@ func TestOnDataDownloadCompleted(t *testing.T) {
needErrs := []bool{test.isGetErr, false, false, false}
r, err := initDataDownloadReconciler(t, nil, needErrs...)
r.restoreExposer = func() exposer.GenericRestoreExposer {
ep := exposermockes.NewGenericRestoreExposer(t)
ep := exposermockes.NewMockGenericRestoreExposer(t)
if test.rebindVolumeErr {
ep.On("RebindVolume", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(errors.New("Error to rebind volume"))
} else {
+1 -3
View File
@@ -956,8 +956,6 @@ func (r *DataUploadReconciler) setupExposeParam(du *velerov2alpha1api.DataUpload
}
}
affinity := kube.GetLoadAffinityByStorageClass(r.loadAffinity, du.Spec.CSISnapshot.SnapshotClass, log)
return &exposer.CSISnapshotExposeParam{
SnapshotName: du.Spec.CSISnapshot.VolumeSnapshot,
SourceNamespace: du.Spec.SourceNamespace,
@@ -969,7 +967,7 @@ func (r *DataUploadReconciler) setupExposeParam(du *velerov2alpha1api.DataUpload
OperationTimeout: du.Spec.OperationTimeout.Duration,
ExposeTimeout: r.preparingTimeout,
VolumeSize: pvc.Spec.Resources.Requests[corev1api.ResourceStorage],
Affinity: affinity,
Affinity: r.loadAffinity,
BackupPVCConfig: r.backupPVCConfig,
Resources: r.podResources,
NodeOS: nodeOS,
@@ -989,7 +989,7 @@ func TestPodVolumeRestoreReconcile(t *testing.T) {
r.exposer = nil
} else {
r.exposer = func() exposer.PodVolumeExposer {
ep := exposermockes.NewPodVolumeExposer(t)
ep := exposermockes.NewMockPodVolumeExposer(t)
if test.mockExposeErr != nil {
if boolptr.IsSetToTrue(test.mockExposeErr) {
ep.On("Expose", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(errors.New("Error to expose restore exposer"))
@@ -1156,7 +1156,7 @@ func TestOnPodVolumeRestoreCompleted(t *testing.T) {
needErrs := []bool{test.isGetErr, false, false, false}
r, err := initPodVolumeRestoreReconciler(nil, []client.Object{}, needErrs...)
r.exposer = func() exposer.PodVolumeExposer {
ep := exposermockes.NewPodVolumeExposer(t)
ep := exposermockes.NewMockPodVolumeExposer(t)
ep.On("CleanUp", mock.Anything, mock.Anything).Return()
return ep
}()