Skip to main content

CachedBackend

Struct CachedBackend 

Source
pub struct CachedBackend<B: Backend> { /* private fields */ }
Expand description

Chunked LRU read cache over any backend.

Reads are served chunk-by-chunk from an in-memory map; misses fetch a batched run of chunks from the inner backend (see the module doc). Concurrent misses on the same chunk may fetch it twice (both results are identical; one wins the cache slot) — correctness is unaffected.

Implementations§

Source§

impl<B: Backend> CachedBackend<B>

Source

pub fn new(inner: B) -> Self

Wraps inner with the default 64 KiB chunks and 32 MiB capacity.

Source

pub fn with_capacity(inner: B, chunk_size: usize, max_bytes: usize) -> Self

Wraps inner with an explicit chunk size and total byte capacity.

§Panics

Panics if chunk_size is zero.

Source

pub fn on_fetch(self, fetch: impl Fn(u64, u64) + Send + Sync + 'static) -> Self

Registers a fetch observer: fetch(offset, len) is called after every inner read a cache miss triggers, with the byte offset and length actually fetched. Cache hits never call it. The callback runs on the async runtime, so it must not block.

Trait Implementations§

Source§

impl<B: Backend> Backend for CachedBackend<B>

Source§

fn len(&self) -> BoxFuture<'_, Result<u64>>

Total length of the underlying byte source.
Source§

fn read_at<'a>( &'a self, offset: u64, buf: &'a mut [u8], ) -> BoxFuture<'a, Result<usize>>

Reads up to buf.len() bytes at offset into buf, returning the number of bytes read. Implementations may only return a short count at end of input; anywhere else they must fill the buffer.

Auto Trait Implementations§

§

impl<B> !Freeze for CachedBackend<B>

§

impl<B> !RefUnwindSafe for CachedBackend<B>

§

impl<B> !UnwindSafe for CachedBackend<B>

§

impl<B> Send for CachedBackend<B>

§

impl<B> Sync for CachedBackend<B>

§

impl<B> Unpin for CachedBackend<B>
where B: Unpin,

§

impl<B> UnsafeUnpin for CachedBackend<B>
where B: UnsafeUnpin,

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