Skip to main content

DiskCache

Struct DiskCache 

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

DiskCache is a ChunkCache implementor that saves data on the file system

Implementations§

Source§

impl DiskCache

Source

pub async fn num_items(&self) -> usize

Source

pub async fn total_bytes(&self) -> u64

Source

pub fn initialize(config: &CacheConfig) -> Result<Self, ChunkCacheError>

initialize will create a new DiskCache with the capacity and cache root based on the config the cache file system layout is rooted at the provided config.cache_directory and initialize will attempt to load any pre-existing cache state into memory.

an configured size of 0 caused initialization to fail

The cache layout is as follows:

each key (cas hash) in the cache is a directory, containing “cache items” that each provide some range of data.

keys are grouped into subdirectories under the cache rootbased on the first 2 chacters of their file name, which is base64 encoded, leading to at most 64 * 64 directories under the cache root.

cache_root/ ├── [ab]/ │ ├── [key 1 (ab123…)]/ │ │ ├── [range 0-100, file_len, file_hash] │ │ ├── [range 102-300, file_len, file_hash] │ │ └── [range 900-1024, file_len, file_hash] │ ├── [key 2 (ab456…)]/ │ └── [range 0-1020, file_len, file_hash] ├── [cd]/ │ └── [key 3 (cd123…)]/ │ ├── [range 30-31, file_len, file_hash] │ ├── [range 400-402, file_len, file_hash] │ ├── [range 404-405, file_len, file_hash] │ └── [range 679-700, file_len, file_hash]

Trait Implementations§

Source§

impl ChunkCache for DiskCache

Source§

fn get<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, key: &'life1 Key, range: &'life2 ChunkRange, ) -> Pin<Box<dyn Future<Output = Result<Option<CacheRange>, ChunkCacheError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

get should return an Ok() variant if significant error occurred, check the error variant for issues with IO or parsing contents etc. Read more
Source§

fn put<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>( &'life0 self, key: &'life1 Key, range: &'life2 ChunkRange, chunk_byte_indices: &'life3 [u32], data: &'life4 [u8], ) -> Pin<Box<dyn Future<Output = Result<(), ChunkCacheError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait, 'life4: 'async_trait,

put should return Ok(()) if the put succeeded with no error, check the error variant for issues with validating the input, cache state, IO, etc. Read more
Source§

impl Clone for DiskCache

Source§

fn clone(&self) -> DiskCache

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DiskCache

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DropFlavorWrapper<T> for T

Source§

type Flavor = MayDrop

The DropFlavor that wraps T into Self
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

Source§

const WITNESS: W = W::MAKE

A constant of the type witness
Source§

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

Source§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
Source§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: 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: 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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

impl<E> ResultError for E
where E: Send + Debug + Sync,

Source§

impl<T> ResultType for T
where T: Send + Clone + Sync + Debug,