pub struct PoolRef { /* private fields */ }Expand description
A reference to a Pool 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 buffer pool in a thread-safe manner.
Implementations§
Source§impl PoolRef
impl PoolRef
Sourcepub fn new(page_size: NonZeroUsize, capacity: NonZeroUsize) -> Self
pub fn new(page_size: NonZeroUsize, capacity: NonZeroUsize) -> Self
Returns a new PoolRef with the given page_size and capacity.
Sourcepub async fn next_id(&self) -> u64
pub async fn next_id(&self) -> u64
Returns a unique id for the next blob that will use this buffer pool.
Sourcepub const fn offset_to_page(&self, offset: u64) -> (u64, usize)
pub const fn offset_to_page(&self, offset: u64) -> (u64, usize)
Convert an offset into the number of the page it belongs to and the offset within that page.
Sourcepub async fn cache(&self, blob_id: u64, buf: &[u8], offset: u64) -> usize
pub async fn cache(&self, blob_id: u64, buf: &[u8], offset: u64) -> usize
Cache the provided slice of data in the buffer pool, returning the remaining bytes that
didn’t fill a whole page. offset must be page aligned.
If the next page index would overflow u64, caching stops and the uncached bytes are
returned. This can only occur with 1-byte pages on 64-bit architectures. On 32-bit
architectures it cannot occur because the buffer length is bounded by usize::MAX (2^32-1),
so even starting at page u64::MAX with 1-byte pages, at most 2^32-1 pages can be cached.
On 64-bit architectures with page_size >= 2, the maximum starting page (u64::MAX / 2)
plus maximum cacheable pages (usize::MAX / 2) equals u64::MAX - 1.
§Panics
Panics if offset is not page aligned.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for PoolRef
impl !RefUnwindSafe for PoolRef
impl Send for PoolRef
impl Sync for PoolRef
impl Unpin for PoolRef
impl !UnwindSafe for PoolRef
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)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>
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