pub struct Segment { /* private fields */ }Expand description
A segment’s entries in memory, plus whether they differ from the file they were read from.
super holds one of these per process for the segment this application
writes, and one for the read-only segment a bundle ships. cn export owns
a third directly: the segment it warms into a bundle is one this process
never reads back, so it is built and written as a value rather than through
the process-global tiers.
Implementations§
Source§impl Segment
impl Segment
Sourcepub fn read_from(path: &Path) -> Self
pub fn read_from(path: &Path) -> Self
Read path into memory. An absent, unreadable, or foreign file reads as
an empty segment: whatever it held is regenerated, and the next write
replaces it.
Sourcepub fn get(&mut self, kind: CacheEntryKind, key: &str) -> Option<&[u8]>
pub fn get(&mut self, kind: CacheEntryKind, key: &str) -> Option<&[u8]>
The bytes stored for key, or None when the segment holds no such
entry. Marks the entry used, so a flush does not evict what this run is
running on.
Sourcepub fn put(&mut self, kind: CacheEntryKind, key: &str, bytes: &[u8]) -> bool
pub fn put(&mut self, kind: CacheEntryKind, key: &str, bytes: &[u8]) -> bool
Take bytes as key’s entry, reporting whether the segment took them.
An entry already holding at least as many bytes is left alone. Growth is the only reliable “new content” signal for a driver pipeline blob, which only accumulates but does not serialize deterministically (MoltenVK shuffles entry order run to run), so a byte compare would dirty the segment every launch. A content-addressed artifact re-stored under its own key is by definition the bytes already there.
Sourcepub fn write_to(&mut self, path: &Path, budget: u64) -> bool
pub fn write_to(&mut self, path: &Path, budget: u64) -> bool
Replace path with what the segment now holds, first evicting entries
until its payload fits budget. Reports whether the file was written.
A segment nothing changed is not rewritten: this is where the per-store growth check pays off, since a launch that only read the cache leaves the file untouched.
Auto Trait Implementations§
impl Freeze for Segment
impl RefUnwindSafe for Segment
impl Send for Segment
impl Sync for Segment
impl Unpin for Segment
impl UnsafeUnpin for Segment
impl UnwindSafe for Segment
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more