fix: improve log retry logic (#3580)

* fix: improve log retry logic

* fix: streamline log retry logic and improve error handling
mine
Ümüt Özalp 2025-09-27 16:51:43 +02:00 committed by GitHub
parent 5b877f5807
commit 2ed7206896
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 15 additions and 9 deletions

View File

@ -372,20 +372,19 @@ func tailLogs(ctx context.Context, logger Logger, opts *LogOptions) LogChan {
delay := logBackoffInitial delay := logBackoffInitial
for range logRetryCount { 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) req, err := logger.Logs(opts.Path, podOpts)
if err != nil { if err != nil {
slog.Error("Log request failed", slog.Error("Log request failed",
slogs.Container, opts.Info(), slogs.Container, opts.Info(),
slogs.Error, err, 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 { select {
case <-ctx.Done(): case <-ctx.Done():
return return
@ -403,6 +402,13 @@ func tailLogs(ctx context.Context, logger Logger, opts *LogOptions) LogChan {
slogs.Error, e, slogs.Error, e,
slogs.Container, opts.Info(), 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 { select {
case <-ctx.Done(): case <-ctx.Done():
return 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 { func readLogs(ctx context.Context, stream io.ReadCloser, out chan<- *LogItem, opts *LogOptions) streamResult {
defer func() { defer func() {
if err := stream.Close(); err != nil && !errors.Is(err, io.ErrClosedPipe) { 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.Container, opts.Info(),
slogs.Error, err, slogs.Error, err,
) )