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>
impl<T: VnodeMappingItem> VnodeMapping<T>
Sourcepub fn new_uniform(
items: impl ExactSizeIterator<Item = T::Item>,
vnode_count: usize,
) -> Self
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].
Sourcepub fn new_single(item: T::Item) -> Self
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.
Sourcepub fn get(&self, vnode: VirtualNode) -> T::Item
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.
Sourcepub fn get_matched(&self, bitmap: &Bitmap) -> Option<T::Item>
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.
Sourcepub fn iter(&self) -> impl Iterator<Item = T::Item> + '_
pub fn iter(&self) -> impl Iterator<Item = T::Item> + '_
Iterate over all items in this mapping, in the order of vnodes.
Sourcepub fn iter_with_vnode(
&self,
) -> impl Iterator<Item = (VirtualNode, T::Item)> + '_
pub fn iter_with_vnode( &self, ) -> impl Iterator<Item = (VirtualNode, T::Item)> + '_
Iterate over all vnode-item pairs in this mapping.
Sourcepub fn iter_unique(&self) -> impl Iterator<Item = T::Item> + '_
pub fn iter_unique(&self) -> impl Iterator<Item = T::Item> + '_
Iterate over all unique items in this mapping. The order is deterministic.
Sourcepub fn to_single(&self) -> Option<T::Item>
pub fn to_single(&self) -> Option<T::Item>
Returns the item if it’s the only item in this mapping, otherwise returns None.
Sourcepub fn to_bitmaps(&self) -> HashMap<T::Item, Bitmap>
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.
Sourcepub fn from_bitmaps(bitmaps: &HashMap<T::Item, Bitmap>) -> Self
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.
Sourcepub fn from_expanded(items: &[T::Item]) -> Self
pub fn from_expanded(items: &[T::Item]) -> Self
Create a vnode mapping from the expanded slice of items.
Sourcepub fn to_expanded(&self) -> ExpandedMapping<T>
pub fn to_expanded(&self) -> ExpandedMapping<T>
Convert this vnode mapping to a expanded vector of items.
Sourcepub fn transform<T2, M>(&self, to_map: &M) -> VnodeMapping<T2>
pub fn transform<T2, M>(&self, to_map: &M) -> VnodeMapping<T2>
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>
impl VnodeMapping<Actor>
Sourcepub fn to_worker_slot(
&self,
actor_to_worker: &HashMap<ActorId, u32>,
) -> WorkerSlotMapping
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.
Sourcepub fn to_actor_alignment(
&self,
actor_to_worker: &HashMap<ActorId, u32>,
) -> ActorAlignmentMapping
pub fn to_actor_alignment( &self, actor_to_worker: &HashMap<ActorId, u32>, ) -> ActorAlignmentMapping
Transform the actor mapping to the actor alignment mapping. Note that the parameter is a mapping from actor to worker.
Sourcepub fn from_protobuf(proto: &ActorMappingProto) -> Self
pub fn from_protobuf(proto: &ActorMappingProto) -> Self
Create an actor mapping from the protobuf representation.
Sourcepub fn to_protobuf(&self) -> ActorMappingProto
pub fn to_protobuf(&self) -> ActorMappingProto
Convert this actor mapping to the protobuf representation.
Source§impl VnodeMapping<WorkerSlot>
impl VnodeMapping<WorkerSlot>
Sourcepub fn build_from_ids(
worker_slot_ids: &[WorkerSlotId],
vnode_count: usize,
) -> Self
pub fn build_from_ids( worker_slot_ids: &[WorkerSlotId], vnode_count: usize, ) -> Self
Create a uniform worker mapping from the given worker ids
Sourcepub fn from_protobuf(proto: &PbWorkerSlotMapping) -> Self
pub fn from_protobuf(proto: &PbWorkerSlotMapping) -> Self
Create a worker mapping from the protobuf representation.
Sourcepub fn to_protobuf(&self) -> PbWorkerSlotMapping
pub fn to_protobuf(&self) -> PbWorkerSlotMapping
Convert this worker mapping to the protobuf representation.
Source§impl VnodeMapping<WorkerSlot>
impl VnodeMapping<WorkerSlot>
Sourcepub fn to_actor(&self, to_map: &HashMap<WorkerSlotId, ActorId>) -> ActorMapping
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>
impl<T: VnodeMappingItem> Clone for VnodeMapping<T>
Source§impl<T: VnodeMappingItem> Debug for VnodeMapping<T>
impl<T: VnodeMappingItem> Debug for VnodeMapping<T>
Source§impl<T: VnodeMappingItem> Hash for VnodeMapping<T>
impl<T: VnodeMappingItem> Hash for VnodeMapping<T>
Source§impl<T: VnodeMappingItem> Index<VirtualNode> for VnodeMapping<T>
impl<T: VnodeMappingItem> Index<VirtualNode> for VnodeMapping<T>
Source§impl<T: VnodeMappingItem> PartialEq for VnodeMapping<T>
impl<T: VnodeMappingItem> PartialEq for VnodeMapping<T>
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>
impl<T> Sync for VnodeMapping<T>
impl<T> Unpin for VnodeMapping<T>
impl<T> UnwindSafe for VnodeMapping<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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§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>
§impl<M> MetricVecRelabelExt for M
impl<M> MetricVecRelabelExt for M
§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].§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].§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.§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> SameOrElseExt for Twhere
T: Eq,
impl<T> SameOrElseExt for Twhere
T: Eq,
Source§fn same_or_else(self, other: T, f: impl FnOnce() -> T) -> T
fn same_or_else(self, other: T, f: impl FnOnce() -> T) -> T
self and other are equal, if so, return self, otherwise return the result of f().§impl<T> Scope for T
impl<T> Scope for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.