Skip to content

Commit 4ceb549

Browse files
authored
chore: close db properly in early exit paths in ConnectToPostgres (#18448)
There were some code paths where if we exited early from the function the postgres connection would never get cleaned up. This is the mechanism that cleans up the db - it requires the err variable to be not nil: https://github.com/coder/coder/blob/118bf981454188c4989e8b565dec67906616f885/cli/server.go#L2319-L2328
1 parent 32239b2 commit 4ceb549

File tree

1 file changed

+5
-8
lines changed

1 file changed

+5
-8
lines changed

cli/server.go

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2312,19 +2312,20 @@ func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, d
23122312

23132313
var err error
23142314
var sqlDB *sql.DB
2315+
dbNeedsClosing := true
23152316
// Try to connect for 30 seconds.
23162317
ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
23172318
defer cancel()
23182319

23192320
defer func() {
2320-
if err == nil {
2321+
if !dbNeedsClosing {
23212322
return
23222323
}
23232324
if sqlDB != nil {
23242325
_ = sqlDB.Close()
23252326
sqlDB = nil
2327+
logger.Debug(ctx, "closed db before returning from ConnectToPostgres")
23262328
}
2327-
logger.Error(ctx, "connect to postgres failed", slog.Error(err))
23282329
}()
23292330

23302331
var tries int
@@ -2361,12 +2362,7 @@ func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, d
23612362
}
23622363
defer version.Close()
23632364
if !version.Next() {
2364-
// it's critical we assign to the err variable, otherwise the defer statement
2365-
// that runs db.Close() will not execute it
2366-
if err = version.Err(); err != nil {
2367-
return nil, xerrors.Errorf("no rows returned for version select: %w", err)
2368-
}
2369-
return nil, xerrors.Errorf("no rows returned for version select")
2365+
return nil, xerrors.Errorf("no rows returned for version select: %w", version.Err())
23702366
}
23712367
var versionNum int
23722368
err = version.Scan(&versionNum)
@@ -2408,6 +2404,7 @@ func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, d
24082404
// of connection churn.
24092405
sqlDB.SetMaxIdleConns(3)
24102406

2407+
dbNeedsClosing = false
24112408
return sqlDB, nil
24122409
}
24132410

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy