Skip to content

Commit

Permalink
podman logs k8s-file: do not reassemble partial log lines
Browse files Browse the repository at this point in the history
The backend should not convert partial lines to full log lines. While
this works for most cases it cannot work when the last line is partial
since it will just be lost. The frontend logic can already display
partial lines correctly. The journald driver also works correctly since
it does not such conversion.

Fixes containers#14458

Signed-off-by: Paul Holzinger <[email protected]>
  • Loading branch information
Luap99 committed Jun 3, 2022
1 parent f7a5408 commit 2414586
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 8 deletions.
8 changes: 0 additions & 8 deletions libpod/container_log.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ func (c *Container) readFromLogFile(ctx context.Context, options *logs.LogOption
go func() {
defer options.WaitGroup.Done()

var partial string
for line := range t.Lines {
select {
case <-ctx.Done():
Expand All @@ -89,13 +88,6 @@ func (c *Container) readFromLogFile(ctx context.Context, options *logs.LogOption
logrus.Errorf("Getting new log line: %v", err)
continue
}
if nll.Partial() {
partial += nll.Msg
continue
} else if !nll.Partial() && len(partial) > 0 {
nll.Msg = partial + nll.Msg
partial = ""
}
nll.CID = c.ID()
nll.CName = c.Name()
nll.ColorID = colorID
Expand Down
21 changes: 21 additions & 0 deletions test/e2e/logs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"time"

. "github.com/containers/podman/v4/test/utils"
"github.com/containers/storage/pkg/stringid"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
. "github.com/onsi/gomega/gexec"
Expand Down Expand Up @@ -370,6 +371,26 @@ var _ = Describe("Podman logs", func() {
Expect(results.OutputToString()).To(Equal("stdout"))
Expect(results.ErrorToString()).To(Equal("stderr"))
})

It("podman logs partial log lines: "+log, func() {
skipIfJournaldInContainer()

cname := "log-test"
content := stringid.GenerateNonCryptoID()
// use printf to print no extra newline
logc := podmanTest.Podman([]string{"run", "--log-driver", log, "--name", cname, ALPINE, "printf", content})
logc.WaitWithDefaultTimeout()
Expect(logc).To(Exit(0))
// Important: do not use OutputToString(), this will remove the trailing newline from the output.
// However this test must make sure that there is no such extra newline.
Expect(string(logc.Out.Contents())).To(Equal(content))

logs := podmanTest.Podman([]string{"logs", cname})
logs.WaitWithDefaultTimeout()
Expect(logs).To(Exit(0))
// see comment above
Expect(string(logs.Out.Contents())).To(Equal(content))
})
}

It("using journald for container with container tag", func() {
Expand Down

0 comments on commit 2414586

Please sign in to comment.