pub struct RateLimiter {
pub(crate) inner: ArcSwap<Box<dyn RateLimiterTrait>>,
}
Expand description
A rate limiter that supports multiple rate limit policy and online policy switch.
Fields§
§inner: ArcSwap<Box<dyn RateLimiterTrait>>
Implementations§
source§impl RateLimiter
impl RateLimiter
pub(crate) fn new_inner(rate_limit: RateLimit) -> Box<dyn RateLimiterTrait>
sourcepub fn new(rate_limit: RateLimit) -> Self
pub fn new(rate_limit: RateLimit) -> Self
Create a new rate limiter with given rate limit policy.
sourcepub fn update(&self, rate_limit: RateLimit) -> RateLimit
pub fn update(&self, rate_limit: RateLimit) -> RateLimit
Update rate limit policy of the rate limiter.
Returns the old rate limit policy.
sourcepub fn monitored(self, table_id: impl Into<TableId>) -> MonitoredRateLimiter
pub fn monitored(self, table_id: impl Into<TableId>) -> MonitoredRateLimiter
Monitor the rate limiter with related table id.
pub fn rate_limit(&self) -> RateLimit
pub fn check(&self, quota: u64) -> Check
pub async fn wait(&self, quota: u64)
Trait Implementations§
source§impl RateLimiterTrait for RateLimiter
impl RateLimiterTrait for RateLimiter
source§fn rate_limit(&self) -> RateLimit
fn rate_limit(&self) -> RateLimit
Return current throttle policy.
source§fn check(&self, quota: u64) -> Check
fn check(&self, quota: u64) -> Check
Check if the request with the given quota is supposed to be allowed at the moment.
On success, the quota will be consumed. Check::Ok
is returned.
The caller is supposed to proceed the request with the given quota.
On failure, Check::Retry
or Check::RetryAfter
is returned.
The caller is supposed to retry the check after the given duration or retry after receiving the signal.
Auto Trait Implementations§
impl !Freeze for RateLimiter
impl !RefUnwindSafe for RateLimiter
impl Send for RateLimiter
impl Sync for RateLimiter
impl Unpin 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
Mutably borrows from an owned value. Read more
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§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> 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>
Converts
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>
Converts
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 moresource§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
§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
type Err = Infallible
fn into_result(self) -> Result<T, <T as IntoResult<T>>::Err>
source§impl<M> MetricVecRelabelExt for M
impl<M> MetricVecRelabelExt for M
source§fn relabel(
self,
metric_level: MetricLevel,
relabel_threshold: MetricLevel,
) -> RelabeledMetricVec<M>
fn relabel( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>
Equivalent to
RelabeledMetricVec::with_metric_level
.source§fn relabel_n(
self,
metric_level: MetricLevel,
relabel_threshold: MetricLevel,
relabel_num: usize,
) -> RelabeledMetricVec<M>
fn relabel_n( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, relabel_num: usize, ) -> RelabeledMetricVec<M>
Equivalent to
RelabeledMetricVec::with_metric_level_relabel_n
.source§fn relabel_debug_1(
self,
relabel_threshold: MetricLevel,
) -> RelabeledMetricVec<M>
fn relabel_debug_1( self, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>
Equivalent to
RelabeledMetricVec::with_metric_level_relabel_n
with metric_level
set to
MetricLevel::Debug
and relabel_num
set to 1.