diff --git a/changelogs/unreleased/9375-Lyndon-Li b/changelogs/unreleased/9375-Lyndon-Li new file mode 100644 index 000000000..b60f84894 --- /dev/null +++ b/changelogs/unreleased/9375-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 1b15f9d53..47219ae99 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()