in clusterloader2/pkg/measurement/common/pod_command.go [411:467]
func (p *podPeriodicCommandMeasurement) runAllCommandsInPod(pod *v1.Pod) *runAllCommandsResult {
wg := &sync.WaitGroup{}
commandResultCh := make(chan *runCommandResult, len(p.params.Commands))
getRunCommandFunc := func(c *podPeriodicCommandMeasurementCommandParams) func() {
return func() {
defer wg.Done()
if c := p.runCommandInPod(pod, c); c != nil {
if c.ExecError != "" {
p.statsLock.Lock()
p.stats.ExecErrors++
p.statsLock.Unlock()
klog.V(2).Infof(
"%s: error while running named command %s on pod %s/%s: %v",
podPeriodicCommandMeasurementName, c.Name, pod.Namespace, pod.Name, c.ExecError,
)
}
commandResultCh <- c
}
}
}
klog.V(4).Infof(
"%s: running commands on pod %s/%s", podPeriodicCommandMeasurementName, pod.Namespace, pod.Name,
)
for _, command := range p.params.Commands {
wg.Add(1)
go getRunCommandFunc(command)()
}
wg.Wait()
close(commandResultCh)
klog.V(4).Infof(
"%s: finished running commands on pod %s/%s", podPeriodicCommandMeasurementName, pod.Namespace, pod.Name,
)
results := &runAllCommandsResult{
Pod: pod.Name,
Namespace: pod.Namespace,
Container: p.params.Container,
Commands: []*runCommandResult{},
}
for c := range commandResultCh {
results.Commands = append(results.Commands, c)
}
klog.V(8).Infof("%s: %#v", podPeriodicCommandMeasurementName, results)
return results
}