mirror of
https://github.com/vmware-tanzu/velero.git
synced 2026-09-18 14:04:39 +00:00
Merge pull request #10494 from abhayrajjais01/fix/csi-pvc-action-context-and-errors
fix(restore): propagate context and standardize errors in CSI PVC restore action
This commit is contained in:
@@ -229,7 +229,7 @@ func (p *pvcRestoreItemAction) executeWithDataMove(logger *logrus.Entry, input *
|
||||
var dataUploadResult *velerov2alpha1.DataUploadResult
|
||||
dataUploadResult, err = getDataUploadResult(ctx, input.Restore, pvc, p.crClient)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "fail get DataUploadResult for restore: %s", input.Restore.Name)
|
||||
return nil, errors.Wrapf(err, "failed to get DataUploadResult for restore: %s", input.Restore.Name)
|
||||
}
|
||||
|
||||
var volumeSnapshot *snapshotv1api.VolumeSnapshot
|
||||
@@ -282,10 +282,10 @@ func (p *pvcRestoreItemAction) executeWithDataMove(logger *logrus.Entry, input *
|
||||
|
||||
var dataDownload *velerov2alpha1.DataDownload
|
||||
dataDownload, err = restoreFromDataUploadResult(
|
||||
context.Background(), dataUploadResult, input.Restore, backup, pvc, existingPV, newNamespace,
|
||||
ctx, dataUploadResult, input.Restore, backup, pvc, existingPV, newNamespace,
|
||||
operationID, string(restoreType), volumeSnapshot, p.crClient)
|
||||
if err != nil {
|
||||
logger.Errorf("Fail to restore from DataUploadResult: %s", err.Error())
|
||||
logger.Errorf("Failed to restore from DataUploadResult: %s", err.Error())
|
||||
return nil, errors.WithStack(err)
|
||||
}
|
||||
logger.Infof("DataDownload %s/%s is created successfully.",
|
||||
@@ -342,7 +342,7 @@ func (p *pvcRestoreItemAction) Progress(
|
||||
p.crClient,
|
||||
)
|
||||
if err != nil {
|
||||
logger.Errorf("fail to get DataDownload: %s", err.Error())
|
||||
logger.Errorf("Failed to get DataDownload: %s", err.Error())
|
||||
return progress, err
|
||||
}
|
||||
if dataDownload.Status.Phase == velerov2alpha1.DataDownloadPhaseNew ||
|
||||
@@ -395,13 +395,13 @@ func (p *pvcRestoreItemAction) Cancel(
|
||||
p.crClient,
|
||||
)
|
||||
if err != nil {
|
||||
logger.Errorf("fail to get DataDownload: %s", err.Error())
|
||||
logger.Errorf("Failed to get DataDownload: %s", err.Error())
|
||||
return err
|
||||
}
|
||||
|
||||
err = cancelDataDownload(context.Background(), p.crClient, dataDownload)
|
||||
if err != nil {
|
||||
logger.Errorf("fail to cancel DataDownload %s: %s", dataDownload.Name, err.Error())
|
||||
logger.Errorf("Failed to cancel DataDownload %s: %s", dataDownload.Name, err.Error())
|
||||
}
|
||||
return err
|
||||
}
|
||||
@@ -604,7 +604,7 @@ func restoreFromDataUploadResult(
|
||||
)
|
||||
err := crClient.Create(ctx, dataDownload)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "fail to create DataDownload")
|
||||
return nil, errors.Wrapf(err, "failed to create DataDownload")
|
||||
}
|
||||
|
||||
return dataDownload, nil
|
||||
@@ -657,8 +657,8 @@ func (p *pvcRestoreItemAction) deleteExistingPVC(ctx context.Context, logger *lo
|
||||
var err error
|
||||
logger.Info("ExistingVolumeDataPolicy is in-place restore. Deleting the existing PVC but keep the PV...")
|
||||
pv := &corev1api.PersistentVolume{}
|
||||
if err = p.crClient.Get(context.Background(), crclient.ObjectKey{Name: existingPVC.Spec.VolumeName}, pv); err != nil {
|
||||
return nil, errors.Errorf("Fail to get PV %s: %s", existingPVC.Spec.VolumeName, err.Error())
|
||||
if err = p.crClient.Get(ctx, crclient.ObjectKey{Name: existingPVC.Spec.VolumeName}, pv); err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to get PV %s", existingPVC.Spec.VolumeName)
|
||||
}
|
||||
|
||||
// set reclaim policy to retain
|
||||
|
||||
@@ -450,7 +450,7 @@ func TestExecute(t *testing.T) {
|
||||
restore: builder.ForRestore("velero", "testRestore").Backup("testBackup").Result(),
|
||||
pvc: builder.ForPersistentVolumeClaim("velero", "testPVC").ObjectMeta(builder.WithAnnotations(velerov1api.VolumeSnapshotLabel, "vsName", velerov1api.VolumeSnapshotRestoreSize, "10Gi", velerov1api.DataUploadNameAnnotation, "velero/")).Result(),
|
||||
expectedPVC: builder.ForPersistentVolumeClaim("velero", "testPVC").Result(),
|
||||
expectedErr: "fail get DataUploadResult for restore: testRestore: no DataUpload result cm found with labels velero.io/pvc-namespace-name=velero.testPVC,velero.io/restore-uid=,velero.io/resource-usage=DataUpload",
|
||||
expectedErr: "failed to get DataUploadResult for restore: testRestore: no DataUpload result cm found with labels velero.io/pvc-namespace-name=velero.testPVC,velero.io/restore-uid=,velero.io/resource-usage=DataUpload",
|
||||
},
|
||||
{
|
||||
name: "Restore from DataUploadResult",
|
||||
@@ -904,3 +904,22 @@ func TestNewPvcRestoreItemAction(t *testing.T) {
|
||||
_, err1 := plugin1(logger)
|
||||
require.NoError(t, err1)
|
||||
}
|
||||
|
||||
func TestDeleteExistingPVCFailure(t *testing.T) {
|
||||
pvcRIA := pvcRestoreItemAction{
|
||||
log: logrus.New(),
|
||||
crClient: velerotest.NewFakeControllerRuntimeClient(t),
|
||||
kubeClient: fake.NewSimpleClientset(),
|
||||
}
|
||||
existingPVC := builder.ForPersistentVolumeClaim("ns-1", "pvc-1").
|
||||
VolumeName("non-existent-pv").
|
||||
Phase(corev1api.ClaimBound).Result()
|
||||
targetPVC := builder.ForPersistentVolumeClaim("ns-1", "pvc-1").Result()
|
||||
|
||||
returnedPV, err := pvcRIA.deleteExistingPVC(
|
||||
t.Context(), logrus.New().WithField("test", "fail-to-get-pv"),
|
||||
targetPVC, existingPVC, time.Minute)
|
||||
require.Error(t, err)
|
||||
assert.Nil(t, returnedPV)
|
||||
assert.Contains(t, err.Error(), "failed to get PV non-existent-pv")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user