Skip to main content

ScheduledSplit

Struct ScheduledSplit 

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

Divides one invocation’s ScheduledLimits across its modules, in order, with every module’s unspent share rolling forward to the ones after it.

The split is even by construction, not by outcome: module n of m gets the wall time that is left divided by the modules still to run, and the subrequests still left divided the same way (rounded up). The invariant is on spend, not on the shares: shares overlap, because an unspent share rolls forward and is granted again to the modules after it, but every subrequest a module actually spends is subtracted from the pool at settle — so cumulative spend never passes the limit. A module that spends nothing simply leaves its share in the pool for the next module.

Implementations§

Source§

impl ScheduledSplit

Source

pub fn new(limits: ScheduledLimits, now: OffsetDateTime, modules: usize) -> Self

A split of limits across modules modules, starting at now. now is read only when limits bounds wall time.

Source

pub fn next(&mut self, now: OffsetDateTime) -> ScheduledBudget

The budget for the next module: the time left divided by the modules still to run, and the subrequests left divided the same way (rounded up, so a share never names more steps than the pool holds, and the last module is left with at least what remains). Called once per module, in order.

Source

pub fn settle(&mut self, budget: &ScheduledBudget)

Accounts for the module that just ran: its unspent subrequests roll back into the pool for the modules still to come, and one fewer module is waiting. Unspent wall time needs no accounting — the next next recomputes it from the clock.

Trait Implementations§

Source§

impl Debug for ScheduledSplit

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

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<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<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> 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 = !

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

fn try_from(value: U) -> Result<T, !>

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<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