From 2ab2c832180dacb2e66d38541beae0957416eb96 Mon Sep 17 00:00:00 2001 From: Antonio Romito Date: Mon, 9 Sep 2024 17:30:38 +0200 Subject: [PATCH] Improve handling of "stopping" container removal in remove_container() - Added handling for containers in a stopping state by checking the state and force-removing if necessary. - Improved log messages to provide clearer information when force removal is needed. Related: https://issues.redhat.com/browse/RHEL-58008 --- heartbeat/podman | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/heartbeat/podman b/heartbeat/podman index 53867bff20..643ec4d894 100755 --- a/heartbeat/podman +++ b/heartbeat/podman @@ -254,6 +254,13 @@ remove_container() ocf_run podman rm -v $CONTAINER rc=$? if [ $rc -ne 0 ]; then + if [ $rc -eq 2 ]; then + if podman inspect --format '{{.State.Status}}' $CONTAINER | grep -wq "stopping"; then + ocf_log err "Inactive container ${CONTAINER} is stuck in 'stopping' state. Force-remove it." + ocf_run podman rm -f $CONTAINER + rc=$? + fi + fi # due to a podman bug (rhbz#1841485), sometimes a stopped # container can still be associated with Exec sessions, in # which case the "podman rm" has to be forced @@ -517,8 +524,8 @@ podman_stop() # but the associated container exit code is -1. If that's the case, # assume there's no failure and continue with the rm as usual. if [ $rc -eq 125 ] && \ - podman inspect --format '{{.State.Status}}:{{.State.ExitCode}}' $CONTAINER | grep -wq "stopped:-1"; then - ocf_log warn "Container ${CONTAINER} had an unexpected stop outcome. Trying to remove it anyway." + podman inspect --format '{{.State.Status}}:{{.State.ExitCode}}' $CONTAINER | grep -Eq '^(exited|stopped):-1$'; then + ocf_log err "Container ${CONTAINER} had an unexpected stop outcome. Trying to remove it anyway." else ocf_exit_reason "Failed to stop container, ${CONTAINER}, based on image, ${OCF_RESKEY_image}." return $OCF_ERR_GENERIC