diff options
Diffstat (limited to 'cmd/podman/shared/parallel.go')
-rw-r--r-- | cmd/podman/shared/parallel.go | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/cmd/podman/shared/parallel.go b/cmd/podman/shared/parallel.go deleted file mode 100644 index eb1d40073..000000000 --- a/cmd/podman/shared/parallel.go +++ /dev/null @@ -1,112 +0,0 @@ -package shared - -import ( - "runtime" - "sync" -) - -type pFunc func() error - -// ParallelWorkerInput is a struct used to pass in a slice of parallel funcs to be -// performed on a container ID -type ParallelWorkerInput struct { - ContainerID string - ParallelFunc pFunc -} - -type containerError struct { - ContainerID string - Err error -} - -// ParallelWorker is a "threaded" worker that takes jobs from the channel "queue" -func ParallelWorker(wg *sync.WaitGroup, jobs <-chan ParallelWorkerInput, results chan<- containerError) { - for j := range jobs { - err := j.ParallelFunc() - results <- containerError{ContainerID: j.ContainerID, Err: err} - wg.Done() - } -} - -// ParallelExecuteWorkerPool takes container jobs and performs them in parallel. The worker -// int determines how many workers/threads should be premade. -func ParallelExecuteWorkerPool(workers int, functions []ParallelWorkerInput) (map[string]error, int) { - var ( - wg sync.WaitGroup - errorCount int - ) - - resultChan := make(chan containerError, len(functions)) - results := make(map[string]error) - paraJobs := make(chan ParallelWorkerInput, len(functions)) - - // If we have more workers than functions, match up the number of workers and functions - if workers > len(functions) { - workers = len(functions) - } - - // Create the workers - for w := 1; w <= workers; w++ { - go ParallelWorker(&wg, paraJobs, resultChan) - } - - // Add jobs to the workers - for _, j := range functions { - j := j - wg.Add(1) - paraJobs <- j - } - - close(paraJobs) - wg.Wait() - - close(resultChan) - for ctrError := range resultChan { - results[ctrError.ContainerID] = ctrError.Err - if ctrError.Err != nil { - errorCount += 1 - } - } - - return results, errorCount -} - -// Parallelize provides the maximum number of parallel workers (int) as calculated by a basic -// heuristic. This can be overridden by the --max-workers primary switch to podman. -func Parallelize(job string) int { - numCpus := runtime.NumCPU() - switch job { - case "kill": - if numCpus <= 3 { - return numCpus * 3 - } - return numCpus * 4 - case "pause": - if numCpus <= 3 { - return numCpus * 3 - } - return numCpus * 4 - case "ps": - return 8 - case "restart": - return numCpus * 2 - case "rm": - if numCpus <= 3 { - return numCpus * 3 - } else { - return numCpus * 4 - } - case "stop": - if numCpus <= 2 { - return 4 - } else { - return numCpus * 3 - } - case "unpause": - if numCpus <= 3 { - return numCpus * 3 - } - return numCpus * 4 - } - return 3 -} |