aboutsummaryrefslogtreecommitdiff
path: root/src/database/sql/sql.go
AgeCommit message (Collapse)Author
2017-01-26database/sql: fix race when canceling queries immediatelyDaniel Theophanes
Previously the following could happen, though in practice it would be rare. Goroutine 1: (*Tx).QueryContext begins a query, passing in userContext Goroutine 2: (*Tx).awaitDone starts to wait on the context derived from the passed in context Goroutine 1: (*Tx).grabConn returns a valid (*driverConn) The (*driverConn) passes to (*DB).queryConn Goroutine 3: userContext is canceled Goroutine 2: (*Tx).awaitDone unblocks and calls (*Tx).rollback (*driverConn).finalClose obtains dc.Mutex (*driverConn).finalClose sets dc.ci = nil Goroutine 1: (*DB).queryConn obtains dc.Mutex in withLock ctxDriverPrepare accepts dc.ci which is now nil ctxCriverPrepare panics on the nil ci The fix for this is to guard the Tx methods with a RWLock holding it exclusivly when closing the Tx and holding a read lock when executing a query. Fixes #18719 Change-Id: I37aa02c37083c9793dabd28f7f934a1c5cbc05ea Reviewed-on: https://go-review.googlesource.com/35550 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-01-07all: fix misspellingsshawnps
Change-Id: I429637ca91f7db4144f17621de851a548dc1ce76 Reviewed-on: https://go-review.googlesource.com/34923 Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Daniel Martí <mvdan@mvdan.cc> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-01-02database/sql: prevent Tx.rollback from racing Tx.closeDaniel Theophanes
Previously Tx.done was being set in close, but in a Tx rollback and Commit are the real closing methods, and Tx.close is just a helper common to both. Prior to this change a multiple rollback statements could be called, one would enter close and begin closing it while the other was still in rollback breaking it. Fix that by setting done in rollback and Commit, not in Tx.close. Fixes #18429 Change-Id: Ie274f60c2aa6a4a5aa38e55109c05ea9d4fe0223 Reviewed-on: https://go-review.googlesource.com/34716 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-12-14database/sql: do not store Tx options in ContextDaniel Theophanes
Drivers which previously supported tip will need to update to this revision before release. Fixes #18284 Change-Id: I70b8e7afff1558a8b5348885ce9f50e067c72ee9 Reviewed-on: https://go-review.googlesource.com/34330 Run-TryBot: Daniel Theophanes <kardianos@gmail.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-12-09database/sql: use complete sentences in new docsBrad Fitzpatrick
Change-Id: Icb842a80cab2b07b9ace1e8e14c4a19c48a92c43 Reviewed-on: https://go-review.googlesource.com/34247 Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Daniel Theophanes <kardianos@gmail.com>
2016-12-09database/sql: document that drivers may not return right after cancelDaniel Theophanes
Fixes #18168 Change-Id: Idbfe3d4daedd93c7caf6f1770ecd988e9af39949 Reviewed-on: https://go-review.googlesource.com/34144 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2016-12-01database/sql: ensure Commit and Rollback return ErrTxDoneDaniel Theophanes
Ensure documented behavior of returning ErrTxDone if the Tx has already been committed or rolled back. Fixes #18147 Change-Id: I07dc75bef4dbd4dd88dd252c96dc8ab99f28c00e Reviewed-on: https://go-review.googlesource.com/33793 TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
2016-12-01database/sql: document expectations for named parametersDaniel Theophanes
Require parameter names to not begin with a symbol. Change-Id: I5dfe9d4e181f0daf71dad2f395aca41c68678cbe Reviewed-on: https://go-review.googlesource.com/33493 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-11-30database/sql: rename NamedParam to NamedArg and Param to NamedDaniel Theophanes
Be consistent with the argument names already provided. Also parameter is the variable, argument is the value. Fixes #18099 Change-Id: Idb3f4e9ffc214036c721ddb4f614ec6c95bb7778 Reviewed-on: https://go-review.googlesource.com/33660 Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
2016-11-29database/sql: do not bypass the driver locks with Context methodsDaniel Theophanes
When context methods were initially added it was attempted to unify behavior between drivers without Context methods and those with Context methods to always return right away when the Context expired. However in doing so the driver call could be executed outside of the scope of the driver connection lock and thus bypassing thread safety. The new behavior waits until the driver operation is complete. It then checks to see if the context has expired and if so returns that error. Change-Id: I4a5c7c3263420c57778f36a5ed6fa0ef8cb32b20 Reviewed-on: https://go-review.googlesource.com/32422 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-11-24database/sql: force users of NamedParam to name struct literals fieldsBrad Fitzpatrick
Or they can use sql.Param instead. Change-Id: Icf21dbcc87170635c3f5d3f49736429a37abe9da Reviewed-on: https://go-review.googlesource.com/33576 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Daniel Theophanes <kardianos@gmail.com> Reviewed-by: Minux Ma <minux@golang.org>
2016-11-17database/sql: ensure all driver Stmt are closed onceDaniel Theophanes
Previously driver.Stmt could could be closed multiple times in edge cases that drivers may not test for initially. Make their job easier by ensuring the driver is only closed a single time. Fixes #16019 Change-Id: I1e4777ef70697a849602e6ef9da73054a8feb4cd Reviewed-on: https://go-review.googlesource.com/33352 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-11-16database/sql: guard against driver.Stmt.Close panicsDaniel Theophanes
Do not retain a lock when driver.Stmt.Close panic as the rest of the sql package ensures. Updates #16019 Change-Id: Idc7ea9258ae23f491e79cce3efc365684a708428 Reviewed-on: https://go-review.googlesource.com/33328 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2016-11-16database/sql: clarify when statement in transaction is closedIan Lance Taylor
Fixes #16346. Change-Id: Ie75a4ae7011036dd2c1f121a7a5e38d10177721e Reviewed-on: https://go-review.googlesource.com/33296 Reviewed-by: Daniel Theophanes <kardianos@gmail.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2016-10-31database/sql: correctly spell constantsKevin Burke
Also add a link to more information about isolation levels as defined by the SQL standard. Fixes #17682. Change-Id: I94c53b713f4c882af40cf15fe5f1e5dbc53ea741 Reviewed-on: https://go-review.googlesource.com/32418 Reviewed-by: Daniel Theophanes <kardianos@gmail.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-10-31database/sql: add Pinger interface to driver ConnINADA Naoki
Change-Id: If6eb3a7c9ad48a517e584567b1003479c1df6cca Reviewed-on: https://go-review.googlesource.com/32136 Reviewed-by: Daniel Theophanes <kardianos@gmail.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-10-30database/sql: add context helper methods and transaction typesDaniel Theophanes
Prior to this change, it was implied that transaction properties would be carried in the context value. However, no such properties were defined, not even common ones. Define two common properties: isolation level and read-only. Drivers may choose to support additional transaction properties. It is not expected any further transaction properties will be added in the future. Change-Id: I2f680115a14a1333c65ba6f943d9a1149d412918 Reviewed-on: https://go-review.googlesource.com/31258 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2016-10-20database/sql: add missing unlock when context is expiredDaniel Theophanes
Missing the DB mutex unlock on an early return after checking if the context has expired. Fixes #17518 Change-Id: I247cafcef62623d813f534a941f3d5a3744f0738 Reviewed-on: https://go-review.googlesource.com/31494 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-10-18database/sql: support returning query database typesDaniel Theophanes
Creates a ColumnType structure that can be extended in to future. Allow drivers to implement what makes sense for the database. Fixes #16652 Change-Id: Ieb1fd64eac1460107b1d3474eba5201fa300a4ec Reviewed-on: https://go-review.googlesource.com/29961 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2016-10-17database/sql: add option to use named parameter in query argumentsDaniel Theophanes
Modify the new Context methods to take a name-value driver struct. This will require more modifications to drivers to use, but will reduce the overall number of structures that need to be maintained over time. Fixes #12381 Change-Id: I30747533ce418a1be5991a0c8767a26e8451adbd Reviewed-on: https://go-review.googlesource.com/30166 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-10-15database/sql: add support for multiple result setsDaniel Theophanes
Many database systems allow returning multiple result sets in a single query. This can be useful when dealing with many intermediate results on the server and there is a need to return more then one arity of data to the client. Fixes #12382 Change-Id: I480a9ac6dadfc8743e0ba8b6d868ccf8442a9ca1 Reviewed-on: https://go-review.googlesource.com/30592 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-10-04database/sql: fixup remaining driver call to use contextDaniel Theophanes
Missed one in the prior CL. Change-Id: I6f6d84d52fe4d902a985971a402701fb3b1eed86 Reviewed-on: https://go-review.googlesource.com/30255 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-09-29database/sql: close Rows when context is cancelledDaniel Theophanes
To prevent leaking connections, close any open Rows when the context is cancelled. Also enforce context cancel while reading rows off of the wire. Change-Id: I62237ecdb7d250d6734f6ce3d2b0bcb16dc6fda7 Reviewed-on: https://go-review.googlesource.com/29957 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2016-09-27database/sql: add context methodsDaniel Theophanes
Add context methods to sql and sql/driver methods. If the driver doesn't implement context methods the connection pool will still handle timeouts when a query fails to return in time or when a connection is not available from the pool in time. There will be a follow-up CL that will add support for context values that specify transaction levels and modes that a driver can use. Fixes #15123 Change-Id: Ia99f3957aa3f177b23044dd99d4ec217491a30a7 Reviewed-on: https://go-review.googlesource.com/29381 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-09-27database/sql: add doc comment for ErrTxDoneSam Whited
Change-Id: Idffb82cdcba4985954d061bdb021217f47ff4985 Reviewed-on: https://go-review.googlesource.com/29850 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2016-08-29database/sql: don't hang if the driver Exec method panicsIan Lance Taylor
Fixes #13677. Fixes #15901. Change-Id: Idffb82cdcba4985954d061bdb021217f47ff4984 Reviewed-on: https://go-review.googlesource.com/23576 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2016-06-28database/sql: deflake TestPendingConnsAfterErr and fix races, panicsBrad Fitzpatrick
TestPendingConnsAfterErr only cared that things didn't deadlock, so 5 seconds is a sufficient timer. We don't need 100 milliseconds. I was able to reproduce with a tiny (5 nanosecond) timeout value, instead of 100 milliseconds. In the process of testing with -race and a high -count= value, I noticed several data races and panics (sendings on a closed channel) which are also fixed in this change. Fixes #15684 Change-Id: Ib4605fcc0f296e658cb948352ed642b801cb578c Reviewed-on: https://go-review.googlesource.com/24550 Reviewed-by: Marko Tiikkaja <marko@joh.to> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Andrew Gerrand <adg@golang.org>
2016-03-25all: delete dead non-test codeDominik Honnef
This change removes a lot of dead code. Some of the code has never been used, not even when it was first commited. The rest shouldn't have survived refactors. This change doesn't remove unused routines helpful for debugging, nor does it remove code that's used in commented out blocks of code that are only unused temporarily. Furthermore, unused constants weren't removed when they were part of a set of constants from specifications. One noteworthy omission from this CL are about 1000 lines of unused code in cmd/fix, 700 lines of which are the typechecker, which hasn't been used ever since the pre-Go 1 fixes have been removed. I wasn't sure if this code should stick around for future uses of cmd/fix or be culled as well. Change-Id: Ib714bc7e487edc11ad23ba1c3222d1fd02e4a549 Reviewed-on: https://go-review.googlesource.com/20926 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-03-02all: single space after period.Brad Fitzpatrick
The tree's pretty inconsistent about single space vs double space after a period in documentation. Make it consistently a single space, per earlier decisions. This means contributors won't be confused by misleading precedence. This CL doesn't use go/doc to parse. It only addresses // comments. It was generated with: $ perl -i -npe 's,^(\s*// .+[a-z]\.) +([A-Z]),$1 $2,' $(git grep -l -E '^\s*//(.+\.) +([A-Z])') $ go test go/doc -update Change-Id: Iccdb99c37c797ef1f804a94b22ba5ee4b500c4f7 Reviewed-on: https://go-review.googlesource.com/20022 Reviewed-by: Rob Pike <r@golang.org> Reviewed-by: Dave Day <djd@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-02-21all: use cannot instead of can notJosh Bleecher Snyder
You can not use cannot, but you cannot spell cannot can not. Change-Id: I2f0971481a460804de96fd8c9e46a9cc62a3fc5b Reviewed-on: https://go-review.googlesource.com/19772 Reviewed-by: Rob Pike <r@golang.org>
2016-01-27database/sql: implement Scan of time.Time, document, clarify Scan error textBrad Fitzpatrick
Fixes #9157 Change-Id: Iadf305a172a0ec53ae91e1b2db3f3351691a48ff Reviewed-on: https://go-review.googlesource.com/18935 Reviewed-by: Russ Cox <rsc@golang.org> Reviewed-by: Andrew Gerrand <adg@golang.org>
2016-01-08database/sql: guard against panics in driver.Stmt implementationRuss Cox
For #13677, but there is more to do. Change-Id: Id1af999dc972d07cdfc771e5855a1a7dca47ca96 Reviewed-on: https://go-review.googlesource.com/18046 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-12-30database/sql: fix doc typosEvan Shaw
Change-Id: I374dabed6bf9783839d637e9d7fd6f4e61c7eecf Reviewed-on: https://go-review.googlesource.com/18183 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-12-02database/sql: Add DB.SetConnMaxLifetimeINADA Naoki
Long lived connections may make some DB operation difficult. (e.g. retiring load balanced DB server.) So SetConnMaxLifetime closes long lived connections. It can be used to limit maximum idle time, too. Closing idle connections reduces active connections while application is idle and avoids connections are closed by server side (cause errBadConn while querying). fixes #9851 Change-Id: I2e8e824219c1bee7f4b885d38ed96d11b7202b56 Reviewed-on: https://go-review.googlesource.com/6580 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-10-23database/sql: use RWMutex for driver registrationNathan VanBenschoten
Change-Id: I0f494c9f17cb6bb0cf5e7214cf033fdbd48f27f7 Reviewed-on: https://go-review.googlesource.com/16240 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2015-10-16database/sql: avoid deadlock waiting for connectionsChris Hines
Previously with db.maxOpen > 0, db.maxOpen+n failed connection attempts started concurrently could result in a deadlock. DB.conn and DB.openNewConnection did not trigger the DB.connectionOpener go routine after a failed connection attempt. This omission could leave go routines waiting for DB.connectionOpener forever. In addition the logic to track the state of the pool was inconsistent. db.numOpen was sometimes incremented optimistically and sometimes not. This change harmonizes the logic and eliminates the db.pendingOpens variable, making the logic easier to understand and maintain. Fixes #10886 Change-Id: I983c4921a3dacfbd531c3d7f8d2da8a592e9922a Reviewed-on: https://go-review.googlesource.com/14547 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2015-10-02database/sql: fix case where Stmt.Close discards errorIan Gudger
Fixes a case where the Stmt.Close() function in database/sql discards any error generated by the Close() function of the contained driverStmt. Fixes #12798 Change-Id: I40384d6165856665b062d15a643e4ecc09d63fda Reviewed-on: https://go-review.googlesource.com/15178 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2015-09-14database/sql: fix typoAndrew Gerrand
Fixes #12606 Change-Id: Ib68cb20108ad35c3dd96e606649c4c8f9c0f085c Reviewed-on: https://go-review.googlesource.com/14571 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-09-03database/sql: close bad connections in commit or rollback:Chris Hines
Previously Tx.close always passed a nil error to tx.db.putConn. As a result bad connections were reused, even if the driver returned driver.ErrBadConn. Adding an err parameter to Tx.close allows it to receive the driver error from Tx.Commit and Tx.Rollback and pass it to tx.db.putConn. Fixes #11264 Change-Id: I142b6b2509fa8d714bbc135cef7281a40803b3b8 Reviewed-on: https://go-review.googlesource.com/13912 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2015-07-15database/sql: document closing requirements for StmtsRuss Cox
Fixes #8952. Change-Id: I678f9706eccb5a344eeb0244f45b7b7669830bdc Reviewed-on: https://go-review.googlesource.com/12204 Reviewed-by: Andrew Gerrand <adg@golang.org>
2015-07-11all: link to https instead of httpBrad Fitzpatrick
The one in misc/makerelease/makerelease.go is particularly bad and probably warrants rotating our keys. I didn't update old weekly notes, and reverted some changes involving test code for now, since we're late in the Go 1.5 freeze. Otherwise, the rest are all auto-generated changes, and all manually reviewed. Change-Id: Ia2753576ab5d64826a167d259f48a2f50508792d Reviewed-on: https://go-review.googlesource.com/12048 Reviewed-by: Rob Pike <r@golang.org>
2015-06-30database/sql: make Register safe for concurrent useBrad Fitzpatrick
Adding a mutex was easier than documenting it, and is consistent with gob. Fixes #9847 Change-Id: Ifa94c17e7c11643add81b35431ef840b794d78b1 Reviewed-on: https://go-review.googlesource.com/11682 Reviewed-by: Andrew Gerrand <adg@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2015-04-08database/sql: Retry with a fresh connection after maxBadConnRetriesMarko Tiikkaja
Previously if the connection pool was larger than maxBadConnRetries and there were a lot of bad connections in the pool (for example if the database server was restarted), a query might have failed with an ErrBadConn unnecessarily. Instead of trying to guess how many times to retry, try maxBadConnRetries times and then force a fresh connection to be used for the last attempt. At the same time, lower maxBadConnRetries to a smaller value now that it's not that important to retry so many times from the free connection list. Fixes #8834 Change-Id: I6542f151a766a658980fb396fa4880ecf5874e3d Reviewed-on: https://go-review.googlesource.com/2034 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-04-07database/sql: close connection if db.numOpen > db.maxOpenJiong Du
Bug Description: When reduce db.maxOpen via db.SetMaxOpenConns, the unnecssary connections won't been released until all other connections are free. Fixes #9453 Change-Id: I9afb2e4b184139b31029ae53d7f5fd1fdb8d8d7e Reviewed-on: https://go-review.googlesource.com/2200 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-04-01database/sql: provide stats on number of open connections to the database.Andrei Korzhevskii
This change provides a convenient way to monitor database connection pool. Change-Id: I4b3757855b43f3b254acf9312e2a16e2f87840d0 Reviewed-on: https://go-review.googlesource.com/7950 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-01-24database/sql: reduce lock contention in Stmt.connStmtINADA Naoki
Previouslly, Stmt.connStmt calls DB.connIfFree on each Stmt.css. Since Stmt.connStmt locks Stmt.mu, a concurrent use of Stmt causes lock contention on Stmt.mu. Additionally, DB.connIfFree locks DB.mu which is shared by DB.addDep and DB.removeDep. This change removes DB.connIfFree and makes use of a first unused connection in idle connection pool to reduce lock contention without making it complicated. Fixes #9484 On EC2 c3.8xlarge (E5-2680 v2 @ 2.80GHz * 32 vCPU): benchmark old ns/op new ns/op delta BenchmarkManyConcurrentQuery-8 40249 34721 -13.73% BenchmarkManyConcurrentQuery-16 45610 40176 -11.91% BenchmarkManyConcurrentQuery-32 109831 43179 -60.69% benchmark old allocs new allocs delta BenchmarkManyConcurrentQuery-8 25 25 +0.00% BenchmarkManyConcurrentQuery-16 25 25 +0.00% BenchmarkManyConcurrentQuery-32 25 25 +0.00% benchmark old bytes new bytes delta BenchmarkManyConcurrentQuery-8 3980 3969 -0.28% BenchmarkManyConcurrentQuery-16 3980 3982 +0.05% BenchmarkManyConcurrentQuery-32 3993 3990 -0.08% Change-Id: Ic96296922c465bac38a260018c58324dae1531d9 Reviewed-on: https://go-review.googlesource.com/2207 Reviewed-by: Mikio Hara <mikioh.mikioh@gmail.com>
2014-12-24database/sql: Remove unnecessary call to maybeOpenNewConnectionsMarko Tiikkaja
numCanOpen will never be larger than 0 in maybeOpenNewConnections() when this code path is taken, so no new connections can ever be opened. Change-Id: Id1302e8d9afb3a67be61b5e738fe07ef81d20fe0 Reviewed-on: https://go-review.googlesource.com/1550 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2014-10-31database/sql: make TestDrivers not crash on second runBrad Fitzpatrick
Using -test.cpu=1,1 made it crash before. Fixes #9024 LGTM=iant R=adg, iant CC=golang-codereviews https://golang.org/cl/169860043
2014-10-15database/sql: add Drivers, returning list of registered driversRuss Cox
Fixes #7969. LGTM=bradfitz R=bradfitz CC=golang-codereviews https://golang.org/cl/158950043
2014-09-22database/sql: Close per-tx prepared statements when the associated tx endsMarko Tiikkaja
LGTM=bradfitz R=golang-codereviews, bradfitz, mattn.jp CC=golang-codereviews https://golang.org/cl/131650043