circuit_breaker

Circuit breaker — closed, open, half-open state machine.

Implements the classic circuit breaker pattern for fault tolerance. Transitions: Closed (normal) → Open (failing) → HalfOpen (recovering).

Usage

let config = circuit_breaker.CircuitConfig(
  failure_threshold: 5,
  recovery_timeout_ms: 30_000,
  half_open_max_calls: 2,
)
let cb = circuit_breaker.new("my_service", config)

// Before calling the service:
case circuit_breaker.is_call_allowed(cb, config) {
  True  -> // proceed
  False -> // fail fast
}

// After success / failure:
let cb = circuit_breaker.record_success(cb, config)
let cb = circuit_breaker.record_failure(cb, config)

Types

pub type CircuitBreaker {
  CircuitBreaker(
    name: String,
    state: CircuitState,
    failure_count: Int,
    success_count: Int,
    last_failure_time_ms: Int,
    cooldown_ms: Int,
  )
}

Constructors

  • CircuitBreaker(
      name: String,
      state: CircuitState,
      failure_count: Int,
      success_count: Int,
      last_failure_time_ms: Int,
      cooldown_ms: Int,
    )
pub type CircuitConfig {
  CircuitConfig(
    failure_threshold: Int,
    recovery_timeout_ms: Int,
    half_open_max_calls: Int,
  )
}

Constructors

  • CircuitConfig(
      failure_threshold: Int,
      recovery_timeout_ms: Int,
      half_open_max_calls: Int,
    )
pub type CircuitState {
  CircuitClosed
  CircuitOpen
  CircuitHalfOpen
}

Constructors

  • CircuitClosed
  • CircuitOpen
  • CircuitHalfOpen

Values

pub fn is_call_allowed(
  breaker: CircuitBreaker,
  config: CircuitConfig,
) -> Bool

Returns True if the circuit allows a call through.

  • Closed: always allowed.
  • Open: allowed only after the recovery timeout has elapsed (transitions to HalfOpen).
  • HalfOpen: allowed while success_count < half_open_max_calls.
pub fn new(name: String, config: CircuitConfig) -> CircuitBreaker

Create a new circuit breaker in the Closed state.

pub fn record_failure(
  breaker: CircuitBreaker,
  config: CircuitConfig,
) -> CircuitBreaker

Record a failed call. Transitions Closed → Open at threshold, HalfOpen → Open immediately.

pub fn record_success(
  breaker: CircuitBreaker,
  config: CircuitConfig,
) -> CircuitBreaker

Record a successful call. Transitions HalfOpen → Closed once enough successes.

pub fn state_name(state: CircuitState) -> String

Return the state name as a string.

Search Document