Skip to main content

BandwidthBudgetManager

Struct BandwidthBudgetManager 

Source
pub struct BandwidthBudgetManager { /* private fields */ }
Expand description

Per-peer token-bucket bandwidth manager.

Call refill or refill_all periodically (or lazily before each consume call) to add tokens, then use try_consume_upload / try_consume_download to request bandwidth.

Implementations§

Source§

impl BandwidthBudgetManager

Source

pub fn new(config: BudgetConfig) -> Self

Creates a new manager with the supplied configuration.

Source

pub fn register_peer(&mut self, peer_id: &str, now: u64)

Registers a peer using the default quota.

If the peer is already registered this is a no-op.

Source

pub fn register_peer_with_quota( &mut self, peer_id: &str, quota: BandwidthQuota, now: u64, )

Registers a peer with a custom quota, overriding the default.

If the peer already exists its quota is replaced and tokens are re-initialised.

Source

pub fn refill(&mut self, peer_id: &str, now: u64)

Refills the token bucket for a single peer based on elapsed time.

Does nothing if the peer is not registered or now is not later than the peer’s last_refill timestamp.

Source

pub fn refill_all(&mut self, now: u64)

Refills token buckets for all registered peers.

Source

pub fn try_consume_upload( &mut self, peer_id: &str, bytes: u64, now: u64, ) -> bool

Attempts to consume bytes of upload bandwidth for peer_id.

Returns true and deducts tokens when:

  1. The peer is registered,
  2. The peer has enough upload tokens,
  3. The global upload cap has not been reached.

Returns false (and does not deduct tokens) in all other cases.

Source

pub fn try_consume_download( &mut self, peer_id: &str, bytes: u64, now: u64, ) -> bool

Attempts to consume bytes of download bandwidth for peer_id.

Returns true and deducts tokens when:

  1. The peer is registered,
  2. The peer has enough download tokens,
  3. The global download cap has not been reached.

Returns false (and does not deduct tokens) in all other cases.

Source

pub fn remaining_upload(&self, peer_id: &str) -> u64

Returns the number of remaining upload tokens for peer_id, floored to 0.

Returns 0 for unknown peers.

Source

pub fn remaining_download(&self, peer_id: &str) -> u64

Returns the number of remaining download tokens for peer_id, floored to 0.

Returns 0 for unknown peers.

Source

pub fn remove_peer(&mut self, peer_id: &str) -> bool

Removes a peer from the manager.

Returns true if the peer existed, false otherwise.

Source

pub fn peer_count(&self) -> usize

Returns the number of currently registered peers.

Source

pub fn stats(&self) -> &BudgetStats

Returns a reference to the aggregate statistics.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

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 T
where U: From<T>,

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> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

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

Source§

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

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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