public interface ConsistentHash
ConsistentHashFactory
.
A consistent hash assigns each key a list of owners; the number of owners is defined at creation time,
but the consistent hash is free to return a smaller or a larger number of owners, depending on
circumstances, as long as each key has at least one owner.
The first element in the list of owners is the "primary owner". A key will always have a primary owner.
The other owners are called "backup owners".
This interface gives access to some implementation details of the consistent hash.
Our consistent hashes work by splitting the hash space (the set of possible hash codes) into
fixed segments and then assigning those segments to nodes dynamically. The number of segments
is defined at creation time, and the mapping of keys to segments never changes.
The mapping of segments to nodes can change as the membership of the cache changes.
Normally application code doesn't need to know about this implementation detail, but some
applications may benefit from the knowledge that all the keys that map to one segment are
always located on the same server.Modifier and Type | Method and Description |
---|---|
default Hash |
getHashFunction()
Deprecated.
Since 8.2, the
Hash is optional - replaced in the configuration by the
KeyPartitioner |
List<Address> |
getMembers()
Should return the addresses of the nodes used to create this consistent hash.
|
int |
getNumOwners()
Deprecated.
Since 9.1, it should not be used to obtain the number of owners of a particular key.
|
int |
getNumSegments() |
Set<Integer> |
getPrimarySegmentsForOwner(Address owner)
Returns the segments that this cache member is the primary owner for.
|
String |
getRoutingTableAsString()
Returns a string containing all the segments and their associated addresses.
|
int |
getSegment(Object key)
Deprecated.
Since 9.0, please use
KeyPartitioner.getSegment(Object)
or LocalizedCacheTopology.getSegment(Object) instead. |
Set<Integer> |
getSegmentsForOwner(Address owner)
Returns the segments owned by a cache member.
|
default boolean |
isKeyLocalToNode(Address nodeAddress,
Object key)
Deprecated.
Since 9.0, please use
LocalizedCacheTopology.isReadOwner(Object) and LocalizedCacheTopology.isWriteOwner(Object) instead. |
default boolean |
isReplicated() |
default boolean |
isSegmentLocalToNode(Address nodeAddress,
int segmentId)
Check if a segment is local to a given member.
|
default Set<Address> |
locateAllOwners(Collection<Object> keys)
Deprecated.
Since 9.0, please use
LocalizedCacheTopology.getWriteOwners(Collection) instead. |
default List<Address> |
locateOwners(Object key)
Deprecated.
Since 9.0, please use
LocalizedCacheTopology.getDistribution(Object) instead. |
List<Address> |
locateOwnersForSegment(int segmentId) |
default Address |
locatePrimaryOwner(Object key)
Deprecated.
Since 9.0, please use
LocalizedCacheTopology.getDistribution(Object) instead. |
Address |
locatePrimaryOwnerForSegment(int segmentId) |
default ConsistentHash |
remapAddresses(UnaryOperator<Address> remapper)
Returns a new ConsistentHash with the addresses remapped according to the provided
UnaryOperator . |
default void |
toScopedState(ScopedPersistentState state)
Writes this ConsistentHash to the specified scoped state.
|
@Deprecated int getNumOwners()
@Deprecated default Hash getHashFunction()
Hash
is optional - replaced in the configuration by the
KeyPartitioner
int getNumSegments()
List<Address> getMembers()
@Deprecated default Address locatePrimaryOwner(Object key)
LocalizedCacheTopology.getDistribution(Object)
instead.locateOwners(java.lang.Object)
.
Useful as a performance optimization, as this is a frequently needed information.key
- key to locate@Deprecated default List<Address> locateOwners(Object key)
LocalizedCacheTopology.getDistribution(Object)
instead.key
- key to locatenull
, and it will always have at least 1 element.@Deprecated default Set<Address> locateAllOwners(Collection<Object> keys)
LocalizedCacheTopology.getWriteOwners(Collection)
instead.@Deprecated default boolean isKeyLocalToNode(Address nodeAddress, Object key)
LocalizedCacheTopology.isReadOwner(Object)
and LocalizedCacheTopology.isWriteOwner(Object)
instead.nodeAddress
- address of the node to testkey
- key to testtrue
if the key is mapped to the address; false
otherwise@Deprecated int getSegment(Object key)
KeyPartitioner.getSegment(Object)
or LocalizedCacheTopology.getSegment(Object)
instead.List<Address> locateOwnersForSegment(int segmentId)
Address locatePrimaryOwnerForSegment(int segmentId)
locateOwnersForSegment(segmentId).get(0)
but is more efficientdefault boolean isSegmentLocalToNode(Address nodeAddress, int segmentId)
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.
default boolean isReplicated()
true
if every member owns every segment. This allows callers to skip computing the
segment of a key in some cases.Set<Integer> getSegmentsForOwner(Address owner)
owner
- the address of the memberSet<Integer> getPrimarySegmentsForOwner(Address owner)
owner
- the address of the memberString getRoutingTableAsString()
default void toScopedState(ScopedPersistentState state)
PersistentUUID
sstate
- the state to which this ConsistentHash will be writtendefault ConsistentHash remapAddresses(UnaryOperator<Address> remapper)
UnaryOperator
.
If an address cannot me remapped (i.e. the remapper returns null) this method should return null.remapper
- the remapper which given an address replaces it with another oneCopyright © 2018 JBoss, a division of Red Hat. All rights reserved.