fix contest of nodeAgentCheck when restorer is called concurrently

Signed-off-by: Lyndon-Li <lyonghui@vmware.com>
This commit is contained in:
Lyndon-Li
2026-06-30 11:47:01 +08:00
parent 148f3273f2
commit d5089e621f
+6 -7
View File
@@ -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
}