pub struct Bucket { /* private fields */ }
Expand description

A token bucket object that keeps track of everything related to a key This can be used as a standalone rate limiter; however, to make it more useful it should be wrapped in an Arc and a Mutex to be shared across threads.

Implementations§

source§

impl Bucket

source

pub fn new( label: String, log_info: String, key: String, initial: usize, size: usize, rate: usize, metrics: Option<HistogramVec> ) -> Self

source

pub fn open(label: String) -> Self

A fully open rate limiter, to allow for ignoring rate limiting for tests

source

pub fn acquire_all_tokens( &mut self, requested: usize ) -> Result<(), Option<Instant>>

Determine if an entire batch can be passed through This is important for message based rate limiting, where the whole message has to make it through, or else it must be rejected. A result of None means it cannot ever be allowed through, as it’s bigger than the size of the bucket.

source

pub fn acquire_tokens(&mut self, requested: usize) -> Result<usize, Instant>

Returns usize of tokens allowed. May be less than requested. For best effort, caller should return unused tokens with add_tokens

source

pub fn time_of_next_refill(&self) -> Instant

Tells us when the next refill is

source

pub fn time_of_tokens_needed(&self, requested: usize) -> Option<Instant>

Tells us when an entire batch will make it through. Useful for Async work to wait until all tokens are ready. Returns None if it is never possible.

source

pub fn return_tokens(&mut self, new_tokens: usize)

Returns tokens that were unused

Trait Implementations§

source§

impl Debug for Bucket

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Bucket

§

impl Send for Bucket

§

impl Sync for Bucket

§

impl Unpin for Bucket

§

impl !UnwindSafe for Bucket

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · 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 Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more