Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc1dd875

Browse files
committed
fix(cli): prevent sqlDB leaks in ConnectToPostgres
1 parent3044091 commitc1dd875

File tree

1 file changed

+19
-15
lines changed

1 file changed

+19
-15
lines changed

‎cli/server.go

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1875,19 +1875,26 @@ func BuildLogger(inv *clibase.Invocation, cfg *codersdk.DeploymentValues) (slog.
18751875
},nil
18761876
}
18771877

1878-
funcConnectToPostgres(ctx context.Context,logger slog.Logger,driverstring,dbURLstring) (*sql.DB,error) {
1878+
funcConnectToPostgres(ctx context.Context,logger slog.Logger,driverstring,dbURLstring) (sqlDB*sql.DB,errerror) {
18791879
logger.Debug(ctx,"connecting to postgresql")
18801880

18811881
// Try to connect for 30 seconds.
18821882
ctx,cancel:=context.WithTimeout(ctx,30*time.Second)
18831883
defercancel()
18841884

1885-
var (
1886-
sqlDB*sql.DB
1887-
errerror
1888-
ok=false
1889-
triesint
1890-
)
1885+
vartriesint
1886+
1887+
deferfunc() {
1888+
iferr==nil {
1889+
return
1890+
}
1891+
ifsqlDB!=nil {
1892+
_=sqlDB.Close()
1893+
sqlDB=nil
1894+
}
1895+
logger.Error(ctx,"connect to postgres; tries %d",slog.Error(err))
1896+
}()
1897+
18911898
forr:=retry.New(time.Second,3*time.Second);r.Wait(ctx); {
18921899
tries++
18931900

@@ -1900,18 +1907,16 @@ func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, d
19001907
err=pingPostgres(ctx,sqlDB)
19011908
iferr!=nil {
19021909
logger.Warn(ctx,"ping postgres; retrying",slog.Error(err),slog.F("try",tries))
1910+
_=sqlDB.Close()
1911+
sqlDB=nil
19031912
continue
19041913
}
19051914

19061915
break
19071916
}
1908-
// Make sure we close the DB in case it opened but the ping failed for some
1909-
// reason.
1910-
deferfunc() {
1911-
if!ok&&sqlDB!=nil {
1912-
_=sqlDB.Close()
1913-
}
1914-
}()
1917+
iferr==nil {
1918+
err=ctx.Err()
1919+
}
19151920
iferr!=nil {
19161921
returnnil,xerrors.Errorf("connect to postgres; tries %d; last error: %w",tries,err)
19171922
}
@@ -1958,7 +1963,6 @@ func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, d
19581963
// of connection churn.
19591964
sqlDB.SetMaxIdleConns(3)
19601965

1961-
ok=true
19621966
returnsqlDB,nil
19631967
}
19641968

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp