pub struct DiskCache { /* private fields */ }Expand description
DiskCache is a ChunkCache implementor that saves data on the file system
Implementations§
Source§impl DiskCache
impl DiskCache
pub async fn num_items(&self) -> usize
pub async fn total_bytes(&self) -> u64
Sourcepub fn initialize(config: &CacheConfig) -> Result<Self, ChunkCacheError>
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
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,
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,
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,
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,
Auto Trait Implementations§
impl Freeze for DiskCache
impl !RefUnwindSafe for DiskCache
impl Send for DiskCache
impl Sync for DiskCache
impl Unpin for DiskCache
impl UnsafeUnpin for DiskCache
impl !UnwindSafe for DiskCache
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> DropFlavorWrapper<T> for T
impl<T> DropFlavorWrapper<T> for T
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
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