Fix sentinel error aliasing, hot-path allocations, and resource leaks
- Deduplicate sentinel errors: httpx.ErrNoHealthy, ErrCircuitOpen, and ErrRetryExhausted are now aliases to the canonical sub-package values so errors.Is works across package boundaries - Retry transport returns ErrRetryExhausted only when all attempts are actually exhausted, not on early policy exit - Balancer: pre-parse endpoint URLs at construction, replace req.Clone with cheap shallow struct copy to avoid per-request allocations - Circuit breaker: Load before LoadOrStore to avoid allocating a Breaker on every request for known hosts - Health checker: drain response body before close for connection reuse, probe endpoints concurrently, run initial probe synchronously in Start - Client: add Close() to shut down health checker goroutine, propagate URL resolution errors instead of silently discarding them - MockClock: fix lock ordering in Reset (clock.mu before t.mu), fix timer slice compaction to avoid backing-array aliasing, extract fireExpired to deduplicate Advance/Set
This commit is contained in:
13
error.go
13
error.go
@@ -1,16 +1,21 @@
|
||||
package httpx
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"git.codelab.vc/pkg/httpx/balancer"
|
||||
"git.codelab.vc/pkg/httpx/circuitbreaker"
|
||||
"git.codelab.vc/pkg/httpx/retry"
|
||||
)
|
||||
|
||||
// Sentinel errors returned by httpx components.
|
||||
// These are aliases for the canonical errors defined in sub-packages,
|
||||
// so that errors.Is works regardless of which import the caller uses.
|
||||
var (
|
||||
ErrRetryExhausted = errors.New("httpx: all retry attempts exhausted")
|
||||
ErrCircuitOpen = errors.New("httpx: circuit breaker is open")
|
||||
ErrNoHealthy = errors.New("httpx: no healthy endpoints available")
|
||||
ErrRetryExhausted = retry.ErrRetryExhausted
|
||||
ErrCircuitOpen = circuitbreaker.ErrCircuitOpen
|
||||
ErrNoHealthy = balancer.ErrNoHealthy
|
||||
)
|
||||
|
||||
// Error provides structured error information for failed HTTP operations.
|
||||
|
||||
Reference in New Issue
Block a user