]> Cypherpunks repositories - gostls13.git/commitdiff
database/sql: fix logic for pulling a Conn from DB
authorDaniel Theophanes <kardianos@gmail.com>
Fri, 11 Jan 2019 22:20:41 +0000 (14:20 -0800)
committerBrad Fitzpatrick <bradfitz@golang.org>
Mon, 14 Jan 2019 19:44:57 +0000 (19:44 +0000)
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>

src/database/sql/sql.go

index b0353ab4dc7829d894df67723a5c0867871b922a..38a173adba852302c12b54f84cdd3a264b7e67b7 100644 (file)
@@ -1698,7 +1698,7 @@ func (db *DB) Conn(ctx context.Context) (*Conn, error) {
                }
        }
        if err == driver.ErrBadConn {
-               dc, err = db.conn(ctx, cachedOrNewConn)
+               dc, err = db.conn(ctx, alwaysNewConn)
        }
        if err != nil {
                return nil, err