Skip to main content

CircuitBreaker

Struct CircuitBreaker 

Source
pub struct CircuitBreaker { /* private fields */ }
Expand description

A circuit breaker that tracks consecutive failures and temporarily disables execution when a threshold is exceeded.

State transitions:

  • ClosedOpen: when consecutive_failures >= failure_threshold
  • OpenHalfOpen: after open_duration_ms has elapsed
  • HalfOpenClosed: on success
  • HalfOpenOpen: on failure (resets timer)

Designed to be held via Arc<CircuitBreaker> and referenced via Weak<CircuitBreaker> from executors, so the breaker can be dropped independently without leaking memory.

Implementations§

Source§

impl CircuitBreaker

Source

pub fn new(failure_threshold: usize, open_duration_ms: u64) -> Self

Create a new circuit breaker.

  • failure_threshold: number of consecutive failures before opening.
  • open_duration_ms: how long (in milliseconds) to stay open before transitioning to half-open.
Source

pub fn record_success(&self)

Record a successful operation.

Resets the consecutive failure counter and transitions to Closed.

Source

pub fn record_failure(&self)

Record a failed operation.

Increments the failure counter. If the threshold is reached, transitions to Open and records the timestamp.

Source

pub fn is_available(&self) -> bool

Check whether the circuit breaker allows execution.

Returns true if the circuit is Closed or has transitioned from Open to HalfOpen (enough time has passed). Returns false if the circuit is still Open.

When returning true in the HalfOpen state, the caller should proceed with a single trial request and call record_success or record_failure accordingly.

Source

pub fn state(&self) -> CircuitState

Get the current state.

Source

pub fn consecutive_failures(&self) -> usize

Get the current consecutive failure count.

Trait Implementations§

Source§

impl Debug for CircuitBreaker

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more