mirror of
https://github.com/containers/podman.git
synced 2025-06-26 21:07:02 +08:00
Merge pull request #14215 from vrothberg/fix-notify
sdnotify: send MAINPID only once
This commit is contained in:
@ -36,7 +36,6 @@ import (
|
||||
"github.com/containers/podman/v4/utils"
|
||||
"github.com/containers/storage/pkg/homedir"
|
||||
pmount "github.com/containers/storage/pkg/mount"
|
||||
"github.com/coreos/go-systemd/v22/daemon"
|
||||
spec "github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/opencontainers/selinux/go-selinux/label"
|
||||
"github.com/pkg/errors"
|
||||
@ -1279,19 +1278,6 @@ func (r *ConmonOCIRuntime) createOCIContainer(ctr *Container, restoreOptions *Co
|
||||
// conmon not having a pid file is a valid state, so don't set it if we don't have it
|
||||
logrus.Infof("Got Conmon PID as %d", conmonPID)
|
||||
ctr.state.ConmonPID = conmonPID
|
||||
|
||||
// Send the MAINPID via sdnotify if needed.
|
||||
switch ctr.config.SdNotifyMode {
|
||||
case define.SdNotifyModeContainer, define.SdNotifyModeIgnore:
|
||||
// Nothing to do or conmon takes care of it already.
|
||||
|
||||
default:
|
||||
if sent, err := daemon.SdNotify(false, fmt.Sprintf("MAINPID=%d", conmonPID)); err != nil {
|
||||
logrus.Errorf("Notifying systemd of Conmon PID: %v", err)
|
||||
} else if sent {
|
||||
logrus.Debugf("Notify MAINPID sent successfully")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
runtimeRestoreDuration := func() int64 {
|
||||
|
@ -106,6 +106,9 @@ function _assert_mainpid_is_conmon() {
|
||||
cid="$output"
|
||||
wait_for_ready $cid
|
||||
|
||||
run_podman container inspect sdnotify_conmon_c --format "{{.State.ConmonPid}}"
|
||||
mainPID="$output"
|
||||
|
||||
run_podman logs sdnotify_conmon_c
|
||||
is "$output" "READY" "\$NOTIFY_SOCKET in container"
|
||||
|
||||
@ -114,12 +117,8 @@ function _assert_mainpid_is_conmon() {
|
||||
echo "socat log:"
|
||||
echo "$output"
|
||||
|
||||
# ARGH! 'READY=1' should always be the last output line. But sometimes,
|
||||
# for reasons unknown, we get an extra MAINPID=xxx after READY=1 (#8718).
|
||||
# Who knows if this is a systemd bug, or conmon, or what. I don't
|
||||
# even know where to begin asking. So, to eliminate the test flakes,
|
||||
# we look for READY=1 _anywhere_ in the output, not just the last line.
|
||||
is "$output" ".*READY=1.*" "sdnotify sent READY=1"
|
||||
is "$output" "MAINPID=$mainPID
|
||||
READY=1" "sdnotify sent MAINPID and READY"
|
||||
|
||||
_assert_mainpid_is_conmon "$output"
|
||||
|
||||
|
Reference in New Issue
Block a user