Skip to main content

RefClosure

Struct RefClosure 

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

The ref-table-closure alkblobs::LivenessSource — the first alkgit-owned liveness source (substrate.md §GC; ADR-019 §6). See the module docs for the walk, the bridge, and the invalidation decision.

Implementations§

Source§

impl RefClosure

Source

pub fn new( front: ObjectFront, rows: Arc<dyn RefRows>, writes: Arc<AtomicU64>, ) -> Arc<Self> ⓘ

The closure source over the object front, the refs rows seam, and the composition’s shared write counter (bumped by the refs writes — crate::refs::VersionedRefTable on the sqlite assembly).

Source

pub fn register(self: &Arc<Self>, store: &Store) -> Result<Registration, Error>

Register the source with the store — the live-shared seam (Store::register_liveness_source; alkblobs store-api.md §Lifecycle). Registered at the composition’s construction; deregistration/re-registration around a direct delete is the ADR-012 §6.4 embedder correction flow (out of scope here).

The composition carries this source for the store’s lifetime (registration once, at construction — the returned token is deregister-at-most-once and is the composition’s to keep).

Source

pub fn keys_builds(&self) -> u64

How many closure walks have run — the memoization pin (a fingerprint hit consumes no walk; the arbitration consult never triggers one).

Trait Implementations§

Source§

impl LivenessSource for RefClosure

Source§

fn live_keys(&self) -> Vec<Key>

The mark-time consult — the whole live set of the refs closure, bridged through the front’s async-context posture (multi-thread runtime floor). Fingerprint hit = no walk; a failed snapshot consult answers empty (the next mark corrects it). The delete leg is not widened by it: arbitration consults this impl’s trait-method contains, which answers against the same memo the failed mark left untouched — the staged pool-wide candidates are guarded by the stale-epoch answer, so the deletion set is the residual class documented in the module docs, not the snapshot failure’s. The alternative postures (blocking or panicking the sweep’s mark) are worse.

Source§

fn contains(&self, key: &Key) -> bool

The delete-time arbitration consult — under the store’s arbitration lock, quick, indexed, never blocking (no bridge, no reads, no recompute):

  • an index hit answers exactly (true — the key was live at the memo’s build);
  • a cold (never-built) memo answers true — the safe default (unknown is live);
  • an index miss after an in-process refs write answers true too — the write counter moved past the build, so the candidate’s coverage state is unknown: cancel it now, let the next mark’s rebuild decide. A ref delete between mark and arbitration lands here the safe way too (kept one more sweep, reclaimed after the rebuilt mark confirms).

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

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