resilience

package
v1.0.142 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 21, 2026 License: MIT Imports: 9 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrCircuitBreakerOpen    = errors.New("circuit breaker is open")
	ErrCircuitBreakerTimeout = errors.New("circuit breaker operation timeout")
	ErrTooManyFailures       = errors.New("too many consecutive failures")
)

Functions

func DefaultRetryableErrors

func DefaultRetryableErrors(err error) bool

DefaultRetryableErrors determines if an error is retryable by default

func ExponentialBackoff

func ExponentialBackoff(ctx context.Context, maxRetries int, initialBackoff time.Duration, fn RetryableFunc) error

ExponentialBackoff is a convenience function for exponential backoff retry

func LinearBackoff

func LinearBackoff(ctx context.Context, maxRetries int, backoffDuration time.Duration, fn RetryableFunc) error

LinearBackoff is a convenience function for linear backoff retry

func Retry

func Retry(ctx context.Context, config RetryConfig, fn RetryableFunc) error

Retry executes a function with retry logic

func RetryWithCircuitBreaker

func RetryWithCircuitBreaker(ctx context.Context, retryConfig RetryConfig, circuitBreaker *CircuitBreaker, fn RetryableFunc) error

RetryWithCircuitBreaker combines retry logic with circuit breaker

Types

type CircuitBreaker

type CircuitBreaker struct {
	// contains filtered or unexported fields
}

CircuitBreaker implements the circuit breaker pattern for fault tolerance

func NewCircuitBreaker

func NewCircuitBreaker(config CircuitBreakerConfig) *CircuitBreaker

NewCircuitBreaker creates a new circuit breaker with the given configuration

func (*CircuitBreaker) Execute

func (cb *CircuitBreaker) Execute(ctx context.Context, fn func() error) error

Execute wraps a function call with circuit breaker logic

func (*CircuitBreaker) Failures

func (cb *CircuitBreaker) Failures() int

Failures returns the current failure count

func (*CircuitBreaker) Reset

func (cb *CircuitBreaker) Reset()

Reset manually resets the circuit breaker to closed state

func (*CircuitBreaker) State

func (cb *CircuitBreaker) State() CircuitBreakerState

State returns the current state of the circuit breaker

func (*CircuitBreaker) Stats

func (cb *CircuitBreaker) Stats() CircuitBreakerStats

Stats returns current statistics

func (*CircuitBreaker) Successes

func (cb *CircuitBreaker) Successes() int

Successes returns the current success count (only relevant in half-open state)

func (*CircuitBreaker) TransitionToHalfOpen

func (cb *CircuitBreaker) TransitionToHalfOpen()

TransitionToHalfOpen transitions the circuit breaker to half-open state

type CircuitBreakerConfig

type CircuitBreakerConfig struct {
	// MaxFailures is the maximum number of failures before opening the circuit
	MaxFailures int

	// Timeout is how long to wait before transitioning from Open to Half-Open
	Timeout time.Duration

	// MaxConcurrentRequests is the max requests allowed in Half-Open state
	MaxConcurrentRequests int

	// SuccessThreshold is the number of consecutive successes needed in Half-Open to go to Closed
	SuccessThreshold int

	// RequestTimeout is the maximum time to wait for a single request
	RequestTimeout time.Duration
}

CircuitBreakerConfig defines configuration for the circuit breaker

func DefaultCircuitBreakerConfig

func DefaultCircuitBreakerConfig() CircuitBreakerConfig

DefaultCircuitBreakerConfig returns a default configuration

type CircuitBreakerState

type CircuitBreakerState int32

CircuitBreakerState represents the state of a circuit breaker

const (
	StateClosed CircuitBreakerState = iota
	StateHalfOpen
	StateOpen
)

func (CircuitBreakerState) String

func (s CircuitBreakerState) String() string

type CircuitBreakerStats

type CircuitBreakerStats struct {
	State     CircuitBreakerState
	Failures  int
	Successes int
	Requests  int
}

Stats returns statistics about the circuit breaker

type RetryConfig

type RetryConfig struct {
	// MaxRetries is the maximum number of retry attempts
	MaxRetries int

	// InitialBackoff is the initial backoff duration
	InitialBackoff time.Duration

	// MaxBackoff is the maximum backoff duration
	MaxBackoff time.Duration

	// BackoffMultiplier is the multiplier for exponential backoff
	BackoffMultiplier float64

	// Jitter adds randomness to backoff to avoid thundering herd
	Jitter bool

	// RetryableErrors is a function that determines if an error is retryable
	RetryableErrors func(error) bool
}

RetryConfig defines configuration for retry logic

func DefaultRetryConfig

func DefaultRetryConfig() RetryConfig

DefaultRetryConfig returns a default retry configuration

type RetryStats

type RetryStats struct {
	TotalAttempts   int
	SuccessfulCalls int
	FailedCalls     int
	TotalRetries    int
	AverageBackoff  time.Duration
	LastError       error
}

RetryStats tracks retry statistics

func RetryWithStats

func RetryWithStats(ctx context.Context, config RetryConfig, fn RetryableFunc) (RetryStats, error)

RetryWithStats executes a function with retry logic and tracks statistics

type RetryableFunc

type RetryableFunc func() error

RetryableFunc is a function that can be retried

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL