Class ConsistentHash<T>

java.lang.Object
org.apache.pekko.routing.ConsistentHash<T>

public class ConsistentHash<T> extends Object
Consistent Hashing node ring implementation.

A good explanation of Consistent Hashing: https://tom-e-white.com/2007/11/consistent-hashing.html

Note that toString of the ring nodes are used for the node hash, i.e. make sure it is different for different nodes.

  • Constructor Details

    • ConsistentHash

      public ConsistentHash()
  • Method Details

    • apply

      public static <T> ConsistentHash<T> apply(scala.collection.Iterable<T> nodes, int virtualNodesFactor, scala.reflect.ClassTag<T> evidence$2)
    • create

      public static <T> ConsistentHash<T> create(Iterable<T> nodes, int virtualNodesFactor)
      Java API: Factory method to create a ConsistentHash
    • virtualNodesFactor

      public int virtualNodesFactor()
    • $colon$plus

      public ConsistentHash<T> $colon$plus(T node)
      Adds a node to the node ring. Note that the instance is immutable and this operation returns a new instance.
    • add

      public ConsistentHash<T> add(T node)
      Java API: Adds a node to the node ring. Note that the instance is immutable and this operation returns a new instance.
    • $colon$minus

      public ConsistentHash<T> $colon$minus(T node)
      Removes a node from the node ring. Note that the instance is immutable and this operation returns a new instance.
    • remove

      public ConsistentHash<T> remove(T node)
      Java API: Removes a node from the node ring. Note that the instance is immutable and this operation returns a new instance.
    • nodeFor

      public T nodeFor(byte[] key)
      Get the node responsible for the data key. Can only be used if nodes exists in the node ring, otherwise throws IllegalStateException
    • nodeFor

      public T nodeFor(String key)
      Get the node responsible for the data key. Can only be used if nodes exists in the node ring, otherwise throws IllegalStateException
    • isEmpty

      public boolean isEmpty()
      Is the node ring empty, i.e. no nodes added or all removed.