From d5089e621f679c511ca4738fdd67a606465f3adc Mon Sep 17 00:00:00 2001 From: Lyndon-Li Date: Tue, 30 Jun 2026 11:47:01 +0800 Subject: [PATCH] fix contest of nodeAgentCheck when restorer is called concurrently Signed-off-by: Lyndon-Li --- pkg/podvolume/restorer.go | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/pkg/podvolume/restorer.go b/pkg/podvolume/restorer.go index bac22298e..cd6533ac5 100644 --- a/pkg/podvolume/restorer.go +++ b/pkg/podvolume/restorer.go @@ -63,10 +63,9 @@ type restorer struct { kubeClient kubernetes.Interface crClient ctrlclient.Client - resultsLock sync.Mutex - results map[string]chan *velerov1api.PodVolumeRestore - nodeAgentCheck chan error - log logrus.FieldLogger + resultsLock sync.Mutex + results map[string]chan *velerov1api.PodVolumeRestore + log logrus.FieldLogger } func newRestorer( @@ -153,7 +152,7 @@ func (r *restorer) RestorePodVolumes(data RestoreData, tracker *volume.RestoreVo r.results[resultsKey(data.Pod.Namespace, data.Pod.Name)] = resultsChan r.resultsLock.Unlock() - r.nodeAgentCheck = make(chan error) + nodeAgentCheck := make(chan error) var ( errs []error @@ -217,7 +216,7 @@ func (r *restorer) RestorePodVolumes(data RestoreData, tracker *volume.RestoreVo err = nodeagent.IsRunningInNode(checkCtx, data.Restore.Namespace, nodeName, r.crClient) if err != nil { r.log.WithField("node", nodeName).WithError(err).Error("node-agent pod is not running in node, abort the restore") - r.nodeAgentCheck <- errors.Wrapf(err, "node-agent pod is not running in node %s", nodeName) + nodeAgentCheck <- errors.Wrapf(err, "node-agent pod is not running in node %s", nodeName) } } }() @@ -235,7 +234,7 @@ ForEachVolume: errs = append(errs, errors.Errorf("pod volume restore canceled: %s", res.Status.Message)) } tracker.TrackPodVolume(res) - case err := <-r.nodeAgentCheck: + case err := <-nodeAgentCheck: errs = append(errs, err) break ForEachVolume }