summaryrefslogtreecommitdiff
path: root/cmd/podman/stop.go
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2018-10-11 10:55:18 -0700
committerGitHub <noreply@github.com>2018-10-11 10:55:18 -0700
commit83327e6973c118e9c36a9393496981894f8908a0 (patch)
tree2b2426eea83d662ba514c2235b92b1884b13bca2 /cmd/podman/stop.go
parent6983e00a2808b29481d1cb460aab2eea1db6ef73 (diff)
parent9be18c2eaf0fbd9f868ecab54fd5029881e132f9 (diff)
downloadpodman-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.go27
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
}