Skip to main content

ArtifactCache

Struct ArtifactCache 

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

Budgeted, pin-aware view of the verified artifacts of one exchange.

Implementations§

Source§

impl ArtifactCache

Source

pub fn new(ex: Arc<ArtifactExchange>, cfg: CacheConfig) -> Arc<Self> ⓘ

Cache over ex. The exchange reports every artifact that becomes verified (seeded or fetched) to the cache, and the cache enforces the budget as they arrive. Artifacts already verified are admitted.

Source

pub fn exchange(&self) -> &Arc<ArtifactExchange> ⓘ

The exchange this cache accounts.

Source

pub fn admit(&self, id: &ArtifactId) -> Result<Vec<ArtifactId>, CacheError>

Account for verified artifact id and enforce the budget. Returns the artifacts evicted to make room. An unpinned artifact larger than the whole budget is evicted again and reported as an error.

Source

pub fn touch(&self, id: &ArtifactId)

Mark id as just used.

Source

pub fn pin(&self, id: &ArtifactId) -> bool

Protect id from eviction. False if it is not in the cache.

Source

pub fn unpin(&self, id: &ArtifactId) -> bool

Make id evictable again, then enforce the budget (it may go now).

Source

pub fn pin_content(&self, content_hash: [u8; 32])

Pin whatever has this content hash, now or the moment it arrives. A fetch admits an artifact as soon as it verifies, so a caller about to run a package pins its hashes first, or an over-budget cache could evict the artifact before the caller can pin it.

Source

pub fn unpin_content(&self, content_hash: &[u8; 32])

Undo Self::pin_content and make matching entries evictable again.

Source

pub fn pin_package(&self, pkg: &ExchangedPackage)

Pin a package’s manifest and every file it lists.

Source

pub fn unpin_package(&self, pkg: &ExchangedPackage)

Make a package’s manifest and files evictable again (it was removed).

Source

pub fn is_pinned(&self, id: &ArtifactId) -> bool

True if id is pinned.

Source

pub fn set_kind(&self, id: &ArtifactId, kind: ArtifactKind) -> bool

Set what id is (for model.present).

Source

pub fn remove(&self, id: &ArtifactId) -> Result<(), CacheError>

Evict id now. Pinned entries are refused.

Source

pub fn enforce(&self) -> Vec<ArtifactId>

Evict least-recently-used unpinned entries until the total fits the budget. Returns the evicted ids, oldest first.

Source

pub fn used_bytes(&self) -> u64

Bytes accounted: verified entries plus downloads in progress.

Source

pub fn over_budget(&self) -> u64

Bytes over the budget (only pins and downloads in progress can cause this).

Source

pub fn entries(&self) -> Vec<CacheEntryInfo>

Entries, least recently used first.

Source

pub fn advertise(&self, facts: &mut NodeFacts)

Merge what this node can serve into facts as capabilities (store.artifact.*, model.present), replacing any older ones.

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<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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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
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> Pointee for T

Source§

type Pointer = u32

Source§

fn debug( pointer: <T as Pointee>::Pointer, f: &mut Formatter<'_>, ) -> Result<(), Error>

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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