Class DefaultConsistentHash

  • All Implemented Interfaces:
    ConsistentHash

    @Immutable
    public class DefaultConsistentHash
    extends AbstractConsistentHash
    Default ConsistentHash implementation. This object is immutable. Every segment must have a primary owner.
    Since:
    5.2
    Author:
    Dan Berindei, anistor@redhat.com
    • Constructor Detail

      • DefaultConsistentHash

        public DefaultConsistentHash​(org.infinispan.commons.hash.Hash hashFunction,
                                     int numOwners,
                                     int numSegments,
                                     List<Address> members,
                                     Map<Address,​Float> capacityFactors,
                                     List<Address>[] segmentOwners)
    • Method Detail

      • getNumSegments

        public int getNumSegments()
        Returns:
        The actual number of hash space segments. Note that it may not be the same as the number of segments passed in at creation time.
      • getSegmentsForOwner

        public Set<Integer> getSegmentsForOwner​(Address owner)
        Description copied from interface: ConsistentHash
        Returns the segments owned by a cache member.
        Parameters:
        owner - the address of the member
        Returns:
        a non-null set of segment IDs, may or may not be unmodifiable, which shouldn't be modified by caller. The set is empty if owner is not a member of the consistent hash.
      • getPrimarySegmentsForOwner

        public Set<Integer> getPrimarySegmentsForOwner​(Address owner)
        Description copied from interface: ConsistentHash
        Returns the segments that this cache member is the primary owner for.
        Parameters:
        owner - the address of the member
        Returns:
        a non-null set of segment IDs, may or may not be unmodifiable, which shouldn't be modified by caller. The set is empty if owner is not a member of the consistent hash.
      • locateOwnersForSegment

        public List<Address> locateOwnersForSegment​(int segmentId)
        Returns:
        All the nodes that own a given hash space segment, first address is the primary owner. The returned list is unmodifiable.
      • locatePrimaryOwnerForSegment

        public Address locatePrimaryOwnerForSegment​(int segmentId)
        Returns:
        The primary owner of a given hash space segment. This is equivalent to locateOwnersForSegment(segmentId).get(0) but is more efficient
      • getNumOwners

        public int getNumOwners()
        Returns:
        The configured number of owners. Note that the actual number of owners of each key may be different.
      • isSegmentLocalToNode

        public boolean isSegmentLocalToNode​(Address nodeAddress,
                                            int segmentId)
        Description copied from interface: ConsistentHash
        Check if a segment is local to a given member.

        Implementation note: normally key-based method are implemented based on segment-based methods. Here, however, we need a default implementation for the segment-based method for backwards-compatibility reasons.

      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class Object
      • getRoutingTableAsString

        public String getRoutingTableAsString()
        Description copied from interface: ConsistentHash
        Returns a string containing all the segments and their associated addresses.
      • union

        public DefaultConsistentHash union​(DefaultConsistentHash dch2)
        Merges two consistent hash objects that have the same number of segments, numOwners and hash function. For each segment, the primary owner of the first CH has priority, the other primary owners become backups.
      • prettyPrintOwnership

        public String prettyPrintOwnership()
      • remapAddresses

        public ConsistentHash remapAddresses​(UnaryOperator<Address> remapper)
        Description copied from interface: ConsistentHash
        Returns a new ConsistentHash with the addresses remapped according to the provided UnaryOperator. If an address cannot me remapped (i.e. the remapper returns null) this method should return null.
        Parameters:
        remapper - the remapper which given an address replaces it with another one
        Returns:
        the remapped ConsistentHash or null if one of the remapped addresses is null