Documentation
¶
Overview ¶
Package circuit provides error constants for circuit breaker operations.
Package circuit provides serverless circuit breaker implementation for federation fault tolerance.
Index ¶
- Variables
- type CircuitBreakerRepository
- type ServerlessCircuitBreaker
- func (cb *ServerlessCircuitBreaker) CanAttempt(ctx context.Context, instanceID string) bool
- func (cb *ServerlessCircuitBreaker) GetMetrics(ctx context.Context, instanceID string) map[string]any
- func (cb *ServerlessCircuitBreaker) GetStatus(ctx context.Context, instanceID string) types.CircuitStatus
- func (cb *ServerlessCircuitBreaker) IsOpen(ctx context.Context, instanceID string) bool
- func (cb *ServerlessCircuitBreaker) RecordFailure(ctx context.Context, instanceID string, err error) error
- func (cb *ServerlessCircuitBreaker) RecordSuccess(ctx context.Context, instanceID string) error
Constants ¶
This section is empty.
Variables ¶
var ( // ErrInvalidStateTransition is returned when attempting an invalid state transition ErrInvalidStateTransition = errors.NewFederationError(errors.CodeInvalidStateTransition, "invalid circuit breaker state transition") )
Circuit breaker error constants
Functions ¶
This section is empty.
Types ¶
type CircuitBreakerRepository ¶
type CircuitBreakerRepository interface {
GetCircuitState(ctx context.Context, instanceID string) (*models.CircuitBreakerState, error)
SaveCircuitState(ctx context.Context, state *models.CircuitBreakerState) error
UpdateCircuitState(ctx context.Context, instanceID string, updateFn func(*models.CircuitBreakerState) error) (*models.CircuitBreakerState, error)
RecordEvent(ctx context.Context, event *models.CircuitBreakerEvent) error
RecordStateChange(ctx context.Context, instanceID, oldStatus, newStatus, reason string) error
RecordMetric(ctx context.Context, instanceID string, success bool, err error, errorType string) error
GetRecentEvents(ctx context.Context, instanceID string, limit int) ([]*models.CircuitBreakerEvent, error)
DeleteCircuitState(ctx context.Context, instanceID string) error
GetAllCircuitStates(ctx context.Context) ([]*models.CircuitBreakerState, error)
}
CircuitBreakerRepository interface for dependency injection and testing
type ServerlessCircuitBreaker ¶
type ServerlessCircuitBreaker struct {
// contains filtered or unexported fields
}
ServerlessCircuitBreaker implements circuit breaker pattern for serverless environments No in-memory state, no background goroutines, purely event-driven
func NewServerlessCircuitBreaker ¶
func NewServerlessCircuitBreaker(repo CircuitBreakerRepository, config *models.CircuitBreakerConfig, logger *zap.Logger) *ServerlessCircuitBreaker
NewServerlessCircuitBreaker creates a new serverless circuit breaker
func (*ServerlessCircuitBreaker) CanAttempt ¶
func (cb *ServerlessCircuitBreaker) CanAttempt(ctx context.Context, instanceID string) bool
CanAttempt checks if a request can be attempted Handles automatic state transitions from open -> half-open
func (*ServerlessCircuitBreaker) GetMetrics ¶
func (cb *ServerlessCircuitBreaker) GetMetrics(ctx context.Context, instanceID string) map[string]any
GetMetrics returns circuit breaker metrics
func (*ServerlessCircuitBreaker) GetStatus ¶
func (cb *ServerlessCircuitBreaker) GetStatus(ctx context.Context, instanceID string) types.CircuitStatus
GetStatus returns the current circuit status
func (*ServerlessCircuitBreaker) IsOpen ¶
func (cb *ServerlessCircuitBreaker) IsOpen(ctx context.Context, instanceID string) bool
IsOpen checks if the circuit is open for the given instance This is the main entry point - evaluates state on-demand
func (*ServerlessCircuitBreaker) RecordFailure ¶
func (cb *ServerlessCircuitBreaker) RecordFailure(ctx context.Context, instanceID string, err error) error
RecordFailure records a failed request and handles state transitions
func (*ServerlessCircuitBreaker) RecordSuccess ¶
func (cb *ServerlessCircuitBreaker) RecordSuccess(ctx context.Context, instanceID string) error
RecordSuccess records a successful request and handles state transitions