func()

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
}