Skip to main content

ChildAdmission

Struct ChildAdmission 

Source
pub struct ChildAdmission {
    pub share_bps: u16,
    pub holders: usize,
}
Expand description

A single admitted child edge: the share it claimed plus a reference count of the active evaluations currently holding it.

The share is charged against the parent as long as the edge exists. The holders refcount exists because the registry stores exactly ONE edge per (parent, child) pair, yet OVERLAPPING evaluations of the same delegated capability each depend on that single edge concurrently. A boolean “who inserted it” owner is unsound: if the inserting evaluation is cancelled it would free the edge while a re-admitting sibling evaluation still holds the capability, letting an oversubscribing sibling be admitted against the wrongly-returned share. Every AdmitMode::Lease admit (fresh insert OR idempotent re-admit) takes one lease (holders += 1); every release drops one (holders -= 1). The edge is freed - and its share returned to the parent - only when the LAST real holder releases (holders reaches 0).

holders counts ONLY live releasable holders. An edge can legitimately have holders == 0: a verifier-only surface (see AdmitMode::VerifyOnly) commits a fresh child’s share for sibling-sum accounting without acquiring a lease, because it has no cleanup path that would ever release one. Such a committed edge is never pinned past its real holders: a later real dispatch that leases it (0 -> 1) and releases (1 -> 0) frees the edge, and a verify-only re-admit never touches the count.

Fields§

§share_bps: u16

The share this child claimed when it was first admitted, in basis points. Every lease on this edge shares the same recorded value; a re-admit with a different share is rejected as a BudgetSplitError.

§holders: usize

Count of active evaluations holding a lease on this edge. Access is serialized by the registry’s lock, so a plain counter (rather than an atomic) is sufficient: the increment/decrement is always performed inside the same critical section as the insert/remove decision.

Trait Implementations§

Source§

impl Clone for ChildAdmission

Source§

fn clone(&self) -> ChildAdmission

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ChildAdmission

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Eq for ChildAdmission

Source§

impl PartialEq for ChildAdmission

Source§

fn eq(&self, other: &ChildAdmission) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for ChildAdmission

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.