Skip to main content

CacheMergePusher

Struct CacheMergePusher 

Source
pub struct CacheMergePusher<P> { /* private fields */ }
Expand description

Pusher wrapper that buffers chunks and merges each flush run into a single Bytes.

Out-of-order chunks are stored in a BTreeMap. When a contiguous run reaches the high watermark, all chunks in that run are coalesced into one contiguous BytesMut before being pushed. This minimizes write calls to the inner pusher at the cost of an extra memory copy.

Implementations§

Source§

impl<P: Pusher> CacheMergePusher<P>

Source

pub const fn new(inner: P, high_watermark: usize, low_watermark: usize) -> Self

Wrap inner with the given high_watermark / low_watermark (in bytes).

Eviction to the inner pusher triggers once the buffered size reaches high_watermark, and stops once it falls back to low_watermark.

low_watermark must not exceed high_watermark. A larger low_watermark makes high_watermark irrelevant, because eviction does nothing until the buffered size passes low_watermark, which then acts as the sole watermark.

With high_watermark == low_watermark, a push that lands the buffered size exactly on the watermark evicts nothing; the next push takes it above and eviction proceeds as usual.

Trait Implementations§

Source§

impl<P: Debug> Debug for CacheMergePusher<P>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<P: Pusher> Pusher for CacheMergePusher<P>

Source§

type Error = <P as Pusher>::Error

Source§

fn set_listener(&mut self, cb: ProgressListener)

Install a callback that fires whenever a chunk has been successfully pushed to its destination. Read more
Source§

fn push( &mut self, range: &ProgressEntry, bytes: Bytes, ) -> Result<(), (Self::Error, Bytes)>

Write content covering the given range to the destination. Read more
Source§

fn flush(&mut self) -> Result<(), Self::Error>

Flush any buffered data to the destination. Read more

Auto Trait Implementations§

§

impl<P> Freeze for CacheMergePusher<P>
where P: Freeze,

§

impl<P> RefUnwindSafe for CacheMergePusher<P>
where P: RefUnwindSafe,

§

impl<P> Send for CacheMergePusher<P>
where P: Send,

§

impl<P> Sync for CacheMergePusher<P>
where P: Sync,

§

impl<P> Unpin for CacheMergePusher<P>
where P: Unpin,

§

impl<P> UnsafeUnpin for CacheMergePusher<P>
where P: UnsafeUnpin,

§

impl<P> UnwindSafe for CacheMergePusher<P>
where P: UnwindSafe,

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

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.