Circuit Breaker Simulation

medium · distributed-systems, resilience, sre

Circuit Breaker Simulation

Simulate a simple circuit breaker with states:

  • Closed: requests flow; count consecutive failures.
  • Open: requests are rejected until resetTimeout has elapsed since opening.
  • HalfOpen: allow one probe request; success closes, failure opens.

Rules:

  • In Closed, increment failures on failure; reset to 0 on success.
  • If failures >= failureThreshold, transition to Open and record openedAt.
  • In Open, if event.Time - openedAt < resetTimeout, reject the request. Otherwise transition to HalfOpen and evaluate the request.
  • In HalfOpen, a success -> Closed (failures=0); a failure -> Open (reset openedAt).

Return a slice of booleans indicating whether each request was allowed.

Types

type Event struct {
    Time    int
    Success bool
}

Function signature

func CircuitBreak(events []Event, failureThreshold int, resetTimeout int) []bool

Example

threshold=2, resetTimeout=10
Events: (t=0 fail), (t=1 fail), (t=2 success), (t=12 success)
Allowed: [true, true, false, true]

Constraints

  • 0 <= len(events) <= 100000
  • 0 <= Time <= 1_000_000
  • 1 <= failureThreshold <= 1000
  • 0 <= resetTimeout <= 1_000_000

Notes

  • Events are ordered by time.
Run tests to see results
No issues detected