database/sql: fix logic for pulling a Conn from DB
The logic for pulling a database connection from the DB pool should
proceed as follows: attempt to pull either a cached connection or
new connection N times in a loop. If each connection results
in a bad connection, then create a new connection (no cache).
Previously pulling a Conn from the pool, the last step also
looked at the cache, rather then always creating a new connection.
Fixes #29684
Change-Id: I8f436fd9b96eb35502a620ebe8da4ab89fb06a2e
Reviewed-on: https://go-review.googlesource.com/c/157637
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/src/database/sql/sql.go b/src/database/sql/sql.go
index b0353ab..38a173a 100644
--- a/src/database/sql/sql.go
+++ b/src/database/sql/sql.go
@@ -1698,7 +1698,7 @@
}
}
if err == driver.ErrBadConn {
- dc, err = db.conn(ctx, cachedOrNewConn)
+ dc, err = db.conn(ctx, alwaysNewConn)
}
if err != nil {
return nil, err