From 2c3eb7ddae3894844658732eb4889c514461c350 Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Thu, 11 Feb 2021 11:06:32 +0100 Subject: [PATCH] MuxWriter: Handle error for already closed file (#31119) (#31120) Signed-off-by: Arve Knudsen (cherry picked from commit 7394c98d38603db94a8b6a8c7d758f9ca26f11ba) Co-authored-by: Arve Knudsen --- pkg/infra/log/file.go | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/pkg/infra/log/file.go b/pkg/infra/log/file.go index 745e737c961..761d96752b2 100644 --- a/pkg/infra/log/file.go +++ b/pkg/infra/log/file.go @@ -57,8 +57,8 @@ func (l *MuxWriter) Write(b []byte) (int, error) { // set os.File in writer. func (l *MuxWriter) setFD(fd *os.File) error { if l.fd != nil { - if err := l.fd.Close(); err != nil { - return err + if err := l.fd.Close(); err != nil && !errors.Is(err, os.ErrClosed) { + return fmt.Errorf("closing old file in MuxWriter failed: %w", err) } } @@ -143,16 +143,18 @@ func (w *FileLogWriter) lineCounter() (int, error) { count := 0 for { c, err := r.Read(buf) - count += bytes.Count(buf[:c], []byte{'\n'}) - switch { - case errors.Is(err, io.EOF): - if err := r.Close(); err != nil { - return count, err + if err != nil { + if errors.Is(err, io.EOF) { + if err := r.Close(); err != nil && !errors.Is(err, os.ErrClosed) { + return 0, fmt.Errorf("closing %q failed: %w", w.Filename, err) + } + return count, nil } - return count, nil - case err != nil: - return count, err + + return 0, err } + + count += bytes.Count(buf[:c], []byte{'\n'}) } }