Merge pull request #9672 from Lyndon-Li/release-1.18

[1.18] Issue 9659: fix crash on cancel without loading data path #9663
This commit is contained in:
lyndon-li
2026-04-03 15:27:15 +08:00
committed by GitHub
9 changed files with 13 additions and 8 deletions

View File

@@ -0,0 +1 @@
Fix issue #9659, in the case that PVB/PVR/DU/DD is cancelled before the data path is really started, call EndEvent to prevent data mover pod from crashing because of delay event distribution

View File

@@ -310,6 +310,7 @@ func (r *BackupMicroService) cancelDataUpload(du *velerov2alpha1api.DataUpload)
fsBackup := r.dataPathMgr.GetAsyncBR(du.Name)
if fsBackup == nil {
r.OnDataUploadCancelled(r.ctx, du.GetNamespace(), du.GetName())
r.eventRecorder.EndingEvent(du, false, datapath.EventReasonStopped, "Data path for %s exited without start", du.Name)
} else {
fsBackup.Cancel()
}

View File

@@ -259,8 +259,8 @@ func TestCancelDataUpload(t *testing.T) {
}{
{
name: "no fs backup",
expectedEventReason: datapath.EventReasonCancelled,
expectedEventMsg: "Data path for data upload fake-data-upload canceled",
expectedEventReason: datapath.EventReasonStopped,
expectedEventMsg: "Data path for fake-data-upload exited without start",
expectedErr: datapath.ErrCancelled,
},
}

View File

@@ -288,6 +288,7 @@ func (r *RestoreMicroService) cancelDataDownload(dd *velerov2alpha1api.DataDownl
fsBackup := r.dataPathMgr.GetAsyncBR(dd.Name)
if fsBackup == nil {
r.OnDataDownloadCancelled(r.ctx, dd.GetNamespace(), dd.GetName())
r.eventRecorder.EndingEvent(dd, false, datapath.EventReasonStopped, "Data path for %s exited without start", dd.Name)
} else {
fsBackup.Cancel()
}

View File

@@ -203,8 +203,8 @@ func TestCancelDataDownload(t *testing.T) {
}{
{
name: "no fs restore",
expectedEventReason: datapath.EventReasonCancelled,
expectedEventMsg: "Data path for data download fake-data-download canceled",
expectedEventReason: datapath.EventReasonStopped,
expectedEventMsg: "Data path for fake-data-download exited without start",
expectedErr: datapath.ErrCancelled,
},
}

View File

@@ -307,6 +307,7 @@ func (r *BackupMicroService) cancelPodVolumeBackup(pvb *velerov1api.PodVolumeBac
fsBackup := r.dataPathMgr.GetAsyncBR(pvb.Name)
if fsBackup == nil {
r.OnDataPathCancelled(r.ctx, pvb.GetNamespace(), pvb.GetName())
r.eventRecorder.EndingEvent(pvb, false, datapath.EventReasonStopped, "Data path for %s exited without start", pvb.Name)
} else {
fsBackup.Cancel()
}

View File

@@ -258,8 +258,8 @@ func TestCancelPodVolumeBackup(t *testing.T) {
}{
{
name: "no fs backup",
expectedEventReason: datapath.EventReasonCancelled,
expectedEventMsg: "Data path for PVB fake-pvb canceled",
expectedEventReason: datapath.EventReasonStopped,
expectedEventMsg: "Data path for fake-pvb exited without start",
expectedErr: datapath.ErrCancelled,
},
}

View File

@@ -302,6 +302,7 @@ func (r *RestoreMicroService) cancelPodVolumeRestore(pvr *velerov1api.PodVolumeR
fsBackup := r.dataPathMgr.GetAsyncBR(pvr.Name)
if fsBackup == nil {
r.OnPvrCancelled(r.ctx, pvr.GetNamespace(), pvr.GetName())
r.eventRecorder.EndingEvent(pvr, false, datapath.EventReasonStopped, "Data path for %s exited without start", pvr.Name)
} else {
fsBackup.Cancel()
}

View File

@@ -284,8 +284,8 @@ func TestCancelPodVolumeRestore(t *testing.T) {
}{
{
name: "no fs restore",
expectedEventReason: datapath.EventReasonCancelled,
expectedEventMsg: "Data path for PVR fake-pvr canceled",
expectedEventReason: datapath.EventReasonStopped,
expectedEventMsg: "Data path for fake-pvr exited without start",
expectedErr: datapath.ErrCancelled,
},
}