Skip to content

Commit d6a99e7

Browse files
authored
Merge pull request #1112 from patrickwhite256/master
Close single conn connection pool
2 parents 0cf98f9 + efa4a78 commit d6a99e7

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

internal/error.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@ package internal
22

33
import (
44
"context"
5+
"errors"
56
"io"
67
"net"
78
"strings"
89

910
"github.com/go-redis/redis/internal/proto"
1011
)
1112

13+
var ErrSingleConnPoolClosed = errors.New("redis: SingleConnPool is closed")
14+
1215
func IsRetryableError(err error, retryTimeout bool) bool {
1316
switch err {
1417
case nil, context.Canceled, context.DeadlineExceeded:
@@ -22,6 +25,10 @@ func IsRetryableError(err error, retryTimeout bool) bool {
2225
}
2326
return true
2427
}
28+
if err == ErrSingleConnPoolClosed {
29+
return true
30+
}
31+
2532
s := err.Error()
2633
if s == "ERR max number of clients reached" {
2734
return true

internal/pool/pool_single.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
package pool
22

3-
import "context"
3+
import (
4+
"context"
5+
6+
"github.com/go-redis/redis/internal"
7+
)
48

59
type SingleConnPool struct {
6-
cn *Conn
10+
cn *Conn
11+
cnClosed bool
712
}
813

914
var _ Pooler = (*SingleConnPool)(nil)
@@ -23,6 +28,9 @@ func (p *SingleConnPool) CloseConn(*Conn) error {
2328
}
2429

2530
func (p *SingleConnPool) Get(ctx context.Context) (*Conn, error) {
31+
if p.cnClosed {
32+
return nil, internal.ErrSingleConnPoolClosed
33+
}
2634
return p.cn, nil
2735
}
2836

@@ -36,9 +44,13 @@ func (p *SingleConnPool) Remove(cn *Conn) {
3644
if p.cn != cn {
3745
panic("p.cn != cn")
3846
}
47+
p.cnClosed = true
3948
}
4049

4150
func (p *SingleConnPool) Len() int {
51+
if p.cnClosed {
52+
return 0
53+
}
4254
return 1
4355
}
4456

0 commit comments

Comments
 (0)