This commit is contained in:
LINKIWI 2024-11-20 20:00:36 -05:00 committed by GitHub
commit 4f739de1e2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 18 additions and 2 deletions

View File

@ -33,6 +33,7 @@ func BenchmarkPoolGetPut(b *testing.B) {
Dialer: dummyDialer, Dialer: dummyDialer,
PoolSize: bm.poolSize, PoolSize: bm.poolSize,
PoolTimeout: time.Second, PoolTimeout: time.Second,
DialTimeout: 1 * time.Second,
ConnMaxIdleTime: time.Hour, ConnMaxIdleTime: time.Hour,
}) })
@ -76,6 +77,7 @@ func BenchmarkPoolGetRemove(b *testing.B) {
Dialer: dummyDialer, Dialer: dummyDialer,
PoolSize: bm.poolSize, PoolSize: bm.poolSize,
PoolTimeout: time.Second, PoolTimeout: time.Second,
DialTimeout: 1 * time.Second,
ConnMaxIdleTime: time.Hour, ConnMaxIdleTime: time.Hour,
}) })

View File

@ -62,6 +62,7 @@ type Options struct {
PoolFIFO bool PoolFIFO bool
PoolSize int PoolSize int
DialTimeout time.Duration
PoolTimeout time.Duration PoolTimeout time.Duration
MinIdleConns int MinIdleConns int
MaxIdleConns int MaxIdleConns int
@ -140,7 +141,10 @@ func (p *ConnPool) checkMinIdleConns() {
} }
func (p *ConnPool) addIdleConn() error { func (p *ConnPool) addIdleConn() error {
cn, err := p.dialConn(context.TODO(), true) ctx, cancel := context.WithTimeout(context.Background(), p.cfg.DialTimeout)
defer cancel()
cn, err := p.dialConn(ctx, true)
if err != nil { if err != nil {
return err return err
} }
@ -230,15 +234,19 @@ func (p *ConnPool) tryDial() {
return return
} }
conn, err := p.cfg.Dialer(context.Background()) ctx, cancel := context.WithTimeout(context.Background(), p.cfg.DialTimeout)
conn, err := p.cfg.Dialer(ctx)
if err != nil { if err != nil {
p.setLastDialError(err) p.setLastDialError(err)
time.Sleep(time.Second) time.Sleep(time.Second)
cancel()
continue continue
} }
atomic.StoreUint32(&p.dialErrorsNum, 0) atomic.StoreUint32(&p.dialErrorsNum, 0)
_ = conn.Close() _ = conn.Close()
cancel()
return return
} }
} }

View File

@ -22,6 +22,7 @@ var _ = Describe("ConnPool", func() {
Dialer: dummyDialer, Dialer: dummyDialer,
PoolSize: 10, PoolSize: 10,
PoolTimeout: time.Hour, PoolTimeout: time.Hour,
DialTimeout: 1 * time.Second,
ConnMaxIdleTime: time.Millisecond, ConnMaxIdleTime: time.Millisecond,
}) })
}) })
@ -46,6 +47,7 @@ var _ = Describe("ConnPool", func() {
}, },
PoolSize: 10, PoolSize: 10,
PoolTimeout: time.Hour, PoolTimeout: time.Hour,
DialTimeout: 1 * time.Second,
ConnMaxIdleTime: time.Millisecond, ConnMaxIdleTime: time.Millisecond,
MinIdleConns: minIdleConns, MinIdleConns: minIdleConns,
}) })
@ -129,6 +131,7 @@ var _ = Describe("MinIdleConns", func() {
PoolSize: poolSize, PoolSize: poolSize,
MinIdleConns: minIdleConns, MinIdleConns: minIdleConns,
PoolTimeout: 100 * time.Millisecond, PoolTimeout: 100 * time.Millisecond,
DialTimeout: 1 * time.Second,
ConnMaxIdleTime: -1, ConnMaxIdleTime: -1,
}) })
Eventually(func() int { Eventually(func() int {
@ -306,6 +309,7 @@ var _ = Describe("race", func() {
Dialer: dummyDialer, Dialer: dummyDialer,
PoolSize: 10, PoolSize: 10,
PoolTimeout: time.Minute, PoolTimeout: time.Minute,
DialTimeout: 1 * time.Second,
ConnMaxIdleTime: time.Millisecond, ConnMaxIdleTime: time.Millisecond,
}) })
@ -336,6 +340,7 @@ var _ = Describe("race", func() {
PoolSize: 1000, PoolSize: 1000,
MinIdleConns: 50, MinIdleConns: 50,
PoolTimeout: 3 * time.Second, PoolTimeout: 3 * time.Second,
DialTimeout: 1 * time.Second,
} }
p := pool.NewConnPool(opt) p := pool.NewConnPool(opt)

View File

@ -518,6 +518,7 @@ func newConnPool(
PoolFIFO: opt.PoolFIFO, PoolFIFO: opt.PoolFIFO,
PoolSize: opt.PoolSize, PoolSize: opt.PoolSize,
PoolTimeout: opt.PoolTimeout, PoolTimeout: opt.PoolTimeout,
DialTimeout: opt.DialTimeout,
MinIdleConns: opt.MinIdleConns, MinIdleConns: opt.MinIdleConns,
MaxIdleConns: opt.MaxIdleConns, MaxIdleConns: opt.MaxIdleConns,
MaxActiveConns: opt.MaxActiveConns, MaxActiveConns: opt.MaxActiveConns,