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§
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: usizeCount 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
impl Clone for ChildAdmission
Source§fn clone(&self) -> ChildAdmission
fn clone(&self) -> ChildAdmission
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more