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 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,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§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<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<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.