Merge pull request #12285 from nalind/journal-follow-not-early

journald logs: keep reading until the journal's end
This commit is contained in:
OpenShift Merge Robot
2021-11-15 22:09:29 +01:00
committed by GitHub
2 changed files with 31 additions and 4 deletions

View File

@ -37,9 +37,11 @@ func (c *Container) initializeJournal(ctx context.Context) error {
m := make(map[string]string) m := make(map[string]string)
m["SYSLOG_IDENTIFIER"] = "podman" m["SYSLOG_IDENTIFIER"] = "podman"
m["PODMAN_ID"] = c.ID() m["PODMAN_ID"] = c.ID()
m["CONTAINER_ID_FULL"] = c.ID()
history := events.History history := events.History
m["PODMAN_EVENT"] = history.String() m["PODMAN_EVENT"] = history.String()
container := events.Container
m["PODMAN_TYPE"] = container.String()
m["PODMAN_TIME"] = time.Now().Format(time.RFC3339Nano)
return journal.Send("", journal.PriInfo, m) return journal.Send("", journal.PriInfo, m)
} }
@ -95,6 +97,7 @@ func (c *Container) readFromJournal(ctx context.Context, options *logs.LogOption
// exponential backoff. // exponential backoff.
var cursor string var cursor string
var cursorError error var cursorError error
var containerCouldBeLogging bool
for i := 1; i <= 3; i++ { for i := 1; i <= 3; i++ {
cursor, cursorError = journal.GetCursor() cursor, cursorError = journal.GetCursor()
hundreds := 1 hundreds := 1
@ -172,7 +175,7 @@ func (c *Container) readFromJournal(ctx context.Context, options *logs.LogOption
doTailFunc() doTailFunc()
} }
// Unless we follow, quit. // Unless we follow, quit.
if !options.Follow { if !options.Follow || !containerCouldBeLogging {
return return
} }
// Sleep until something's happening on the journal. // Sleep until something's happening on the journal.
@ -201,11 +204,14 @@ func (c *Container) readFromJournal(ctx context.Context, options *logs.LogOption
logrus.Errorf("Failed to translate event: %v", err) logrus.Errorf("Failed to translate event: %v", err)
return return
} }
if status == events.Exited { switch status {
case events.History, events.Init, events.Start, events.Restart:
containerCouldBeLogging = true
case events.Exited:
containerCouldBeLogging = false
if doTail { if doTail {
doTailFunc() doTailFunc()
} }
return
} }
continue continue
} }

View File

@ -89,6 +89,27 @@ ${cid[0]} d" "Sequential output from logs"
_log_test_multi journald _log_test_multi journald
} }
function _log_test_restarted() {
run_podman run --log-driver=$1 --name logtest $IMAGE sh -c 'start=0; if test -s log; then start=`tail -n 1 log`; fi; seq `expr $start + 1` `expr $start + 10` | tee -a log'
run_podman start -a logtest
logfile=$(mktemp -p ${PODMAN_TMPDIR} logfileXXXXXXXX)
$PODMAN $_PODMAN_TEST_OPTS logs -f logtest > $logfile
expected=$(mktemp -p ${PODMAN_TMPDIR} expectedXXXXXXXX)
seq 1 20 > $expected
diff -u ${expected} ${logfile}
}
@test "podman logs restarted - k8s-file" {
_log_test_restarted k8s-file
}
@test "podman logs restarted journald" {
# We can't use journald on RHEL as rootless: rhbz#1895105
skip_if_journald_unavailable
_log_test_restarted journald
}
@test "podman logs - journald log driver requires journald events backend" { @test "podman logs - journald log driver requires journald events backend" {
skip_if_remote "remote does not support --events-backend" skip_if_remote "remote does not support --events-backend"
# We can't use journald on RHEL as rootless: rhbz#1895105 # We can't use journald on RHEL as rootless: rhbz#1895105