pub struct LfsMedia { /* private fields */ }Expand description
The LFS-media alkblobs::LivenessSource — the second
alkgit-owned liveness source (substrate.md §GC source 2; ADR-022
§4): the pointer-lifecycle rows as the media family’s live set, a
mark consult that reads the rows (no graph walk) and an arbitration
consult that answers from the mark’s index. See the module docs’
LFS section for the walk-not-walk posture, the invalidation
decision, and the cross-process residual.
Implementations§
Source§impl LfsMedia
impl LfsMedia
Sourcepub fn new(rows: Arc<dyn LfsRows>, writes: Arc<AtomicU64>) -> Arc<Self> ⓘ
pub fn new(rows: Arc<dyn LfsRows>, writes: Arc<AtomicU64>) -> Arc<Self> ⓘ
The source over the rows surface and the composition’s shared
assert counter (the VersionedLfsRows
wrapper bumps the same counter per committed assert through
it — the bump-after-commit half of the epoch discipline).
Construct within the running runtime (the assembly does): the
constructor captures Handle::current() for the mark consult’s
bridge.
Sourcepub fn register(self: &Arc<Self>, store: &Store) -> Result<Registration, Error>
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;
the composition entry’s second registration leg, the fail-safe
default ADR-022 §6: an unregistered media source lets sweeps
eat referenced media on the first mixed-feature deployment).
Registration once, at construction; the returned token is
deregister-at-most-once and is the composition’s to keep.
Sourcepub fn keys_builds(&self) -> u64
pub fn keys_builds(&self) -> u64
How many mark consults have run — the rebuild-per-mark posture’s pin (no fingerprint memo: every mark consult re-reads the rows; the arbitration consult never triggers one).
Trait Implementations§
Source§impl LivenessSource for LfsMedia
Available on crate feature lfs only.
impl LivenessSource for LfsMedia
lfs only.Source§fn live_keys(&self) -> Vec<Key>
fn live_keys(&self) -> Vec<Key>
The mark-time consult — rebuild-per-mark (the module docs’ LFS section; the row read is the whole walk). A failed rows read answers empty with the memo untouched: the staged candidates arbitrate against the stale index (the previous mark’s) — conservative for keys live at that build, and the next mark corrects. The alternative postures (blocking or panicking the sweep’s mark) are worse.
Source§fn contains(&self, key: &Key) -> bool
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 last mark); - a cold (never-marked) source answers
true— the safe default (unknown is live); direct deletes under it refuse (alkblobs::Error::GcRefuse, the ADR-012 §6.4 flow); - an index miss after a moved assert counter answers
truetoo — a row may have landed since the build (unknown is live): the candidate cancels and resolves on the next mark’s rebuild, one delayed sweep.