From ec7fe1081609264d8df846067ea60dec3538681c Mon Sep 17 00:00:00 2001 From: Lyndon-Li Date: Wed, 29 Oct 2025 14:17:54 +0800 Subject: [PATCH] issue 9365: prevent multiple update of PVR Signed-off-by: Lyndon-Li --- changelogs/unreleased/9376-Lyndon-Li | 1 + pkg/podvolume/restorer.go | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 changelogs/unreleased/9376-Lyndon-Li diff --git a/changelogs/unreleased/9376-Lyndon-Li b/changelogs/unreleased/9376-Lyndon-Li new file mode 100644 index 000000000..b60f84894 --- /dev/null +++ b/changelogs/unreleased/9376-Lyndon-Li @@ -0,0 +1 @@ +Fix issue #9365, prevent fake completion notification due to multiple update of single PVR \ No newline at end of file diff --git a/pkg/podvolume/restorer.go b/pkg/podvolume/restorer.go index e2ca579de..bc5abd5f2 100644 --- a/pkg/podvolume/restorer.go +++ b/pkg/podvolume/restorer.go @@ -92,12 +92,18 @@ func newRestorer( _, _ = pvrInformer.AddEventHandler( cache.ResourceEventHandlerFuncs{ - UpdateFunc: func(_, obj any) { - pvr := obj.(*velerov1api.PodVolumeRestore) + UpdateFunc: func(oldObj, newObj any) { + pvr := newObj.(*velerov1api.PodVolumeRestore) + pvrOld := oldObj.(*velerov1api.PodVolumeRestore) + if pvr.GetLabels()[velerov1api.RestoreUIDLabel] != string(restore.UID) { return } + if pvr.Status.Phase == pvrOld.Status.Phase { + return + } + if pvr.Status.Phase == velerov1api.PodVolumeRestorePhaseCompleted || pvr.Status.Phase == velerov1api.PodVolumeRestorePhaseFailed || pvr.Status.Phase == velerov1api.PodVolumeRestorePhaseCanceled { r.resultsLock.Lock() defer r.resultsLock.Unlock()