summaryrefslogtreecommitdiff
path: root/pkg/api/handlers/libpod/pods.go
diff options
context:
space:
mode:
authorMatthew Heon <mheon@redhat.com>2020-08-17 11:04:26 -0400
committerMatthew Heon <mheon@redhat.com>2020-08-17 11:04:26 -0400
commitc4b2078508a45843034a86916b37a52d3e34d20d (patch)
tree3404853e70e2243d8b4ecdb7080ddbcd52aafa97 /pkg/api/handlers/libpod/pods.go
parenta0719398931d59a422835b7e4cc7b6e28c18d031 (diff)
downloadpodman-c4b2078508a45843034a86916b37a52d3e34d20d.tar.gz
podman-c4b2078508a45843034a86916b37a52d3e34d20d.tar.bz2
podman-c4b2078508a45843034a86916b37a52d3e34d20d.zip
Clean up pods before returning from Pod Stop API call
This should help alleviate races where the pod is not fully cleaned up before subsequent API calls happen. Signed-off-by: Matthew Heon <mheon@redhat.com>
Diffstat (limited to 'pkg/api/handlers/libpod/pods.go')
-rw-r--r--pkg/api/handlers/libpod/pods.go9
1 files changed, 8 insertions, 1 deletions
diff --git a/pkg/api/handlers/libpod/pods.go b/pkg/api/handlers/libpod/pods.go
index 10e0d4ce9..6e704fe65 100644
--- a/pkg/api/handlers/libpod/pods.go
+++ b/pkg/api/handlers/libpod/pods.go
@@ -123,10 +123,17 @@ func PodStop(w http.ResponseWriter, r *http.Request) {
} else {
responses, stopError = pod.Stop(r.Context(), false)
}
- if stopError != nil {
+ if stopError != nil && errors.Cause(stopError) != define.ErrPodPartialFail {
utils.Error(w, "Something went wrong", http.StatusInternalServerError, err)
return
}
+ // Try to clean up the pod - but only warn on failure, it's nonfatal.
+ if cleanupCtrs, cleanupErr := pod.Cleanup(r.Context()); cleanupErr != nil {
+ logrus.Errorf("Error cleaning up pod %s: %v", pod.ID(), cleanupErr)
+ for id, err := range cleanupCtrs {
+ logrus.Errorf("Error cleaning up pod %s container %s: %v", pod.ID(), id, err)
+ }
+ }
var errs []error //nolint
for _, err := range responses {
errs = append(errs, err)