From 6d07d78574e281e51625dbb56c3f303222ac983e Mon Sep 17 00:00:00 2001 From: Hugo Dutka Date: Thu, 19 Jun 2025 09:42:03 +0000 Subject: [PATCH] close db properly --- cli/server.go | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/cli/server.go b/cli/server.go index 0cc7b0edf2e36..7d587f5e1ae14 100644 --- a/cli/server.go +++ b/cli/server.go @@ -2312,19 +2312,20 @@ func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, d var err error var sqlDB *sql.DB + dbNeedsClosing := true // Try to connect for 30 seconds. ctx, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() defer func() { - if err == nil { + if !dbNeedsClosing { return } if sqlDB != nil { _ = sqlDB.Close() sqlDB = nil + logger.Debug(ctx, "closed db before returning from ConnectToPostgres") } - logger.Error(ctx, "connect to postgres failed", slog.Error(err)) }() var tries int @@ -2361,12 +2362,7 @@ func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, d } defer version.Close() if !version.Next() { - // it's critical we assign to the err variable, otherwise the defer statement - // that runs db.Close() will not execute it - if err = version.Err(); err != nil { - return nil, xerrors.Errorf("no rows returned for version select: %w", err) - } - return nil, xerrors.Errorf("no rows returned for version select") + return nil, xerrors.Errorf("no rows returned for version select: %w", version.Err()) } var versionNum int err = version.Scan(&versionNum) @@ -2408,6 +2404,7 @@ func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, d // of connection churn. sqlDB.SetMaxIdleConns(3) + dbNeedsClosing = false return sqlDB, nil }