circuit

package
v1.1.10 Latest Latest
Warning

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

Go to latest
Published: Feb 15, 2026 License: AGPL-3.0 Imports: 9 Imported by: 0

Documentation

Overview

Package circuit provides error constants for circuit breaker operations.

Package circuit provides serverless circuit breaker implementation for federation fault tolerance.

Index

Constants

This section is empty.

Variables

View Source
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

Jump to

Keyboard shortcuts

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