Skip to main content

ConsistentHashRing

Struct ConsistentHashRing 

Source
pub struct ConsistentHashRing { /* private fields */ }
Expand description

Consistent hash ring with virtual nodes for even load distribution.

Virtual nodes (replicas per real node) help achieve more uniform key distribution even with small cluster sizes.

§Example

use oxibonsai_runtime::distributed::ConsistentHashRing;

let mut ring = ConsistentHashRing::new(150);
ring.add_node("node-a");
ring.add_node("node-b");
let target = ring.get_node("my-request-key");
assert!(target.is_some());

Implementations§

Source§

impl ConsistentHashRing

Source

pub fn new(replicas: usize) -> Self

Create a new empty ring.

replicas controls how many virtual nodes are placed on the ring per real node. Higher values give better distribution at the cost of memory. A value of 100–200 is typical.

Source

pub fn add_node(&mut self, node_id: &str)

Add a node to the ring by inserting replicas virtual nodes.

Virtual node keys are "<node_id>#<i>" for i in 0..replicas. After insertion the internal slice is re-sorted.

Source

pub fn remove_node(&mut self, node_id: &str)

Remove all virtual nodes belonging to node_id from the ring.

Source

pub fn get_node(&self, key: &str) -> Option<&str>

Route a key to the first virtual node at or after its hash position.

Returns None if the ring is empty.

Source

pub fn get_nodes(&self, key: &str, count: usize) -> Vec<&str>

Route a key and return up to count distinct real nodes in ring order.

Useful for replication — returns the first count unique node IDs encountered walking clockwise from the key’s position.

Source

pub fn node_count(&self) -> usize

Number of distinct real nodes currently on the ring.

Source

pub fn vnode_count(&self) -> usize

Total number of virtual nodes on the ring (replicas × node_count).

Auto Trait Implementations§

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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.
Source§

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

Source§

fn vzip(self) -> V

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

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,