Connection pool timeout should return a consistent error value so clients can test for it.
This commit is contained in:
+5
-2
@@ -40,6 +40,9 @@ type ConnPoolStat struct {
|
|||||||
AvailableConnections int // unused live connections
|
AvailableConnections int // unused live connections
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ErrAcquireTimeout occurs when an attempt to acquire a connection times out.
|
||||||
|
var ErrAcquireTimeout = errors.New("timeout acquiring connection from pool")
|
||||||
|
|
||||||
// NewConnPool creates a new ConnPool. config.ConnConfig is passed through to
|
// NewConnPool creates a new ConnPool. config.ConnConfig is passed through to
|
||||||
// Connect directly.
|
// Connect directly.
|
||||||
func NewConnPool(config ConnPoolConfig) (p *ConnPool, err error) {
|
func NewConnPool(config ConnPoolConfig) (p *ConnPool, err error) {
|
||||||
@@ -131,7 +134,7 @@ func (p *ConnPool) acquire(deadline *time.Time) (*Conn, error) {
|
|||||||
|
|
||||||
// Make sure the deadline (if it is) has not passed yet
|
// Make sure the deadline (if it is) has not passed yet
|
||||||
if p.deadlinePassed(deadline) {
|
if p.deadlinePassed(deadline) {
|
||||||
return nil, errors.New("Timeout: Acquire connection timeout")
|
return nil, ErrAcquireTimeout
|
||||||
}
|
}
|
||||||
|
|
||||||
// If there is a deadline then start a timeout timer
|
// If there is a deadline then start a timeout timer
|
||||||
@@ -164,7 +167,7 @@ func (p *ConnPool) acquire(deadline *time.Time) (*Conn, error) {
|
|||||||
// Wait until there is an available connection OR room to create a new connection
|
// Wait until there is an available connection OR room to create a new connection
|
||||||
for len(p.availableConnections) == 0 && len(p.allConnections)+p.inProgressConnects == p.maxConnections {
|
for len(p.availableConnections) == 0 && len(p.allConnections)+p.inProgressConnects == p.maxConnections {
|
||||||
if p.deadlinePassed(deadline) {
|
if p.deadlinePassed(deadline) {
|
||||||
return nil, errors.New("Timeout: All connections in pool are busy")
|
return nil, ErrAcquireTimeout
|
||||||
}
|
}
|
||||||
p.cond.Wait()
|
p.cond.Wait()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user