From 2ed7206896a87e502214f863ddd88e1ed95b671e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Cm=C3=BCt=20=C3=96zalp?= <54961032+uozalp@users.noreply.github.com> Date: Sat, 27 Sep 2025 16:51:43 +0200 Subject: [PATCH] fix: improve log retry logic (#3580) * fix: improve log retry logic * fix: streamline log retry logic and improve error handling --- internal/dao/pod.go | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/internal/dao/pod.go b/internal/dao/pod.go index 20ece728..806cae3b 100644 --- a/internal/dao/pod.go +++ b/internal/dao/pod.go @@ -372,20 +372,19 @@ func tailLogs(ctx context.Context, logger Logger, opts *LogOptions) LogChan { delay := logBackoffInitial for range logRetryCount { - // Check if we should stop retrying based on pod status - if pod, ok := logger.(*Pod); ok && pod.shouldStopRetrying(opts.Path) { - slog.Debug("Stopping log retry - pod is terminating or deleted", - slogs.Container, opts.Info(), - ) - return - } - req, err := logger.Logs(opts.Path, podOpts) if err != nil { slog.Error("Log request failed", slogs.Container, opts.Info(), slogs.Error, err, ) + // Check if we should stop retrying based on pod status + if pod, ok := logger.(*Pod); ok && pod.shouldStopRetrying(opts.Path) { + slog.Debug("Stopping log retry - pod is terminating or deleted", + slogs.Container, opts.Info(), + ) + return + } select { case <-ctx.Done(): return @@ -403,6 +402,13 @@ func tailLogs(ctx context.Context, logger Logger, opts *LogOptions) LogChan { slogs.Error, e, slogs.Container, opts.Info(), ) + // Check if we should stop retrying based on pod status + if pod, ok := logger.(*Pod); ok && pod.shouldStopRetrying(opts.Path) { + slog.Debug("Stopping log retry - pod is terminating or deleted", + slogs.Container, opts.Info(), + ) + return + } select { case <-ctx.Done(): return @@ -466,7 +472,7 @@ func tailLogs(ctx context.Context, logger Logger, opts *LogOptions) LogChan { func readLogs(ctx context.Context, stream io.ReadCloser, out chan<- *LogItem, opts *LogOptions) streamResult { defer func() { if err := stream.Close(); err != nil && !errors.Is(err, io.ErrClosedPipe) { - slog.Error("Fail to close stream", + slog.Error("Failed to close stream", slogs.Container, opts.Info(), slogs.Error, err, )