From de50141a0446463e2e5852ae2a18d54164f1221b Mon Sep 17 00:00:00 2001 From: "Hein Puth (Warkanum)" <208308+warkanum@users.noreply.github.com> Date: Tue, 30 Dec 2025 12:57:35 +0200 Subject: [PATCH] Update pkg/server/manager.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- pkg/server/manager.go | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/pkg/server/manager.go b/pkg/server/manager.go index 02f0c3a..b4d4d8f 100644 --- a/pkg/server/manager.go +++ b/pkg/server/manager.go @@ -312,14 +312,36 @@ func (sm *serverManager) RestartAll() error { return fmt.Errorf("failed to stop servers during restart: %w", err) } - // Give ports time to be released - time.Sleep(200 * time.Millisecond) + // Retry starting all servers with exponential backoff instead of a fixed sleep. + const ( + maxAttempts = 5 + initialBackoff = 100 * time.Millisecond + maxBackoff = 2 * time.Second + ) - if err := sm.StartAll(); err != nil { - return fmt.Errorf("failed to start servers during restart: %w", err) + var lastErr error + backoff := initialBackoff + + for attempt := 1; attempt <= maxAttempts; attempt++ { + if err := sm.StartAll(); err != nil { + lastErr = err + if attempt == maxAttempts { + break + } + logger.Warn("Attempt %d to start servers during restart failed: %v; retrying in %s", attempt, err, backoff) + time.Sleep(backoff) + backoff *= 2 + if backoff > maxBackoff { + backoff = maxBackoff + } + continue + } + + logger.Info("All servers restarted successfully.") + return nil } - logger.Info("All servers restarted successfully.") - return nil + + return fmt.Errorf("failed to start servers during restart after %d attempts: %w", maxAttempts, lastErr) } // List returns all registered server instances.