@@ -1875,19 +1875,26 @@ func BuildLogger(inv *clibase.Invocation, cfg *codersdk.DeploymentValues) (slog.
1875
1875
}, nil
1876
1876
}
1877
1877
1878
- func ConnectToPostgres (ctx context.Context , logger slog.Logger , driver string , dbURL string ) (* sql.DB , error ) {
1878
+ func ConnectToPostgres (ctx context.Context , logger slog.Logger , driver string , dbURL string ) (sqlDB * sql.DB , err error ) {
1879
1879
logger .Debug (ctx , "connecting to postgresql" )
1880
1880
1881
1881
// Try to connect for 30 seconds.
1882
1882
ctx , cancel := context .WithTimeout (ctx , 30 * time .Second )
1883
1883
defer cancel ()
1884
1884
1885
- var (
1886
- sqlDB * sql.DB
1887
- err error
1888
- ok = false
1889
- tries int
1890
- )
1885
+ var tries int
1886
+
1887
+ defer func () {
1888
+ if err == nil {
1889
+ return
1890
+ }
1891
+ if sqlDB != nil {
1892
+ _ = sqlDB .Close ()
1893
+ sqlDB = nil
1894
+ }
1895
+ logger .Error (ctx , "connect to postgres; tries %d" , slog .Error (err ))
1896
+ }()
1897
+
1891
1898
for r := retry .New (time .Second , 3 * time .Second ); r .Wait (ctx ); {
1892
1899
tries ++
1893
1900
@@ -1900,18 +1907,16 @@ func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, d
1900
1907
err = pingPostgres (ctx , sqlDB )
1901
1908
if err != nil {
1902
1909
logger .Warn (ctx , "ping postgres; retrying" , slog .Error (err ), slog .F ("try" , tries ))
1910
+ _ = sqlDB .Close ()
1911
+ sqlDB = nil
1903
1912
continue
1904
1913
}
1905
1914
1906
1915
break
1907
1916
}
1908
- // Make sure we close the DB in case it opened but the ping failed for some
1909
- // reason.
1910
- defer func () {
1911
- if ! ok && sqlDB != nil {
1912
- _ = sqlDB .Close ()
1913
- }
1914
- }()
1917
+ if err == nil {
1918
+ err = ctx .Err ()
1919
+ }
1915
1920
if err != nil {
1916
1921
return nil , xerrors .Errorf ("connect to postgres; tries %d; last error: %w" , tries , err )
1917
1922
}
@@ -1958,7 +1963,6 @@ func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, d
1958
1963
// of connection churn.
1959
1964
sqlDB .SetMaxIdleConns (3 )
1960
1965
1961
- ok = true
1962
1966
return sqlDB , nil
1963
1967
}
1964
1968
0 commit comments