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, WorkerId>,
) -> WorkerSlotMapping
pub fn to_worker_slot( &self, actor_to_worker: &HashMap<ActorId, WorkerId>, ) -> 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, WorkerId>,
) -> ActorAlignmentMapping
pub fn to_actor_alignment( &self, actor_to_worker: &HashMap<ActorId, WorkerId>, ) -> 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> Downcast for Twhere
T: AsAny + ?Sized,
impl<T> Downcast for Twhere
T: AsAny + ?Sized,
§fn downcast_ref<T>(&self) -> Option<&T>where
T: AsAny,
fn downcast_ref<T>(&self) -> Option<&T>where
T: AsAny,
Any.§fn downcast_mut<T>(&mut self) -> Option<&mut T>where
T: AsAny,
fn downcast_mut<T>(&mut self) -> Option<&mut T>where
T: AsAny,
Any.§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> 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.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
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().