Skip to content

Commit 34edec2

Browse files
committed
what if those conns are tracked and closed on Close?
1 parent b80f6d5 commit 34edec2

File tree

5 files changed

+40
-0
lines changed

5 files changed

+40
-0
lines changed

hitless/pool_hook_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,14 @@ func (mp *mockPool) RemovePoolHook(hook pool.PoolHook) {
9999
// Mock implementation - do nothing
100100
}
101101

102+
func (mp *mockPool) TrackConn(conn *pool.Conn) {
103+
// Mock implementation - do nothing
104+
}
105+
106+
func (mp *mockPool) UntrackConn(conn *pool.Conn) {
107+
// Mock implementation - do nothing
108+
}
109+
102110
func (mp *mockPool) Close() error {
103111
return nil
104112
}

internal/pool/pool.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ type Pooler interface {
6868
AddPoolHook(hook PoolHook)
6969
RemovePoolHook(hook PoolHook)
7070

71+
TrackConn(*Conn)
72+
UntrackConn(*Conn)
73+
7174
Close() error
7275
}
7376

@@ -736,3 +739,22 @@ func (p *ConnPool) isHealthyConn(cn *Conn, now time.Time) bool {
736739
}
737740
return true
738741
}
742+
743+
func (p *ConnPool) TrackConn(cn *Conn) {
744+
p.connsMu.Lock()
745+
p.poolSize.Add(1)
746+
p.conns = append(p.conns, cn)
747+
p.connsMu.Unlock()
748+
}
749+
750+
func (p *ConnPool) UntrackConn(cn *Conn) {
751+
p.connsMu.Lock()
752+
for i, c := range p.conns {
753+
if c == cn {
754+
p.conns = append(p.conns[:i], p.conns[i+1:]...)
755+
p.poolSize.Add(-1)
756+
break
757+
}
758+
}
759+
p.connsMu.Unlock()
760+
}

internal/pool/pool_single.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,7 @@ func (p *SingleConnPool) Stats() *Stats {
6262
func (p *SingleConnPool) AddPoolHook(hook PoolHook) {}
6363

6464
func (p *SingleConnPool) RemovePoolHook(hook PoolHook) {}
65+
66+
func (p *SingleConnPool) TrackConn(cn *Conn) {}
67+
68+
func (p *SingleConnPool) UntrackConn(cn *Conn) {}

internal/pool/pool_sticky.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,3 +203,7 @@ func (p *StickyConnPool) Stats() *Stats {
203203
func (p *StickyConnPool) AddPoolHook(hook PoolHook) {}
204204

205205
func (p *StickyConnPool) RemovePoolHook(hook PoolHook) {}
206+
207+
func (p *StickyConnPool) TrackConn(cn *Conn) {}
208+
209+
func (p *StickyConnPool) UntrackConn(cn *Conn) {}

redis.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,10 +1071,12 @@ func (c *Client) pubSub() *PubSub {
10711071
return nil, err
10721072
}
10731073

1074+
c.connPool.TrackConn(cn)
10741075
return cn, nil
10751076
},
10761077
closeConn: func(cn *pool.Conn) error {
10771078
_ = cn.Close()
1079+
c.connPool.UntrackConn(cn)
10781080
return nil
10791081
},
10801082
pushProcessor: c.pushProcessor,

0 commit comments

Comments
 (0)