podman/libpod
Matthew Heon 9d964ffb9f Ensure Conmon is alive before waiting for exit file
This came out of a conversation with Valentin about
systemd-managed Podman. He discovered that unit files did not
properly handle cases where Conmon was dead - the ExecStopPost
`podman rm --force` line was not actually removing the container,
but interestingly, adding a `podman cleanup --rm` line would
remove it. Both of these commands do the same thing (minus the
`podman cleanup --rm` command not force-removing running
containers).

Without a running Conmon instance, the container process is still
running (assuming you killed Conmon with SIGKILL and it had no
chance to kill the container it managed), but you can still kill
the container itself with `podman stop` - Conmon is not involved,
only the OCI Runtime. (`podman rm --force` and `podman stop` use
the same code to kill the container). The problem comes when we
want to get the container's exit code - we expect Conmon to make
us an exit file, which it's obviously not going to do, being
dead. The first `podman rm` would fail because of this, but
importantly, it would (after failing to retrieve the exit code
correctly) set container status to Exited, so that the second
`podman cleanup` process would succeed.

To make sure the first `podman rm --force` succeeds, we need to
catch the case where Conmon is already dead, and instead of
waiting for an exit file that will never come, immediately set
the Stopped state and remove an error that can be caught and
handled.

Signed-off-by: Matthew Heon <mheon@redhat.com>
2020-06-08 13:48:29 -04:00
..
common Set blob cache directory based on GraphDriver 2019-03-29 08:27:33 -04:00
define Ensure Conmon is alive before waiting for exit file 2020-06-08 13:48:29 -04:00
driver removMergeDir from inspect result if not mounted 2019-08-13 15:13:20 -04:00
events auto updates 2020-03-17 17:18:56 +01:00
filters podmanv2 ps 2020-04-06 12:12:59 -05:00
image compat handlers: add X-Registry-Auth header support 2020-05-29 15:39:37 +02:00
layers Initial checkin from CRI-O repo 2017-11-01 11:24:59 -04:00
linkmode Add podman static build 2020-05-11 13:11:07 +02:00
lock shm_lock_test: add nil check 2020-05-11 13:20:32 +02:00
logs Follow up changes from #5244 2020-03-12 10:06:51 +05:30
boltdb_state.go Update vendor of boltdb and containers/image 2020-03-29 06:16:27 -04:00
boltdb_state_internal.go Fix two coverity issues (unchecked null return) 2020-05-14 11:17:34 -04:00
boltdb_state_linux.go Error on netns not exist only when ctr is running 2019-11-19 15:38:03 -05:00
boltdb_state_unsupported.go podman-remote inspect 2019-01-18 15:43:11 -06:00
common_test.go Add support for containers.conf 2020-03-27 14:36:03 -04:00
container.go add {generate,play} kube 2020-05-06 17:08:22 +02:00
container_api.go WIP V2 attach bindings and test 2020-05-13 11:49:17 -07:00
container_commit.go Deprecate & remove IsCtrSpecific in favor of IsAnon 2020-01-29 14:04:51 -05:00
container_exec.go Enable detached exec for remote 2020-06-02 15:30:42 -04:00
container_graph.go make lint: enable gocritic 2020-01-13 14:27:02 +01:00
container_graph_test.go generate systemd: support pods and geneartig files 2019-08-21 17:28:30 +02:00
container_inspect.go Ensure podman inspect output for NetworkMode is right 2020-05-08 18:00:42 -04:00
container_internal.go Ensure Conmon is alive before waiting for exit file 2020-06-08 13:48:29 -04:00
container_internal_linux.go check --user range for rootless containers 2020-06-02 11:28:58 -04:00
container_internal_test.go vendor: update seccomp/containers-golang to v0.4.1 2020-05-21 16:16:09 +02:00
container_internal_unsupported.go userns: support --userns=auto 2020-04-06 16:32:36 +02:00
container_linux.go Do not fetch pod and ctr State on retrieval in Bolt 2018-07-31 14:19:50 +00:00
container_log.go podman v2 remove bloat v2 2020-04-16 12:04:46 -05:00
container_log_linux.go update systemd & dbus dependencies 2020-03-10 18:34:55 +01:00
container_log_unsupported.go libpod removal from main (phase 2) 2019-06-27 07:56:24 -05:00
container_top_linux.go v2podman attach and exec 2020-04-05 15:54:51 -05:00
container_top_unsupported.go Add a stub for libpod.Container.Top 2020-03-21 00:21:59 +01:00
container_unsupported.go Do not fetch pod and ctr State on retrieval in Bolt 2018-07-31 14:19:50 +00:00
container_validate.go Add validate() for containers 2020-03-02 10:58:11 -05:00
diff.go Correctly export the root file-system changes 2019-12-09 13:29:36 +01:00
events.go Add support for containers.conf 2020-03-27 14:36:03 -04:00
healthcheck.go Fix remote integration for healthchecks 2020-05-20 14:43:01 -05:00
healthcheck_linux.go pkg/systemd: add dbus support 2020-03-17 11:29:37 +01:00
healthcheck_unsupported.go remove libpod from main 2019-06-25 13:51:24 -05:00
in_memory_state.go Add support for containers.conf 2020-03-27 14:36:03 -04:00
info.go Add podman static build 2020-05-11 13:11:07 +02:00
kube.go add {generate,play} kube 2020-05-06 17:08:22 +02:00
mounts_linux.go set root propagation based on volume properties 2018-11-26 13:55:02 +01:00
networking_linux.go Properly follow linked namespace container for stats 2020-06-02 17:58:52 -04:00
networking_unsupported.go podmanv2 container inspect 2020-03-26 15:54:26 -05:00
oci.go Ensure Conmon is alive before waiting for exit file 2020-06-08 13:48:29 -04:00
oci_attach_linux.go v2podman attach and exec 2020-04-05 15:54:51 -05:00
oci_attach_linux_cgo.go Implement conmon exec 2019-07-22 15:57:23 -04:00
oci_attach_linux_nocgo.go Implement conmon exec 2019-07-22 15:57:23 -04:00
oci_attach_unsupported.go v2podman attach and exec 2020-04-05 15:54:51 -05:00
oci_conmon_exec_linux.go Enable detached exec for remote 2020-06-02 15:30:42 -04:00
oci_conmon_linux.go Ensure Conmon is alive before waiting for exit file 2020-06-08 13:48:29 -04:00
oci_conmon_unsupported.go Add support for selecting kvm and systemd labels 2020-04-15 16:52:16 -04:00
oci_missing.go Ensure Conmon is alive before waiting for exit file 2020-06-08 13:48:29 -04:00
oci_util.go libpod: fix case for executable file not found errors 2019-12-02 18:03:33 +01:00
options.go compat handlers: add X-Registry-Auth header support 2020-05-29 15:39:37 +02:00
pod.go Ensure that containers in pods properly set hostname 2020-06-04 16:32:10 -04:00
pod_api.go Ensure that containers in pods properly set hostname 2020-06-04 16:32:10 -04:00
pod_internal.go Add support for containers.conf 2020-03-27 14:36:03 -04:00
pod_status.go APIv2 review corrections #3 2020-01-25 15:09:09 -06:00
pod_top_linux.go podmanv2: implement pod top 2020-03-28 17:32:22 +01:00
pod_top_unsupported.go remove libpod from main 2019-06-25 13:51:24 -05:00
reset.go Add support for containers.conf 2020-03-27 14:36:03 -04:00
runtime.go compat handlers: add X-Registry-Auth header support 2020-05-29 15:39:37 +02:00
runtime_cstorage.go make lint: enable gocritic 2020-01-13 14:27:02 +01:00
runtime_ctr.go Ensure Conmon is alive before waiting for exit file 2020-06-08 13:48:29 -04:00
runtime_img.go image removal: refactor part 2 2020-05-04 16:01:45 +02:00
runtime_img_test.go switch projectatomic to containers 2018-08-16 17:12:36 +00:00
runtime_migrate.go Migrate can move containers to a new runtime 2019-10-10 10:25:06 -04:00
runtime_migrate_unsupported.go Add podman system reset command 2019-11-29 05:34:52 -05:00
runtime_pod.go Add pod prune for api v2. 2020-04-17 17:30:58 -04:00
runtime_pod_infra_linux.go Add support for containers.conf 2020-03-27 14:36:03 -04:00
runtime_pod_linux.go Fix errors found in coverity scan 2020-05-01 13:26:50 -04:00
runtime_pod_unsupported.go remove libpod from main 2019-06-25 13:51:24 -05:00
runtime_renumber.go Re-add locks to volumes. 2019-08-28 11:35:00 -04:00
runtime_volume.go podmanv2 pod create using podspecgen 2020-03-27 09:04:10 -05:00
runtime_volume_linux.go Add support for containers.conf 2020-03-27 14:36:03 -04:00
runtime_volume_unsupported.go remove libpod from main 2019-06-25 13:51:24 -05:00
state.go Add support for containers.conf 2020-03-27 14:36:03 -04:00
state_test.go Add support for containers.conf 2020-03-27 14:36:03 -04:00
stats.go v2 podman stats 2020-05-05 08:46:51 -05:00
stats_unsupported.go v2 podman stats 2020-05-05 08:46:51 -05:00
storage.go userns: support --userns=auto 2020-04-06 16:32:36 +02:00
util.go WIP V2 attach bindings and test 2020-05-13 11:49:17 -07:00
util_linux.go Fix SELinux labels of volumes 2020-02-13 21:42:57 -05:00
util_test.go v2 podman stats 2020-05-05 08:46:51 -05:00
util_unsupported.go Fix the libpod.LabelVolumePath stub 2020-03-21 00:21:59 +01:00
volume.go v2 system subcommand 2020-05-05 12:24:33 -05:00
volume_inspect.go Deprecate & remove IsCtrSpecific in favor of IsAnon 2020-01-29 14:04:51 -05:00
volume_internal.go Add support for containers.conf 2020-03-27 14:36:03 -04:00
volume_internal_linux.go make lint: enable gocritic 2020-01-13 14:27:02 +01:00
volume_internal_unsupported.go Add ability for volumes with options to mount/umount 2019-09-05 17:12:27 -04:00