risingwave_storage::hummock::iterator

Enum HummockIteratorUnion

source
pub enum HummockIteratorUnion<D: HummockIteratorDirection, I1: HummockIterator<Direction = D>, I2: HummockIterator<Direction = D>, I3: HummockIterator<Direction = D> = PhantomHummockIterator<D>, I4: HummockIterator<Direction = D> = PhantomHummockIterator<D>> {
    First(I1),
    Second(I2),
    Third(I3),
    Fourth(I4),
}
Expand description

The HummockIteratorUnion acts like a wrapper over multiple types of HummockIterator, so that the MergeIterator, which previously takes multiple different HummockIterators as input through Box<dyn HummockIterator>, can now wrap all its underlying HummockIterator over such HummockIteratorUnion, and the input type of the MergeIterator so that the input type of HummockIterator can be determined statically at compile time.

For example, in ForwardUserIterator, it accepts inputs from 4 sources for its underlying MergeIterator. First, the shared buffer replicated batches, and second, the shared buffer uncommitted data, and third, the overlapping L0 data, and last, the non-L0 non-overlapping concat-able. These sources used to be passed in as Box<dyn HummockIterator>. Now if we want the MergeIterator to be statically typed, the input type of MergeIterator will become the HummockIteratorUnion of these 4 sources.

Variants§

§

First(I1)

§

Second(I2)

§

Third(I3)

§

Fourth(I4)

Trait Implementations§

source§

impl<D: HummockIteratorDirection, I1: HummockIterator<Direction = D>, I2: HummockIterator<Direction = D>, I3: HummockIterator<Direction = D>, I4: HummockIterator<Direction = D>> HummockIterator for HummockIteratorUnion<D, I1, I2, I3, I4>

source§

type Direction = D

source§

async fn next(&mut self) -> HummockResult<()>

Moves a valid iterator to the next key. Read more
source§

fn key(&self) -> FullKey<&[u8]>

Retrieves the current key. Read more
source§

fn value(&self) -> HummockValue<&[u8]>

Retrieves the current value, decoded as HummockValue. Read more
source§

fn is_valid(&self) -> bool

Indicates whether the iterator can be used. Read more
source§

async fn rewind(&mut self) -> HummockResult<()>

Resets the position of the iterator. Read more
source§

async fn seek<'a>(&'a mut self, key: FullKey<&'a [u8]>) -> HummockResult<()>

Resets iterator and seeks to the first position where the key >= provided key, or key <= provided key if this is a backward iterator. Read more
source§

fn collect_local_statistic(&self, stats: &mut StoreLocalStatistic)

take local statistic info from iterator to report metrics.
source§

fn value_meta(&self) -> ValueMeta

Returns value meta.

Auto Trait Implementations§

§

impl<D, I1, I2, I3, I4> Freeze for HummockIteratorUnion<D, I1, I2, I3, I4>
where I1: Freeze, I2: Freeze, I3: Freeze, I4: Freeze,

§

impl<D, I1, I2, I3, I4> RefUnwindSafe for HummockIteratorUnion<D, I1, I2, I3, I4>

§

impl<D, I1, I2, I3, I4> Send for HummockIteratorUnion<D, I1, I2, I3, I4>

§

impl<D, I1, I2, I3, I4> Sync for HummockIteratorUnion<D, I1, I2, I3, I4>
where I1: Sync, I2: Sync, I3: Sync, I4: Sync,

§

impl<D, I1, I2, I3, I4> Unpin for HummockIteratorUnion<D, I1, I2, I3, I4>
where I1: Unpin, I2: Unpin, I3: Unpin, I4: Unpin,

§

impl<D, I1, I2, I3, I4> UnwindSafe for HummockIteratorUnion<D, I1, I2, I3, I4>
where I1: UnwindSafe, I2: UnwindSafe, I3: UnwindSafe, I4: 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
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
source§

impl<T> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<T> IntoResult<T> for T

§

type Err = Infallible

§

fn into_result(self) -> Result<T, <T as IntoResult<T>>::Err>

§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
source§

impl<M> MetricVecRelabelExt for M

source§

fn relabel( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>

source§

fn relabel_n( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, relabel_num: usize, ) -> RelabeledMetricVec<M>

source§

fn relabel_debug_1( self, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>

Equivalent to RelabeledMetricVec::with_metric_level_relabel_n with metric_level set to MetricLevel::Debug and relabel_num set to 1.
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

source§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

source§

impl<T> LruValue for T
where T: Send + Sync,

§

impl<T> MaybeSend for T
where T: Send,

§

impl<T> Value for T
where T: Send + Sync + 'static,