in elastictransport/connection.go [126:143]
func (cp *statusConnectionPool) Next() (*Connection, error) {
cp.Lock()
defer cp.Unlock()
// Return next live connection
if len(cp.live) > 0 {
return cp.selector.Select(cp.live)
} else if len(cp.dead) > 0 {
// No live connection is available, resurrect one of the dead ones.
c := cp.dead[len(cp.dead)-1]
cp.dead = cp.dead[:len(cp.dead)-1]
c.Lock()
defer c.Unlock()
cp.resurrect(c, false)
return c, nil
}
return nil, errors.New("no connection available")
}