From 2c5dcb8474a9ee9081c007dbd9deff63b595e05a Mon Sep 17 00:00:00 2001 From: Lyndon-Li Date: Wed, 24 Jun 2026 18:27:57 +0800 Subject: [PATCH] clone PV after deleting retained PV Signed-off-by: Lyndon-Li --- pkg/exposer/generic_restore.go | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/pkg/exposer/generic_restore.go b/pkg/exposer/generic_restore.go index f79b0b629..bfffe3dfe 100644 --- a/pkg/exposer/generic_restore.go +++ b/pkg/exposer/generic_restore.go @@ -459,13 +459,6 @@ func (e *genericRestoreExposer) rebindVolumeChangeMode(ctx context.Context, owne return errors.Wrapf(err, "error to delete restore pod %s", restorePodName) } - err = kube.EnsureDeletePVC(ctx, e.kubeClient.CoreV1(), restorePVCName, ownerObject.Namespace, param.OperationTimeout) - if err != nil { - return errors.Wrapf(err, "error to delete restore PVC %s", restorePVCName) - } - - curLog.WithField("restore PVC", restorePVCName).Info("Restore PVC is deleted") - err = kube.WaitVolumeDetached(ctx, e.kubeClient.StorageV1(), restorePV.Name, param.OperationTimeout) if err != nil { return errors.Wrapf(err, "error waiting for restore PV %s to detach", restorePV.Name) @@ -473,12 +466,12 @@ func (e *genericRestoreExposer) rebindVolumeChangeMode(ctx context.Context, owne curLog.WithField("restore PV", restorePV.Name).Info("Restore PV is detached") - rebindPV, err = kube.RebindPV(ctx, e.kubeClient.CoreV1(), uuid.NewString(), restorePV, targetPVC, orgReclaim, param.TargetFSType) + err = kube.EnsureDeletePVC(ctx, e.kubeClient.CoreV1(), restorePVCName, ownerObject.Namespace, param.OperationTimeout) if err != nil { - return errors.Wrapf(err, "error rebinding PV for target PVC %s", param.TargetPVCName) + return errors.Wrapf(err, "error to delete restore PVC %s", restorePVCName) } - curLog.WithField("rebind PV", rebindPV.Name).Info("Rebind PV is created") + curLog.WithField("restore PVC", restorePVCName).Info("Restore PVC is deleted") err = kube.EnsureDeletePV(ctx, e.kubeClient.CoreV1(), restorePV.Name, param.OperationTimeout) if err != nil { @@ -489,6 +482,13 @@ func (e *genericRestoreExposer) rebindVolumeChangeMode(ctx context.Context, owne retained = nil + rebindPV, err = kube.RebindPV(ctx, e.kubeClient.CoreV1(), uuid.NewString(), restorePV, targetPVC, orgReclaim, param.TargetFSType) + if err != nil { + return errors.Wrapf(err, "error rebinding PV for target PVC %s", param.TargetPVCName) + } + + curLog.WithField("rebind PV", rebindPV.Name).Info("Rebind PV is created") + _, err = kube.RebindPVC(ctx, e.kubeClient.CoreV1(), targetPVC, rebindPV.Name) if err != nil { return errors.Wrapf(err, "error to rebind target PVC %s/%s to %s", targetPVC.Namespace, targetPVC.Name, rebindPV.Name) @@ -539,13 +539,6 @@ func (e *genericRestoreExposer) rebindVolumeSameMode(ctx context.Context, ownerO return errors.Wrapf(err, "error to delete restore pod %s", restorePodName) } - err = kube.EnsureDeletePVC(ctx, e.kubeClient.CoreV1(), restorePVCName, ownerObject.Namespace, param.OperationTimeout) - if err != nil { - return errors.Wrapf(err, "error to delete restore PVC %s", restorePVCName) - } - - curLog.WithField("restore PVC", restorePVCName).Info("Restore PVC is deleted") - err = kube.WaitVolumeDetached(ctx, e.kubeClient.StorageV1(), restorePV.Name, param.OperationTimeout) if err != nil { return errors.Wrapf(err, "error waiting for restore PV %s to detach", restorePV.Name) @@ -553,6 +546,13 @@ func (e *genericRestoreExposer) rebindVolumeSameMode(ctx context.Context, ownerO curLog.WithField("restore PV", restorePV.Name).Info("Restore PV is detached") + err = kube.EnsureDeletePVC(ctx, e.kubeClient.CoreV1(), restorePVCName, ownerObject.Namespace, param.OperationTimeout) + if err != nil { + return errors.Wrapf(err, "error to delete restore PVC %s", restorePVCName) + } + + curLog.WithField("restore PVC", restorePVCName).Info("Restore PVC is deleted") + _, err = kube.RebindPVC(ctx, e.kubeClient.CoreV1(), targetPVC, restorePV.Name) if err != nil { return errors.Wrapf(err, "error to rebind target PVC %s/%s to %s", targetPVC.Namespace, targetPVC.Name, restorePV.Name)