diff options
| author | Jiong Du <londevil@gmail.com> | 2014-12-30 16:12:50 +0800 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@golang.org> | 2015-04-07 09:27:26 +0000 |
| commit | cce127a75f72110c045319407a652829b5a5b716 (patch) | |
| tree | bf7d51712bdcbf40e656593cd07ea547b2f6808a /src/database/sql/sql_test.go | |
| parent | b40421f32c37064f5eb9b00f4f5aebe7243be6cd (diff) | |
| download | go-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.go | 51 |
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) |
