pub struct AutoloadCache { /* private fields */ }Expand description
AutoloadCache — see fields for layout.
Implementations§
Source§impl AutoloadCache
impl AutoloadCache
Sourcepub fn get(&self, name: &str) -> Option<Vec<u8>>
pub fn get(&self, name: &str) -> Option<Vec<u8>>
Raw probe: the chunk for name with only the producing-binary
check applied. dbview autoloads <name> uses it to report
whether an entry exists. NOT for execution — use
AutoloadCache::get_for_source, which also proves the entry
describes the definition text about to be installed.
Sourcepub fn get_for_source(
&self,
name: &str,
source_dir: &str,
source_sha: &[u8; 32],
) -> Option<Vec<u8>>
pub fn get_for_source( &self, name: &str, source_dir: &str, source_sha: &[u8; 32], ) -> Option<Vec<u8>>
The chunk for name, but only if this exact binary compiled it
from this exact definition text found in this exact directory.
Anything else — an edited file, a .zwc digest body, a chunk
from another build, no entry at all — is a miss, and a miss just
means “parse it yourself”.
Sourcepub fn put_one(
&self,
name: &str,
chunk_blob: Vec<u8>,
source_dir: &str,
source_sha: [u8; 32],
) -> Result<(), String>
pub fn put_one( &self, name: &str, chunk_blob: Vec<u8>, source_dir: &str, source_sha: [u8; 32], ) -> Result<(), String>
Buffer one entry from the cold-start path, where a function is autoloaded before compinit pre-warm has cached it.
This used to call put_many with a single entry, which rewrote
the entire shard per autoload. See AutoloadCache::pending for
why that is quadratic in practice. The write now happens in
AutoloadCache::flush_pending, called at the next prompt and
again on exit.
Sourcepub fn flush_pending(&self) -> Result<(), String>
pub fn flush_pending(&self) -> Result<(), String>
Write every buffered entry in one shard rewrite. A no-op when nothing is buffered, so it is cheap to call on every prompt.
On failure the batch is NOT put back: a shard write that failed once (read-only home, full disk) will fail again, and retrying it at every prompt would turn a broken cache into a stall. Dropping the batch only costs a recompile.
The lock is taken WITHOUT blocking. This runs before every prompt,
and the holder may be another process rewriting a shard that has
reached 1 GB, which a debug build takes minutes to do; a blocking
flock here left a new shell with no prompt for that long. When
the lock is busy the batch goes back into the buffer for the next
prompt.
Sourcepub fn put_many(
&self,
entries: &[(String, Vec<u8>, String, [u8; 32])],
) -> Result<(), String>
pub fn put_many( &self, entries: &[(String, Vec<u8>, String, [u8; 32])], ) -> Result<(), String>
Insert many entries in one read + one write of the shard.
The bulk path for zshrs --prewarm-autoloads: compiling 46k
completers one entry at a time would re-serialize the whole
shard 46k times. Existing entries not named here are preserved,
so a prewarm of one fpath dir does not discard the rest.
Sourcepub fn remove(&self, name: &str) -> Result<(), String>
pub fn remove(&self, name: &str) -> Result<(), String>
Drop the entry for name, if there is one.
The loader calls this when a cached chunk ran without defining the function it was stored under — proof the entry is wrong. It has to go, or every later process pays the same failure before falling back.
Sourcepub fn entry_count(&self) -> usize
pub fn entry_count(&self) -> usize
entry_count — see implementation.
Sourcepub fn cached_names(&self) -> HashSet<String>
pub fn cached_names(&self) -> HashSet<String>
Set of cached function names — caller can subtract this from “all known autoload names” to compute the missing-bytecode set without a SQL JOIN.
Auto Trait Implementations§
impl !Freeze for AutoloadCache
impl !RefUnwindSafe for AutoloadCache
impl Send for AutoloadCache
impl Sync for AutoloadCache
impl Unpin for AutoloadCache
impl UnsafeUnpin for AutoloadCache
impl UnwindSafe for AutoloadCache
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
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