Skip to main content

CircuitBreaker

Struct CircuitBreaker 

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

Tokens-per-window circuit breaker.

Every failed request consumes one token from a fixed budget. When the budget hits zero, the breaker trips and rejects requests without touching the network until the window elapses. On window rollover, the budget refills.

This model matches the AWS-style “sliding-window” limiter used by Envoy and many production OTLP collectors: cheap to compute, no per-request coordination, and cleanly recovers after a failure storm.

Implementations§

Source§

impl CircuitBreaker

Source

pub fn new(budget: u32, window: Duration) -> Self

New breaker with the given failure budget per window.

Source

pub fn allow(&self) -> bool

Should the caller attempt this request?

Returns true if the breaker is closed (tokens available or window has rolled over) and false if the breaker is tripped for the current window.

Source

pub fn record_failure(&self)

Report a failed request. Consumes one token if any are left.

Source

pub fn record_success(&self)

Report a successful request. Optional but improves accuracy: a successful call restores the failure budget by one token, modelling the fact that the collector is healthy.

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, 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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.