pub struct BlockDataStream {
buf_reader: MonitoredStreamingReader,
block_idx: usize,
block_metas: Vec<BlockMeta>,
buf: Bytes,
buff_offset: usize,
}
Expand description
An iterator that reads the blocks of an SST step by step from a given stream of bytes.
Fields§
§buf_reader: MonitoredStreamingReader
§block_idx: usize
The index of the next block. Note that block_idx
is relative to the start index of the
stream (and is compatible with block_size_vec
); it is not relative to the corresponding
SST. That is, if streaming starts at block 2 of a given SST T
, then block_idx = 0
refers to the third block of T
.
block_metas: Vec<BlockMeta>
The sizes of each block which the stream reads. The first number states the compressed size in the stream. The second number is the block’s uncompressed size. Note that the list does not contain the size of blocks which precede the first streamed block. That is, if streaming starts at block 2 of a given SST, then the list does not contain information about block 0 and block 1.
buf: Bytes
§buff_offset: usize
Implementations§
source§impl BlockDataStream
impl BlockDataStream
sourcepub fn new(
byte_stream: MonitoredStreamingReader,
block_metas: Vec<BlockMeta>,
) -> Self
pub fn new( byte_stream: MonitoredStreamingReader, block_metas: Vec<BlockMeta>, ) -> Self
Constructs a new BlockStream
object that reads from the given byte_stream
and interprets
the data as blocks of the SST described in sst_meta
, starting at block block_index
.
If block_index >= sst_meta.block_metas.len()
, then BlockStream
will not read any data
from byte_stream
.
sourcepub async fn next_block_impl(&mut self) -> HummockResult<Option<(Bytes, usize)>>
pub async fn next_block_impl(&mut self) -> HummockResult<Option<(Bytes, usize)>>
Reads the next block from the stream and returns it. Returns None
if there are no blocks
left to read.
async fn read_next_buf(&mut self, read_size: usize) -> HummockResult<Bytes>
pub fn next_block_index(&self) -> usize
pub async fn next_block(&mut self) -> HummockResult<Option<Box<Block>>>
Auto Trait Implementations§
impl !Freeze for BlockDataStream
impl !RefUnwindSafe for BlockDataStream
impl Send for BlockDataStream
impl !Sync for BlockDataStream
impl Unpin for BlockDataStream
impl !UnwindSafe for BlockDataStream
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<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<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::Request
§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
type Err = Infallible
fn into_result(self) -> Result<T, <T as IntoResult<T>>::Err>
source§impl<M> MetricVecRelabelExt for M
impl<M> MetricVecRelabelExt for M
source§fn relabel(
self,
metric_level: MetricLevel,
relabel_threshold: MetricLevel,
) -> RelabeledMetricVec<M>
fn relabel( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level
.source§fn relabel_n(
self,
metric_level: MetricLevel,
relabel_threshold: MetricLevel,
relabel_num: usize,
) -> RelabeledMetricVec<M>
fn relabel_n( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, relabel_num: usize, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level_relabel_n
.source§fn relabel_debug_1(
self,
relabel_threshold: MetricLevel,
) -> RelabeledMetricVec<M>
fn relabel_debug_1( self, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level_relabel_n
with metric_level
set to
MetricLevel::Debug
and relabel_num
set to 1.