Skip to main content

AdaptiveBandwidthAllocator

Struct AdaptiveBandwidthAllocator 

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

Adaptive bandwidth manager that dynamically allocates bandwidth across peers.

Tracks per-peer profiles, maintains a bounded event history, and supports five allocation policies via AdaptiveBandwidthAllocator::reallocate.

Implementations§

Source§

impl AdaptiveBandwidthAllocator

Source

pub const MAX_EVENT_HISTORY: usize = 200

Maximum number of events retained in the history ring-buffer.

Source

pub fn new(config: AllocatorConfig) -> Self

Create a new allocator with the given configuration.

Returns AllocatorError::InvalidConfiguration if the config is logically inconsistent.

Source

pub fn advance_time(&mut self, delta_ms: u64)

Advance the internal clock by delta_ms milliseconds. Useful in testing to create distinct timestamps without real-time delays.

Source

pub fn add_peer( &mut self, peer_id: String, class: BandwidthClass, initial_bps: u64, ) -> Result<(), AllocatorError>

Add a peer with an initial bandwidth class and desired allocation.

Returns AllocatorError::AllocationExceedsCapacity if adding this allocation would exceed total_capacity_bps.

Source

pub fn remove_peer( &mut self, peer_id: &str, ) -> Result<PeerBandwidthProfile, AllocatorError>

Remove a peer and release its bandwidth allocation.

Returns the removed PeerBandwidthProfile or AllocatorError::PeerNotFound.

Source

pub fn update_measurement( &mut self, peer_id: &str, used_bps: u64, latency_ms: u64, packet_loss_ppm: u32, ) -> Result<BandwidthEvent, AllocatorError>

Record a live measurement for a peer.

Updates the rolling BandwidthWindow, stores latency and loss, and emits a BandwidthEvent::CongestionDetected when loss_ppm exceeds the configured threshold.

Returns the most pertinent event for the caller’s convenience.

Source

pub fn reallocate(&mut self) -> Vec<BandwidthEvent>

Rebalance all peer allocations according to the configured policy.

Returns the list of BandwidthEvents produced (one AllocationRevised event at minimum, plus any CongestionDetected events for peers that are still over threshold after rebalancing).

Source

pub fn get_allocation(&self, peer_id: &str) -> Result<u64, AllocatorError>

Return the current allocated bps for the given peer.

Source

pub fn stats(&self) -> BandwidthStats

Return aggregate statistics including Jain’s fairness index.

Source

pub fn congested_peers(&self) -> Vec<String>

Return peer IDs for all peers whose packet_loss_ppm exceeds the threshold.

Source

pub fn events_since(&self, since_ms: u64) -> Vec<BandwidthEvent>

Return all events with timestamp >= since_ms.

Source

pub fn drain_events(&mut self) -> Vec<BandwidthEvent>

Drain and return all buffered events, leaving the history empty.

Source

pub fn peer_profile(&self, peer_id: &str) -> Option<&PeerBandwidthProfile>

Return a reference to the profile for peer_id, if present.

Source

pub fn peer_count(&self) -> usize

Return the number of tracked peers.

Source

pub fn total_capacity_bps(&self) -> u64

Return the total capacity configured for this allocator.

Source

pub fn config(&self) -> &AllocatorConfig

Return a reference to the current configuration.

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