pub struct CircuitBreaker { /* private fields */ }Implementations§
Source§impl CircuitBreaker
impl CircuitBreaker
Sourcepub const fn const_new(failure_threshold: u32, cooldown_millis: u64) -> Self
pub const fn const_new(failure_threshold: u32, cooldown_millis: u64) -> Self
const-friendly constructor used by the #[circuit_breaker] macro.
Sourcepub const fn const_named(
name: &'static str,
failure_threshold: u32,
cooldown_millis: u64,
) -> Self
pub const fn const_named( name: &'static str, failure_threshold: u32, cooldown_millis: u64, ) -> Self
Named variant — the name labels circuit_breaker_transitions_total
and the state-change logs.
pub fn state(&self) -> u8
Sourcepub async fn execute<F, Fut, T, E>(
&self,
action: F,
) -> Result<Result<T, E>, BreakerOpen>
pub async fn execute<F, Fut, T, E>( &self, action: F, ) -> Result<Result<T, E>, BreakerOpen>
Execute action under breaker supervision.
State machine (all transitions are single CAS operations — no locks):
- CLOSED: calls flow;
failure_thresholdconsecutive-window failures trip to OPEN (cooldown timestamp recorded). - OPEN: rejected with
BreakerOpenuntil the cooldown elapses; then exactly one caller (theOPEN→HALF_OPENCAS winner) proceeds as the probe. Everyone else keeps gettingBreakerOpen— a recovering dependency is never thundering-herded. - HALF_OPEN: the probe’s outcome decides — success closes the breaker (counters reset), failure re-opens it with a fresh cooldown.
Auto Trait Implementations§
impl !Freeze for CircuitBreaker
impl RefUnwindSafe for CircuitBreaker
impl Send for CircuitBreaker
impl Sync for CircuitBreaker
impl Unpin for CircuitBreaker
impl UnsafeUnpin for CircuitBreaker
impl UnwindSafe for CircuitBreaker
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request