From b773b0f56fb54b35f521581a03ecde4961d35807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20F=C3=ADsica?= Date: Thu, 12 Jun 2025 16:45:59 +0200 Subject: [PATCH] Fix backoff --- backend/pkg/transport/network/tcp/client.go | 23 ++++++++++----------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/backend/pkg/transport/network/tcp/client.go b/backend/pkg/transport/network/tcp/client.go index 1ee2cc27d..2fb683820 100644 --- a/backend/pkg/transport/network/tcp/client.go +++ b/backend/pkg/transport/network/tcp/client.go @@ -39,10 +39,17 @@ func (client *Client) Dial() (net.Conn, error) { var err error var conn net.Conn client.logger.Info().Msg("dialing") - // Reset retry counter when starting a new dial attempt - client.currentRetries = 0 - + for client.config.MaxConnectionRetries <= 0 || client.currentRetries < client.config.MaxConnectionRetries { + // Increment retry counter and calculate backoff + client.currentRetries++ + + backoffDuration := client.config.ConnectionBackoffFunction(client.currentRetries) + client.logger.Error().Stack().Err(err).Dur("backoff", backoffDuration).Int("retry", client.currentRetries).Msg("retrying after backoff") + + // Sleep for backoff duration + time.Sleep(backoffDuration) + conn, err = client.config.DialContext(client.config.Context, "tcp", client.address) if err == nil { @@ -50,7 +57,7 @@ func (client *Client) Dial() (net.Conn, error) { client.currentRetries = 0 return conn, nil } - + // Check if context was cancelled if client.config.Context.Err() != nil { client.logger.Error().Stack().Err(client.config.Context.Err()).Msg("canceled") @@ -62,14 +69,6 @@ func (client *Client) Dial() (net.Conn, error) { client.logger.Error().Stack().Err(err).Msg("failed with non-retryable error") return nil, err } - - // Increment retry counter and calculate backoff - client.currentRetries++ - backoffDuration := client.config.ConnectionBackoffFunction(client.currentRetries) - client.logger.Error().Stack().Err(err).Dur("backoff", backoffDuration).Int("retry", client.currentRetries).Msg("retrying after backoff") - - // Sleep for backoff duration - time.Sleep(backoffDuration) } client.logger.Debug().Int("max", client.config.MaxConnectionRetries).Msg("max connection retries exceeded")