mirror of
				https://github.com/redis/go-redis.git
				synced 2025-11-04 02:33:24 +03:00 
			
		
		
		
	fix(pool): Pool ReAuth should not interfere with handoff (#3547)
* fix(pool): wip, pool reauth should not interfere with handoff * fix credListeners map * fix race in tests * better conn usable timeout * add design decision comment * few small improvements * update marked as queued * add Used to clarify the state of the conn * rename test * fix(test): fix flaky test * lock inside the listeners collection * address pr comments * Update internal/auth/cred_listeners.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update internal/pool/buffer_size_test.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * wip refactor entraid * fix maintnotif pool hook * fix mocks * fix nil listener * sync and async reauth based on conn lifecycle * be able to reject connection OnGet * pass hooks so the tests can observe reauth * give some time for the background to execute commands * fix tests * only async reauth * Update internal/pool/pool.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update internal/auth/streaming/pool_hook.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update internal/pool/conn.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * chore(redisotel): use metric.WithAttributeSet to avoid copy (#3552) In order to improve performance replace `WithAttributes` with `WithAttributeSet`. This avoids the slice allocation and copy that is done in `WithAttributes`. For more information see https://github.com/open-telemetry/opentelemetry-go/blob/v1.38.0/metric/instrument.go#L357-L376 * chore(docs): explain why MaxRetries is disabled for ClusterClient (#3551) Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com> * exponential backoff * address pr comments * address pr comments * remove rlock * add some comments * add comments --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Warnar Boekkooi <wboekkooi@impossiblecloud.com> Co-authored-by: Justin <justindsouza80@gmail.com>
This commit is contained in:
		@@ -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
 | 
			
		||||
@@ -174,6 +174,10 @@ func (ph *PoolHook) OnPut(ctx context.Context, conn *pool.Conn) (shouldPool bool
 | 
			
		||||
	return true, false, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (ph *PoolHook) OnRemove(_ context.Context, _ *pool.Conn, _ error) {
 | 
			
		||||
	// Not used
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Shutdown gracefully shuts down the processor, waiting for workers to complete
 | 
			
		||||
func (ph *PoolHook) Shutdown(ctx context.Context) error {
 | 
			
		||||
	return ph.workerManager.shutdownWorkers(ctx)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user