diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2019-10-07 02:54:13 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-07 02:54:13 -0700 |
commit | 589261f275b485d78a6ac1bd7b95578257fc020f (patch) | |
tree | 796be4128050ff418334c4e2a049ecb06cf8f1a2 | |
parent | 2c2782a2179aee6c76d90e864708e2e5ceb09349 (diff) | |
parent | bb803b8f7a475a3128555899d7ae0600dc0a055e (diff) | |
download | podman-589261f275b485d78a6ac1bd7b95578257fc020f.tar.gz podman-589261f275b485d78a6ac1bd7b95578257fc020f.tar.bz2 podman-589261f275b485d78a6ac1bd7b95578257fc020f.zip |
Merge pull request #4196 from mheon/normal_remove_on_evict
When evicting containers, perform a normal remove first
-rw-r--r-- | libpod/runtime_ctr.go | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/libpod/runtime_ctr.go b/libpod/runtime_ctr.go index 1a2987244..78176a400 100644 --- a/libpod/runtime_ctr.go +++ b/libpod/runtime_ctr.go @@ -576,11 +576,33 @@ func (r *Runtime) evictContainer(ctx context.Context, idOrName string, removeVol if !r.valid { return "", define.ErrRuntimeStopped } + id, err := r.state.LookupContainerID(idOrName) if err != nil { return "", errors.Wrapf(err, "Failed to find container %q in state", idOrName) } + // Begin by trying a normal removal. Valid containers will be removed normally. + tmpCtr, err := r.state.Container(id) + if err == nil { + logrus.Infof("Container %s successfully retrieved from state, attempting normal removal", id) + // Assume force = true for the evict case + err = r.removeContainer(ctx, tmpCtr, true, removeVolume, false) + if !tmpCtr.valid { + // If the container is marked invalid, remove succeeded + // in kicking it out of the state - no need to continue. + return id, err + } + + if err == nil { + // Something has gone seriously wrong - no error but + // container was not removed. + logrus.Errorf("Container %s not removed with no error", id) + } else { + logrus.Warnf("Failed to removal container %s normally, proceeding with evict: %v", id, err) + } + } + // Error out if the container does not exist in libpod exists, err := r.state.HasContainer(id) if err != nil { |