Struct mz_persist_client::fetch::LeasedBatchPart
source · pub struct LeasedBatchPart<T> {
pub(crate) metrics: Arc<Metrics>,
pub(crate) shard_id: ShardId,
pub(crate) reader_id: LeasedReaderId,
pub(crate) filter: FetchBatchFilter<T>,
pub(crate) desc: Description<T>,
pub(crate) part: BatchPart<T>,
pub(crate) leased_seqno: SeqNo,
pub(crate) lease: Option<Lease>,
pub(crate) filter_pushdown_audit: bool,
}
Expand description
A token representing one fetch-able batch part.
It is tradeable via crate::fetch::fetch_batch
for the resulting data
stored in the part.
§Exchange
You can exchange LeasedBatchPart
:
- If
leased_seqno.is_none()
- By converting it to
SerdeLeasedBatchPart
throughSelf::into_exchangeable_part
.SerdeLeasedBatchPart
is exchangeable, including over the network.
n.b. Self::into_exchangeable_part
is known to be equivalent to
SerdeLeasedBatchPart::from(self)
, but we want the additional warning message to
be visible and sufficiently scary.
§Panics
LeasedBatchPart
panics when dropped unless a very strict set of invariants are
held:
LeasedBatchPart
may only be dropped if it:
- Does not have a leased
SeqNo (i.e.
self.leased_seqno.is_none()`)
In any other circumstance, dropping LeasedBatchPart
panics.
Fields§
§metrics: Arc<Metrics>
§shard_id: ShardId
§reader_id: LeasedReaderId
§filter: FetchBatchFilter<T>
§desc: Description<T>
§part: BatchPart<T>
§leased_seqno: SeqNo
The SeqNo
from which this part originated; we track this value as
to ensure the SeqNo
isn’t garbage collected while a
read still depends on it.
lease: Option<Lease>
The lease that prevents this part from being GCed. Code should ensure that this lease lives as long as the part is needed.
filter_pushdown_audit: bool
Implementations§
source§impl<T> LeasedBatchPart<T>
impl<T> LeasedBatchPart<T>
sourcepub(crate) fn into_exchangeable_part(
self,
) -> (SerdeLeasedBatchPart, Option<Lease>)
pub(crate) fn into_exchangeable_part( self, ) -> (SerdeLeasedBatchPart, Option<Lease>)
Takes self
into a SerdeLeasedBatchPart
, which allows self
to be
exchanged (potentially across the network).
!!!WARNING!!!
This method also returns the Lease associated with the given part, since that can’t travel across process boundaries. The caller is responsible for ensuring that the lease is held for as long as the batch part may be in use: dropping it too early may cause a fetch to fail.
sourcepub fn encoded_size_bytes(&self) -> usize
pub fn encoded_size_bytes(&self) -> usize
The encoded size of this part in bytes
sourcepub fn request_filter_pushdown_audit(&mut self)
pub fn request_filter_pushdown_audit(&mut self)
The filter has indicated we don’t need this part, we can verify the ongoing end-to-end correctness of corner cases via “audit”. This means we fetch the part like normal and if the MFP keeps anything from it, then something has gone horribly wrong.
sourcepub fn maybe_optimize(&mut self, cfg: &ConfigSet, project: &ProjectionPushdown)
pub fn maybe_optimize(&mut self, cfg: &ConfigSet, project: &ProjectionPushdown)
Apply any relevant projection pushdown optimizations.
NB: Until we implement full projection pushdown, this doesn’t guarantee any projection.
Trait Implementations§
source§impl<T: Debug> Debug for LeasedBatchPart<T>
impl<T: Debug> Debug for LeasedBatchPart<T>
source§impl<T> Drop for LeasedBatchPart<T>
impl<T> Drop for LeasedBatchPart<T>
source§fn drop(&mut self)
fn drop(&mut self)
For details, see LeasedBatchPart
.
source§impl<T: Timestamp + Codec64> RustType<(ProtoLeasedBatchPart, Arc<Metrics>)> for LeasedBatchPart<T>
impl<T: Timestamp + Codec64> RustType<(ProtoLeasedBatchPart, Arc<Metrics>)> for LeasedBatchPart<T>
source§fn into_proto(&self) -> (ProtoLeasedBatchPart, Arc<Metrics>)
fn into_proto(&self) -> (ProtoLeasedBatchPart, Arc<Metrics>)
Self
into a Proto
value.source§fn from_proto(
proto: (ProtoLeasedBatchPart, Arc<Metrics>),
) -> Result<Self, TryFromProtoError>
fn from_proto( proto: (ProtoLeasedBatchPart, Arc<Metrics>), ) -> Result<Self, TryFromProtoError>
source§fn into_proto_owned(self) -> Proto
fn into_proto_owned(self) -> Proto
Self::into_proto
that types can
optionally implement, otherwise, the default implementation
delegates to Self::into_proto
.Auto Trait Implementations§
impl<T> !Freeze for LeasedBatchPart<T>
impl<T> !RefUnwindSafe for LeasedBatchPart<T>
impl<T> Send for LeasedBatchPart<T>where
T: Send,
impl<T> Sync for LeasedBatchPart<T>where
T: Sync,
impl<T> Unpin for LeasedBatchPart<T>where
T: Unpin,
impl<T> !UnwindSafe for LeasedBatchPart<T>
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> 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::Request
source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
source§fn into_rust(self) -> Result<R, TryFromProtoError>
fn into_rust(self) -> Result<R, TryFromProtoError>
RustType::from_proto
.source§fn from_rust(rust: &R) -> P
fn from_rust(rust: &R) -> P
RustType::into_proto
.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
.