From a4eb3cc769c13312fdd4b7aaa20659e408f734b7 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 2 Jul 2025 22:28:05 +0300 Subject: feat: make turbo mode configurable via config file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add TurboModeEnable setting to server configuration with environment variable override. The DTAIL_TURBOBOOST_ENABLE environment variable takes precedence over config file setting. Turbo mode is automatically disabled for MapReduce operations to prevent data accuracy issues. - Add TurboModeEnable boolean to ServerConfig struct - Update config initializer to check environment variable for backward compatibility - Replace direct env var checks with config.Server.TurboModeEnable throughout codebase - Enable turbo mode in example config file (dtail.json.example) - Add property to JSON schema with descriptive documentation 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- internal/server/handlers/readcommand.go | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'internal/server') diff --git a/internal/server/handlers/readcommand.go b/internal/server/handlers/readcommand.go index 1f46498..bdb7b8b 100644 --- a/internal/server/handlers/readcommand.go +++ b/internal/server/handlers/readcommand.go @@ -121,8 +121,7 @@ func (r *readCommand) readFiles(ctx context.Context, ltx lcontext.LContext, // In turbo mode, signal EOF after all files are processed // This is crucial for proper shutdown in server mode - turboBoostEnabled := config.Env("DTAIL_TURBOBOOST_ENABLE") - if turboBoostEnabled && r.server.aggregate == nil && + if config.Server.TurboModeEnable && r.server.aggregate == nil && (r.mode == omode.CatClient || r.mode == omode.GrepClient || r.mode == omode.TailClient) { if r.server.IsTurboMode() && r.server.turboEOF != nil { dlog.Server.Debug(r.server.user, "Turbo mode: flushing data before EOF signal") @@ -249,10 +248,9 @@ func (r *readCommand) read(ctx context.Context, ltx lcontext.LContext, } // Check if we should use the turbo boost optimizations - turboBoostEnabled := config.Env("DTAIL_TURBOBOOST_ENABLE") // Enable turbo boost for cat/grep/tail modes, but NOT for aggregate (MapReduce) operations // MapReduce requires the traditional channel-based approach to work correctly - if turboBoostEnabled && r.server.aggregate == nil && + if config.Server.TurboModeEnable && r.server.aggregate == nil && (r.mode == omode.CatClient || r.mode == omode.GrepClient || r.mode == omode.TailClient) { r.readWithTurboProcessor(ctx, ltx, path, globID, re, reader) return @@ -309,7 +307,7 @@ func (r *readCommand) readWithProcessor(ctx context.Context, ltx lcontext.LConte aggregate := r.server.aggregate // Use the optimized version if turbo boost is enabled - turboBoostEnabled := config.Env("DTAIL_TURBOBOOST_ENABLE") + turboBoostEnabled := config.Server.TurboModeEnable for { if aggregate != nil { -- cgit v1.2.3