pub struct RateLimiter { /* private fields */ }Implementations§
Source§impl RateLimiter
impl RateLimiter
pub fn new(rps: f64) -> Self
Sourcepub fn set_default_rps(&self, rps: f64)
pub fn set_default_rps(&self, rps: f64)
Replace the default per-service interval. Existing per-service
entries created via Self::update_limit are left at their
override; only the lazily-created defaults pick up the new pace.
Non-finite or non-positive rps falls back to 1.0 - the same
guard as new() so a caller can’t drive the limiter into a
zero-interval (= infinite-rate) state by accident.
Sourcepub fn default_interval(&self) -> Duration
pub fn default_interval(&self) -> Duration
Default interval as a Duration. Lock-free.
pub async fn wait(&self, service: &str)
pub fn record_error(&self)
pub fn record_success(&self)
Sourcepub async fn update_limit(&self, service: &str, rps: f64)
pub async fn update_limit(&self, service: &str, rps: f64)
Configure a service’s TARGET rate (the base_interval AIMD recovers to).
A config change resets any in-flight backoff: interval == base_interval.
Sourcepub fn penalize_service(&self, service: &str)
pub fn penalize_service(&self, service: &str)
Multiplicative-decrease: a 429 for service slows it by
[RATE_LIMIT_BACKOFF_MULTIPLIER], capped at
max(RATE_LIMIT_MAX_INTERVAL, base_interval) (never faster than the
configured base). If the service has no slot yet, one is created at the
default pace already backed off once. Takes effect on the next
Self::wait. Recovery is driven by Self::reward_service on success.
Sourcepub fn reward_service(&self, service: &str)
pub fn reward_service(&self, service: &str)
Additive-increase: a successful round-trip for service recovers
base_interval / RATE_LIMIT_RECOVERY_STEP_DIVISOR of its backoff, floored
at base_interval (never faster than configured). No-op when the service
has no slot or is already at base (cheap to call on every success).
Sourcepub fn service_interval(&self, service: &str) -> Option<Duration>
pub fn service_interval(&self, service: &str) -> Option<Duration>
Current working inter-request interval for service, or None if the
service has no slot yet. Introspection of the live AIMD state (used by the
recovery regression test and available for operator diagnostics).
Auto Trait Implementations§
impl !Freeze for RateLimiter
impl !RefUnwindSafe for RateLimiter
impl Send for RateLimiter
impl Sync for RateLimiter
impl Unpin for RateLimiter
impl UnsafeUnpin for RateLimiter
impl UnwindSafe for RateLimiter
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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> 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