diff --git a/changelogs/unreleased/7011-Lyndon-Li b/changelogs/unreleased/7011-Lyndon-Li new file mode 100644 index 000000000..81c69ad5a --- /dev/null +++ b/changelogs/unreleased/7011-Lyndon-Li @@ -0,0 +1 @@ +Fix #6964. Don't use csiSnapshotTimeout (10 min) for waiting snapshot to readyToUse for data mover, so as to make the behavior complied with CSI snapshot backup \ No newline at end of file diff --git a/pkg/controller/data_upload_controller.go b/pkg/controller/data_upload_controller.go index 1a307b0d1..79468ca04 100644 --- a/pkg/controller/data_upload_controller.go +++ b/pkg/controller/data_upload_controller.go @@ -761,7 +761,8 @@ func (r *DataUploadReconciler) setupExposeParam(du *velerov2alpha1api.DataUpload StorageClass: du.Spec.CSISnapshot.StorageClass, HostingPodLabels: map[string]string{velerov1api.DataUploadLabel: du.Name}, AccessMode: accessMode, - Timeout: du.Spec.OperationTimeout.Duration, + OperationTimeout: du.Spec.OperationTimeout.Duration, + ExposeTimeout: r.preparingTimeout, VolumeSize: pvc.Spec.Resources.Requests[corev1.ResourceStorage], }, nil } diff --git a/pkg/exposer/csi_snapshot.go b/pkg/exposer/csi_snapshot.go index 18350e099..64e4a1c85 100644 --- a/pkg/exposer/csi_snapshot.go +++ b/pkg/exposer/csi_snapshot.go @@ -59,8 +59,11 @@ type CSISnapshotExposeParam struct { // HostingPodLabels is the labels that are going to apply to the hosting pod HostingPodLabels map[string]string - // Timeout specifies the time wait for resources operations in Expose - Timeout time.Duration + // OperationTimeout specifies the time wait for resources operations in Expose + OperationTimeout time.Duration + + // ExposeTimeout specifies the timeout for the entire expose process + ExposeTimeout time.Duration // VolumeSize specifies the size of the source volume VolumeSize resource.Quantity @@ -97,7 +100,7 @@ func (e *csiSnapshotExposer) Expose(ctx context.Context, ownerObject corev1.Obje curLog.Info("Exposing CSI snapshot") - volumeSnapshot, err := csi.WaitVolumeSnapshotReady(ctx, e.csiSnapshotClient, csiExposeParam.SnapshotName, csiExposeParam.SourceNamespace, csiExposeParam.Timeout, curLog) + volumeSnapshot, err := csi.WaitVolumeSnapshotReady(ctx, e.csiSnapshotClient, csiExposeParam.SnapshotName, csiExposeParam.SourceNamespace, csiExposeParam.ExposeTimeout, curLog) if err != nil { return errors.Wrapf(err, "error wait volume snapshot ready") } @@ -124,14 +127,14 @@ func (e *csiSnapshotExposer) Expose(ctx context.Context, ownerObject corev1.Obje } }() - err = csi.EnsureDeleteVS(ctx, e.csiSnapshotClient, volumeSnapshot.Name, volumeSnapshot.Namespace, csiExposeParam.Timeout) + err = csi.EnsureDeleteVS(ctx, e.csiSnapshotClient, volumeSnapshot.Name, volumeSnapshot.Namespace, csiExposeParam.OperationTimeout) if err != nil { return errors.Wrap(err, "error to delete volume snapshot") } curLog.WithField("vs name", volumeSnapshot.Name).Infof("VS is deleted in namespace %s", volumeSnapshot.Namespace) - err = csi.EnsureDeleteVSC(ctx, e.csiSnapshotClient, vsc.Name, csiExposeParam.Timeout) + err = csi.EnsureDeleteVSC(ctx, e.csiSnapshotClient, vsc.Name, csiExposeParam.OperationTimeout) if err != nil { return errors.Wrap(err, "error to delete volume snapshot content") } diff --git a/pkg/exposer/csi_snapshot_test.go b/pkg/exposer/csi_snapshot_test.go index 9bb3a4055..fb9ed76b3 100644 --- a/pkg/exposer/csi_snapshot_test.go +++ b/pkg/exposer/csi_snapshot_test.go @@ -152,8 +152,9 @@ func TestExpose(t *testing.T) { name: "wait vs ready fail", ownerBackup: backup, exposeParam: CSISnapshotExposeParam{ - SnapshotName: "fake-vs", - Timeout: time.Millisecond, + SnapshotName: "fake-vs", + OperationTimeout: time.Millisecond, + ExposeTimeout: time.Millisecond, }, err: "error wait volume snapshot ready: error to get volumesnapshot /fake-vs: volumesnapshots.snapshot.storage.k8s.io \"fake-vs\" not found", }, @@ -161,9 +162,10 @@ func TestExpose(t *testing.T) { name: "get vsc fail", ownerBackup: backup, exposeParam: CSISnapshotExposeParam{ - SnapshotName: "fake-vs", - SourceNamespace: "fake-ns", - Timeout: time.Millisecond, + SnapshotName: "fake-vs", + SourceNamespace: "fake-ns", + OperationTimeout: time.Millisecond, + ExposeTimeout: time.Millisecond, }, snapshotClientObj: []runtime.Object{ vsObject, @@ -174,9 +176,10 @@ func TestExpose(t *testing.T) { name: "delete vs fail", ownerBackup: backup, exposeParam: CSISnapshotExposeParam{ - SnapshotName: "fake-vs", - SourceNamespace: "fake-ns", - Timeout: time.Millisecond, + SnapshotName: "fake-vs", + SourceNamespace: "fake-ns", + OperationTimeout: time.Millisecond, + ExposeTimeout: time.Millisecond, }, snapshotClientObj: []runtime.Object{ vsObject, @@ -197,9 +200,10 @@ func TestExpose(t *testing.T) { name: "delete vsc fail", ownerBackup: backup, exposeParam: CSISnapshotExposeParam{ - SnapshotName: "fake-vs", - SourceNamespace: "fake-ns", - Timeout: time.Millisecond, + SnapshotName: "fake-vs", + SourceNamespace: "fake-ns", + OperationTimeout: time.Millisecond, + ExposeTimeout: time.Millisecond, }, snapshotClientObj: []runtime.Object{ vsObject, @@ -220,9 +224,10 @@ func TestExpose(t *testing.T) { name: "create backup vs fail", ownerBackup: backup, exposeParam: CSISnapshotExposeParam{ - SnapshotName: "fake-vs", - SourceNamespace: "fake-ns", - Timeout: time.Millisecond, + SnapshotName: "fake-vs", + SourceNamespace: "fake-ns", + OperationTimeout: time.Millisecond, + ExposeTimeout: time.Millisecond, }, snapshotClientObj: []runtime.Object{ vsObject, @@ -243,9 +248,10 @@ func TestExpose(t *testing.T) { name: "create backup vsc fail", ownerBackup: backup, exposeParam: CSISnapshotExposeParam{ - SnapshotName: "fake-vs", - SourceNamespace: "fake-ns", - Timeout: time.Millisecond, + SnapshotName: "fake-vs", + SourceNamespace: "fake-ns", + OperationTimeout: time.Millisecond, + ExposeTimeout: time.Millisecond, }, snapshotClientObj: []runtime.Object{ vsObject, @@ -280,10 +286,11 @@ func TestExpose(t *testing.T) { name: "create backup pvc fail", ownerBackup: backup, exposeParam: CSISnapshotExposeParam{ - SnapshotName: "fake-vs", - SourceNamespace: "fake-ns", - Timeout: time.Millisecond, - AccessMode: AccessModeFileSystem, + SnapshotName: "fake-vs", + SourceNamespace: "fake-ns", + OperationTimeout: time.Millisecond, + ExposeTimeout: time.Millisecond, + AccessMode: AccessModeFileSystem, }, snapshotClientObj: []runtime.Object{ vsObject, @@ -304,10 +311,11 @@ func TestExpose(t *testing.T) { name: "create backup pod fail", ownerBackup: backup, exposeParam: CSISnapshotExposeParam{ - SnapshotName: "fake-vs", - SourceNamespace: "fake-ns", - AccessMode: AccessModeFileSystem, - Timeout: time.Millisecond, + SnapshotName: "fake-vs", + SourceNamespace: "fake-ns", + AccessMode: AccessModeFileSystem, + OperationTimeout: time.Millisecond, + ExposeTimeout: time.Millisecond, }, snapshotClientObj: []runtime.Object{ vsObject, @@ -331,10 +339,11 @@ func TestExpose(t *testing.T) { name: "success", ownerBackup: backup, exposeParam: CSISnapshotExposeParam{ - SnapshotName: "fake-vs", - SourceNamespace: "fake-ns", - AccessMode: AccessModeFileSystem, - Timeout: time.Millisecond, + SnapshotName: "fake-vs", + SourceNamespace: "fake-ns", + AccessMode: AccessModeFileSystem, + OperationTimeout: time.Millisecond, + ExposeTimeout: time.Millisecond, }, snapshotClientObj: []runtime.Object{ vsObject, @@ -348,11 +357,12 @@ func TestExpose(t *testing.T) { name: "restore size from exposeParam", ownerBackup: backup, exposeParam: CSISnapshotExposeParam{ - SnapshotName: "fake-vs", - SourceNamespace: "fake-ns", - AccessMode: AccessModeFileSystem, - Timeout: time.Millisecond, - VolumeSize: *resource.NewQuantity(567890, ""), + SnapshotName: "fake-vs", + SourceNamespace: "fake-ns", + AccessMode: AccessModeFileSystem, + OperationTimeout: time.Millisecond, + ExposeTimeout: time.Millisecond, + VolumeSize: *resource.NewQuantity(567890, ""), }, snapshotClientObj: []runtime.Object{ vsObjectWithoutRestoreSize,