From 46d4917ea0eaa587e87602200fb6843776cc62a5 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Tue, 3 Mar 2026 14:48:17 +0200 Subject: Add dtailhealth no-auth-key flag and adjust turbo EOF handling --- internal/server/handlers/readcommand.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'internal/server') diff --git a/internal/server/handlers/readcommand.go b/internal/server/handlers/readcommand.go index 7cd9a63..dc3196e 100644 --- a/internal/server/handlers/readcommand.go +++ b/internal/server/handlers/readcommand.go @@ -129,14 +129,23 @@ func (r *readCommand) readFiles(ctx context.Context, ltx lcontext.LContext, dlog.Server.Info(r.server.LogContext(), "All files processed", "count", len(paths)) - // In turbo mode, signal EOF after all files are processed - // This is crucial for proper shutdown in server mode + // In turbo mode, only the final active command should signal EOF and wait for + // acknowledgement. Signaling per command in high-concurrency cat/grep sessions + // causes repeated EOF timeouts and races with still-running commands. if !r.server.TurboBoostDisabled() && !r.server.HasRegularAggregate() && (r.mode == omode.CatClient || r.mode == omode.GrepClient || r.mode == omode.TailClient) { if r.server.IsTurboMode() && r.server.HasTurboEOF() { + pending, active := r.server.PendingAndActive() + shouldSignalEOF := pending == 0 && active == 1 + if !shouldSignalEOF { + dlog.Server.Trace(r.server.LogContext(), "Skipping turbo EOF signal for non-final command", + "pending", pending, "active", active) + return + } + dlog.Server.Debug(r.server.LogContext(), "Turbo mode: flushing data before EOF signal") - // Ensure all turbo data is flushed before signaling EOF + // Ensure all turbo data is flushed before signaling EOF. r.server.FlushTurboData() // Signal EOF by closing the channel, but only once. -- cgit v1.2.3