Crate failsafe

source ·
Expand description

CircuitBreaker is used to detect failures and encapsulates the logic of preventing a failure from constantly recurring, during maintenance, temporary external system failure or unexpected system difficulties.


Using default backoff strategy and failure accrual policy.

use rand::{thread_rng, Rng};
use failsafe::{Config, CircuitBreaker, Error};

// A function that sometimes failed.
fn dangerous_call() -> Result<(), ()> {
  if thread_rng().gen_range(0..2) == 0 {
    return Err(())

// Create a circuit breaker which configured by reasonable default backoff and
// failure accrual policy.
let circuit_breaker = Config::new().build();

// Call the function in a loop, after some iterations the circuit breaker will
// be in a open state and reject next calls.
for n in 0..100 {
  match|| dangerous_call()) {
    Err(Error::Inner(_)) => {
      eprintln!("{}: fail", n);
    Err(Error::Rejected) => {
       eprintln!("{}: rejected", n);
    _ => {}

Or configure custom backoff and policy:

use std::time::Duration;
use failsafe::{backoff, failure_policy, Config, CircuitBreaker};

fn circuit_breaker() -> impl CircuitBreaker {
  // Create an exponential growth backoff which starts from 10s and ends with 60s.
  let backoff = backoff::exponential(Duration::from_secs(10), Duration::from_secs(60));

  // Create a policy which failed when three consecutive failures were made.
  let policy = failure_policy::consecutive_failures(3, backoff);

  // Creates a circuit breaker with given policy.



  • Contains various backoff strategies.
  • Contains various failure accrual policies, which are used for the failure rate detection.
  • Futures aware circuit breaker.


  • the Any predicate always returns true
  • A CircuitBreaker’s configuration.
  • A circuit breaker implementation backed by state machine.
  • Time windowed counter.


  • A CircuitBreaker’s error.


  • A circuit breaker’s public interface.
  • Evaluates if an error should be recorded as a failure and thus increase the failure rate.
  • Consumes the state machine events. May used for metrics and/or logs.