aboutsummaryrefslogtreecommitdiff
path: root/src/database/sql/sql_test.go
diff options
context:
space:
mode:
authorJiong Du <londevil@gmail.com>2014-12-30 16:12:50 +0800
committerBrad Fitzpatrick <bradfitz@golang.org>2015-04-07 09:27:26 +0000
commitcce127a75f72110c045319407a652829b5a5b716 (patch)
treebf7d51712bdcbf40e656593cd07ea547b2f6808a /src/database/sql/sql_test.go
parentb40421f32c37064f5eb9b00f4f5aebe7243be6cd (diff)
downloadgo-cce127a75f72110c045319407a652829b5a5b716.tar.xz
database/sql: close connection if db.numOpen > db.maxOpen
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>
Diffstat (limited to 'src/database/sql/sql_test.go')
-rw-r--r--src/database/sql/sql_test.go51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/database/sql/sql_test.go b/src/database/sql/sql_test.go
index e225ffe6fa..45554c6d2d 100644
--- a/src/database/sql/sql_test.go
+++ b/src/database/sql/sql_test.go
@@ -1070,6 +1070,57 @@ func TestMaxOpenConns(t *testing.T) {
}
}
+// Issue 9453: tests that SetMaxOpenConns can be lowered at runtime
+// and affects the subsequent release of connections.
+func TestMaxOpenConnsOnBusy(t *testing.T) {
+ defer setHookpostCloseConn(nil)
+ setHookpostCloseConn(func(_ *fakeConn, err error) {
+ if err != nil {
+ t.Errorf("Error closing fakeConn: %v", err)
+ }
+ })
+
+ db := newTestDB(t, "magicquery")
+ defer closeDB(t, db)
+
+ db.SetMaxOpenConns(3)
+
+ conn0, err := db.conn()
+ if err != nil {
+ t.Fatalf("db open conn fail: %v", err)
+ }
+
+ conn1, err := db.conn()
+ if err != nil {
+ t.Fatalf("db open conn fail: %v", err)
+ }
+
+ conn2, err := db.conn()
+ if err != nil {
+ t.Fatalf("db open conn fail: %v", err)
+ }
+
+ if g, w := db.numOpen, 3; g != w {
+ t.Errorf("free conns = %d; want %d", g, w)
+ }
+
+ db.SetMaxOpenConns(2)
+ if g, w := db.numOpen, 3; g != w {
+ t.Errorf("free conns = %d; want %d", g, w)
+ }
+
+ conn0.releaseConn(nil)
+ conn1.releaseConn(nil)
+ if g, w := db.numOpen, 2; g != w {
+ t.Errorf("free conns = %d; want %d", g, w)
+ }
+
+ conn2.releaseConn(nil)
+ if g, w := db.numOpen, 2; g != w {
+ t.Errorf("free conns = %d; want %d", g, w)
+ }
+}
+
func TestSingleOpenConn(t *testing.T) {
db := newTestDB(t, "people")
defer closeDB(t, db)