pub struct CacheRef { /* private fields */ }Expand description
A reference to a page cache that can be shared across threads via cloning, along with the page size that will be used with it. Provides the API for interacting with the page cache in a thread-safe manner.
Implementations§
Source§impl CacheRef
impl CacheRef
Sourcepub fn new(
pool: BufferPool,
page_size: NonZeroU16,
capacity: NonZeroUsize,
) -> Self
pub fn new( pool: BufferPool, page_size: NonZeroU16, capacity: NonZeroUsize, ) -> Self
Create a shared page-cache handle backed by pool.
The cache stores at most capacity pages, each exactly page_size bytes (see
Self::page_size for how this relates to a page’s physical size on disk).
Initialization eagerly allocates and zeroes all cache slots from pool.
Any page_size is accepted, but physical pages that do not align with storage pages (see
the module docs) amplify cold random reads. Use super::page_size to pick an aligned value.
Cache misses request ReadOptions::DONT_CACHE because the fetched page is retained here.
Sourcepub fn from_pooler(
pooler: &impl BufferPooler,
page_size: NonZeroU16,
capacity: NonZeroUsize,
) -> Self
pub fn from_pooler( pooler: &impl BufferPooler, page_size: NonZeroU16, capacity: NonZeroUsize, ) -> Self
Create a shared page-cache handle, extracting the storage BufferPool from a BufferPooler. Cache misses request ReadOptions::DONT_CACHE.
Sourcepub const fn page_size(&self) -> NonZeroU16
pub const fn page_size(&self) -> NonZeroU16
The page size used by this page cache: the logical payload bytes stored per page. Each
page occupies page_size() + CHECKSUM_SIZE bytes on disk (its physical size).
Sourcepub const fn pool(&self) -> &BufferPool
pub const fn pool(&self) -> &BufferPool
Returns the storage buffer pool associated with this cache.
Sourcepub fn next_id(&self) -> u64
pub fn next_id(&self) -> u64
Returns a unique id for the next blob that will use this page cache.
Sourcepub fn offset_to_page(&self, offset: u64) -> (u64, u64)
pub fn offset_to_page(&self, offset: u64) -> (u64, u64)
Convert a logical offset into the number of the page it belongs to and the offset within that page.
Sourcepub fn cache(&self, blob_id: u64, buf: &[u8], offset: u64) -> usize
pub fn cache(&self, blob_id: u64, buf: &[u8], offset: u64) -> usize
Cache the provided pages of data in the page cache, returning the remaining bytes that
didn’t fill a whole page. offset must be page aligned.
§Panics
- Panics if
offsetis not page aligned. - If the buffer is not the size of a page.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for CacheRef
impl !UnwindSafe for CacheRef
impl Freeze for CacheRef
impl Send for CacheRef
impl Sync for CacheRef
impl Unpin for CacheRef
impl UnsafeUnpin for CacheRef
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
Source§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
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