pub struct ChunkHandle { /* private fields */ }pool only.Expand description
Handle to one immutable chunk in a Pool. Dropping the handle frees the
chunk: the slot (if resident) returns to the region free list with its
physical pages released, and the extent (if any) is deallocated,
discarding any swapped copy for free. Releasing the pages keeps RSS
aligned with the resident_bytes gauge the budget enforcer trusts;
without it, freed slots would hold warm pages the enforcer cannot see.
Implementations§
Source§impl ChunkHandle
impl ChunkHandle
Sourcepub fn read_into(&self, dst: &mut Vec<u64>)
pub fn read_into(&self, dst: &mut Vec<u64>)
Copies the whole contents into dst (cleared first), leaving the
chunk’s residency untouched: a resident slot is copied out directly,
and an evicted extent decompresses straight into dst without
allocating a slot. A read therefore never raises resident bytes,
never converts the chunk’s state, and hands out no reference into
pool memory.
The copy runs under the chunk’s state lock, which is what makes the
no-reference contract cheap: eviction takes the same lock, so there
is no reader it could race. The admitting variant is
ChunkHandle::read_into_admit.
Sourcepub fn read_range_into(&self, range: Range<usize>, dst: &mut Vec<u64>)
pub fn read_range_into(&self, range: Range<usize>, dst: &mut Vec<u64>)
As ChunkHandle::read_into, restricted to the word range range
of the chunk’s contents, which must lie within them. dst receives
exactly the range.
The range narrows only the copy into dst: the swap backend’s
stored form is a whole compressed block, so a cold read still
faults and decompresses the entire extent, and accounting is that
of a whole-chunk read. A backend with a rangeable stored form can
serve the same call with range-proportional I/O.
Sourcepub fn read_into_admit(&self, dst: &mut Vec<u64>)
pub fn read_into_admit(&self, dst: &mut Vec<u64>)
As ChunkHandle::read_into, except that an evicted chunk is
re-admitted to BackedResident (its extent kept, its touched bit
set) when a slot is available from free budget headroom or by
stealing from a clean backed victim of the same size class, never by
evicting or compressing anything. When neither source yields a slot
the read is served as a plain decompress and the chunk stays
evicted.
For demand reads on probe paths, where the same chunk is likely to
be read again. Merge, drain, and other consume-once paths should use
ChunkHandle::read_into or ChunkHandle::take: admitting there
churns the clean-victim stock that eager backing exists to build,
evicting probe targets to house data about to die.
Sourcepub fn read_range_into_admit(&self, range: Range<usize>, dst: &mut Vec<u64>)
pub fn read_range_into_admit(&self, range: Range<usize>, dst: &mut Vec<u64>)
As ChunkHandle::read_into_admit, restricted to the word range
range per ChunkHandle::read_range_into. Admission is
whole-chunk regardless of the range: the acquired slot holds the
entire body.
Sourcepub fn take(self, dst: &mut Vec<u64>)
pub fn take(self, dst: &mut Vec<u64>)
Copies the whole contents into dst (per ChunkHandle::read_into,
never admitting) and frees the chunk, cancelling any in-flight
backing write.
Sourcepub fn prefetch(&self)
pub fn prefetch(&self)
Advisory a consumer may issue before a bulk read: hints the kernel to
swap an evicted chunk’s extent back in, and is a no-op in every other
state. Never blocks on I/O (MADV_WILLNEED is asynchronous).
Sourcepub fn prefetch_range(&self, range: Range<usize>)
pub fn prefetch_range(&self, range: Range<usize>)
As ChunkHandle::prefetch, scoped to the word range range of the
chunk’s contents. The range is advisory: a backend hints at whatever
granularity its stored form permits, and the swap backend’s stored
form is a whole compressed block, so it hints the entire extent.
Trait Implementations§
Source§impl Debug for ChunkHandle
impl Debug for ChunkHandle
Source§impl Drop for ChunkHandle
impl Drop for ChunkHandle
Auto Trait Implementations§
impl Freeze for ChunkHandle
impl !RefUnwindSafe for ChunkHandle
impl Send for ChunkHandle
impl Sync for ChunkHandle
impl Unpin for ChunkHandle
impl UnsafeUnpin for ChunkHandle
impl !UnwindSafe for ChunkHandle
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> 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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
Source§fn plus_equals(&mut self, rhs: &&'a S)
fn plus_equals(&mut self, rhs: &&'a S)
std::ops::AddAssign, for types that do not implement AddAssign.Source§impl<T> ServiceExt for T
impl<T> ServiceExt for T
Source§fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
map-response-body only.Source§fn decompression(self) -> Decompression<Self>where
Self: Sized,
fn decompression(self) -> Decompression<Self>where
Self: Sized,
decompression-br or decompression-deflate or decompression-gzip or decompression-zstd only.Source§fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
trace only.Source§fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
trace only.Source§fn follow_redirects(self) -> FollowRedirect<Self>where
Self: Sized,
fn follow_redirects(self) -> FollowRedirect<Self>where
Self: Sized,
follow-redirect only.