Skip to main content

RepositoryCache

Struct RepositoryCache 

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

The per-organization repository list, refreshed far more slowly than demand.

§Why this is not just “call the directory each poll”

An organization demand poll already costs one request per repository. Adding the installation listing to every poll makes the scoping of a poll cost requests on the same schedule as the poll itself, which is how a ten-repository organization at the 30-second floor stops fitting inside the half-of-5,000 allowance f2 admits targets against. The repository list is also the one input that changes on a human timescale, so refreshing it REPOSITORY_LIST_REFRESH_MULTIPLE times more slowly costs nothing real.

§A repository target never consults the directory at all

Its scope is itself. That is not an optimisation; asking an installation listing which repositories a single named repository covers would be asking a question whose answer is already in the target.

Implementations§

Source§

impl RepositoryCache

Source

pub fn new( directory: Arc<dyn RepositoryDirectory>, clock: Arc<dyn Clock>, poll: RefreshInterval, ) -> Self

Build a cache whose refresh interval is poll slowed by REPOSITORY_LIST_REFRESH_MULTIPLE.

Source

pub const fn ttl(&self) -> Duration

How long a cached repository list is reused for.

Source

pub fn lookups(&self) -> u64

How many times the underlying directory was actually asked.

Measured rather than assumed, for the reason c4 measures its own request count: a budget nothing counts is a table in a document.

Source

pub async fn scope_for( &self, target: &ScaleTarget, ) -> Result<ActivityScope, InventoryError>

The scope one demand poll of target covers.

§Errors

Whatever the directory reported, for an organization target whose list is stale or absent. A repository target cannot fail.

Trait Implementations§

Source§

impl Debug for RepositoryCache

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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