risingwave_common::hash::consistent_hash::mapping

Struct VnodeMapping

source
pub struct VnodeMapping<T: VnodeMappingItem> {
    original_indices: Vec<u32>,
    data: Vec<T::Item>,
}
Expand description

Generic mapping from virtual nodes to items.

The representation is compressed as described in compress_data, which is optimized for the mapping with a small number of items and good locality.

Fields§

§original_indices: Vec<u32>§data: Vec<T::Item>

Implementations§

source§

impl<T: VnodeMappingItem> VnodeMapping<T>

source

pub fn new_uniform( items: impl ExactSizeIterator<Item = T::Item>, vnode_count: usize, ) -> Self

Create a uniform vnode mapping with a set of items.

For example, if items is [0, 1, 2], and the total vnode count is 10, we’ll generate mapping like [0, 0, 0, 0, 1, 1, 1, 2, 2, 2].

source

pub fn new_single(item: T::Item) -> Self

Create a vnode mapping with the single item and length of 1.

Should only be used for singletons. If you want a different vnode count, call VnodeMapping::new_uniform with std::iter::once(item) and desired length.

source

pub fn len(&self) -> usize

The length (or count) of the vnode in this mapping.

source

pub fn get(&self, vnode: VirtualNode) -> T::Item

Get the item mapped to the given vnode by binary search.

Note: to achieve better mapping performance, one should convert the mapping to the ExpandedMapping first and directly access the item by index.

source

pub fn get_matched(&self, bitmap: &Bitmap) -> Option<T::Item>

Get the item matched by the virtual nodes indicated by high bits in the given bitmap. Returns None if the no virtual node is set in the bitmap.

source

pub fn iter(&self) -> impl Iterator<Item = T::Item> + '_

Iterate over all items in this mapping, in the order of vnodes.

source

pub fn iter_with_vnode( &self, ) -> impl Iterator<Item = (VirtualNode, T::Item)> + '_

Iterate over all vnode-item pairs in this mapping.

source

pub fn iter_unique(&self) -> impl Iterator<Item = T::Item> + '_

Iterate over all unique items in this mapping. The order is deterministic.

source

pub fn to_single(&self) -> Option<T::Item>

Returns the item if it’s the only item in this mapping, otherwise returns None.

source

pub fn to_bitmaps(&self) -> HashMap<T::Item, Bitmap>

Convert this vnode mapping to a mapping from items to bitmaps, where each bitmap represents the vnodes mapped to the item.

source

pub fn from_bitmaps(bitmaps: &HashMap<T::Item, Bitmap>) -> Self

Create a vnode mapping from the given mapping from items to bitmaps, where each bitmap represents the vnodes mapped to the item.

source

pub fn from_expanded(items: &[T::Item]) -> Self

Create a vnode mapping from the expanded slice of items.

source

pub fn to_expanded(&self) -> ExpandedMapping<T>

Convert this vnode mapping to a expanded vector of items.

source

pub fn transform<T2, M>(&self, to_map: &M) -> VnodeMapping<T2>
where T2: VnodeMappingItem, M: for<'a> Index<&'a T::Item, Output = T2::Item>,

Transform this vnode mapping to another type of vnode mapping, with the given mapping from items of this mapping to items of the other mapping.

source§

impl VnodeMapping<Actor>

source

pub fn to_worker_slot( &self, actor_to_worker: &HashMap<ActorId, u32>, ) -> WorkerSlotMapping

Transform the actor mapping to the worker slot mapping. Note that the parameter is a mapping from actor to worker.

source

pub fn from_protobuf(proto: &ActorMappingProto) -> Self

Create an actor mapping from the protobuf representation.

source

pub fn to_protobuf(&self) -> ActorMappingProto

Convert this actor mapping to the protobuf representation.

source§

impl VnodeMapping<WorkerSlot>

source

pub fn build_from_ids( worker_slot_ids: &[WorkerSlotId], vnode_count: usize, ) -> Self

Create a uniform worker mapping from the given worker ids

source

pub fn from_protobuf(proto: &PbWorkerSlotMapping) -> Self

Create a worker mapping from the protobuf representation.

source

pub fn to_protobuf(&self) -> PbWorkerSlotMapping

Convert this worker mapping to the protobuf representation.

source§

impl VnodeMapping<WorkerSlot>

source

pub fn to_actor(&self, to_map: &HashMap<WorkerSlotId, ActorId>) -> ActorMapping

Transform this worker slot mapping to an actor mapping, essentially transform.

Trait Implementations§

source§

impl<T: VnodeMappingItem> Clone for VnodeMapping<T>
where Vec<u32>: Clone, Vec<T::Item>: Clone,

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<T: VnodeMappingItem> Debug for VnodeMapping<T>
where Vec<u32>: Debug, Vec<T::Item>: Debug,

source§

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

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

impl<T: VnodeMappingItem> Hash for VnodeMapping<T>
where Vec<u32>: Hash, Vec<T::Item>: Hash,

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<T: VnodeMappingItem> Index<VirtualNode> for VnodeMapping<T>

source§

type Output = <T as VnodeMappingItem>::Item

The returned type after indexing.
source§

fn index(&self, vnode: VirtualNode) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
source§

impl<T: VnodeMappingItem> PartialEq for VnodeMapping<T>

source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<T: VnodeMappingItem> Eq for VnodeMapping<T>

Auto Trait Implementations§

§

impl<T> Freeze for VnodeMapping<T>

§

impl<T> RefUnwindSafe for VnodeMapping<T>

§

impl<T> Send for VnodeMapping<T>
where <T as VnodeMappingItem>::Item: Send,

§

impl<T> Sync for VnodeMapping<T>
where <T as VnodeMappingItem>::Item: Sync,

§

impl<T> Unpin for VnodeMapping<T>
where <T as VnodeMappingItem>::Item: Unpin,

§

impl<T> UnwindSafe for VnodeMapping<T>

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> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FromRef<T> for T
where T: Clone,

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

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>

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> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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,

§

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

§

impl<T> Key for T
where T: Send + Sync + 'static + Hash + Eq,

source§

impl<T> LruKey for T
where T: Eq + Send + Hash,

source§

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

§

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