1
0
mirror of https://github.com/redis/go-redis.git synced 2025-10-24 19:32:57 +03:00

be able to reject connection OnGet

This commit is contained in:
Nedyalko Dyakov
2025-10-17 16:25:25 +03:00
parent 4bc6d335b8
commit 3020e3a10c
6 changed files with 120 additions and 52 deletions

View File

@@ -116,22 +116,22 @@ func (ph *PoolHook) ResetCircuitBreakers() {
}
// OnGet is called when a connection is retrieved from the pool
func (ph *PoolHook) OnGet(ctx context.Context, conn *pool.Conn, _ bool) error {
func (ph *PoolHook) OnGet(_ context.Context, conn *pool.Conn, _ bool) (accept bool, err error) {
// NOTE: There are two conditions to make sure we don't return a connection that should be handed off or is
// in a handoff state at the moment.
// Check if connection is usable (not in a handoff state)
// Should not happen since the pool will not return a connection that is not usable.
if !conn.IsUsable() {
return ErrConnectionMarkedForHandoff
return false, ErrConnectionMarkedForHandoff
}
// Check if connection is marked for handoff, which means it will be queued for handoff on put.
if conn.ShouldHandoff() {
return ErrConnectionMarkedForHandoff
return false, ErrConnectionMarkedForHandoff
}
return nil
return true, nil
}
// OnPut is called when a connection is returned to the pool