diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2018-10-11 10:55:18 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-11 10:55:18 -0700 |
commit | 83327e6973c118e9c36a9393496981894f8908a0 (patch) | |
tree | 2b2426eea83d662ba514c2235b92b1884b13bca2 /cmd/podman/stop.go | |
parent | 6983e00a2808b29481d1cb460aab2eea1db6ef73 (diff) | |
parent | 9be18c2eaf0fbd9f868ecab54fd5029881e132f9 (diff) | |
download | podman-83327e6973c118e9c36a9393496981894f8908a0.tar.gz podman-83327e6973c118e9c36a9393496981894f8908a0.tar.bz2 podman-83327e6973c118e9c36a9393496981894f8908a0.zip |
Merge pull request #1614 from baude/parastop
Stop containers in parallel fashion
Diffstat (limited to 'cmd/podman/stop.go')
-rw-r--r-- | cmd/podman/stop.go | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/cmd/podman/stop.go b/cmd/podman/stop.go index d2fa87730..664d91ea3 100644 --- a/cmd/podman/stop.go +++ b/cmd/podman/stop.go @@ -3,6 +3,7 @@ package main import ( "fmt" "os" + rt "runtime" "github.com/containers/libpod/cmd/podman/libpodruntime" "github.com/containers/libpod/libpod" @@ -98,21 +99,33 @@ func stopCmd(c *cli.Context) error { } } + var stopFuncs []workerInput for _, ctr := range containers { + con := ctr var stopTimeout uint if c.IsSet("timeout") { stopTimeout = c.Uint("timeout") } else { stopTimeout = ctr.StopTimeout() } - if err := ctr.StopWithTimeout(stopTimeout); err != nil && err != libpod.ErrCtrStopped { - if lastError != nil { - fmt.Fprintln(os.Stderr, lastError) - } - lastError = errors.Wrapf(err, "failed to stop container %v", ctr.ID()) - } else { - fmt.Println(ctr.ID()) + f := func() error { + return con.StopWithTimeout(stopTimeout) + } + stopFuncs = append(stopFuncs, workerInput{ + containerID: con.ID(), + parallelFunc: f, + }) + } + + stopErrors := parallelExecuteWorkerPool(rt.NumCPU()*3, stopFuncs) + + for cid, result := range stopErrors { + if result != nil && result != libpod.ErrCtrStopped { + fmt.Println(result.Error()) + lastError = result + continue } + fmt.Println(cid) } return lastError } |