diff --git a/changelogs/unreleased/10251-Lyndon-Li b/changelogs/unreleased/10251-Lyndon-Li new file mode 100644 index 000000000..6aead3879 --- /dev/null +++ b/changelogs/unreleased/10251-Lyndon-Li @@ -0,0 +1 @@ +Fix wrong node-agent check result when PVR restorer run concurrently \ No newline at end of file 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 }