pub struct RetryBudget { /* private fields */ }Expand description
Per-upstream rolling-window retry budget. Share via Arc from the
upstream handle; the lock is taken once per proxied request (record)
and once per retry decision (reserve) — never per attempt frame.
Implementations§
Source§impl RetryBudget
impl RetryBudget
Sourcepub fn with_clock(window_ms: u64, now_ms: fn() -> u64) -> Self
pub fn with_clock(window_ms: u64, now_ms: fn() -> u64) -> Self
New budget with a caller-supplied millisecond clock (Unix epoch). Intended for tests; production keeps the system clock.
Sourcepub fn record_request(&self)
pub fn record_request(&self)
Record one proxied request (the denominator of the budget ratio). Called once per request, never per attempt.
Sourcepub fn try_reserve_retry(&self, percent: u32) -> bool
pub fn try_reserve_retry(&self, percent: u32) -> bool
Whether a retry may be issued under percent, charging it
atomically (check + record under one lock acquisition) so the
in-window invariant retries * 100 <= percent * requests is never
exceeded, even under concurrent retries. requests counts the
ORIGINAL proxied requests only (retry events are excluded from the
denominator — the budget bounds retries as a share of real
traffic). The candidate retry is charged BEFORE it runs: allowing
requires (retries + 1) * 100 <= percent * requests to hold
already, so a fresh window with little volume grants few or no
retries rather than a burst.
Trait Implementations§
Source§impl Debug for RetryBudget
impl Debug for RetryBudget
Auto Trait Implementations§
impl !Freeze for RetryBudget
impl !RefUnwindSafe for RetryBudget
impl Send for RetryBudget
impl Sync for RetryBudget
impl Unpin for RetryBudget
impl UnwindSafe for RetryBudget
Blanket Implementations§
§impl<T> AnyExt for T
impl<T> AnyExt for T
§fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
T behind reference§fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
T behind mutable reference§fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
T behind Rc pointer§fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
T behind Arc pointer§fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
T behind Box pointer§fn downcast_move<T>(this: Self) -> Option<T>
fn downcast_move<T>(this: Self) -> Option<T>
Self to T,
useful only in generic context as a workaround for specializationSource§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
§impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
fn coerce_rc_to(self: Rc<X>) -> Rc<T>
fn coerce_box_to(self: Box<X>) -> Box<T>
fn coerce_ref_to(&self) -> &T
fn coerce_mut_to(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more