public class CacheConsistentHashAffinityFunction extends Object implements CacheAffinityFunction
backups
- Use this flag to control how many back up nodes will be
assigned to every key. The default value is 0
.
replicas
- Generally the more replicas a node gets, the more key assignments
it will receive. You can configure different number of replicas for a node by
setting user attribute with name getReplicaCountAttributeName()
to some
number. Default value is 512
defined by DFLT_REPLICA_COUNT
constant.
backupFilter
- Optional filter for back up nodes. If provided, then only
nodes that pass this filter will be selected as backup nodes. If not provided, then
primary and backup nodes will be selected out of all nodes available for this cache.
Cache affinity can be configured for individual caches via CacheConfiguration.getAffinity()
method.
Modifier and Type | Field and Description |
---|---|
static int |
DFLT_PARTITION_COUNT
Default number of partitions.
|
static int |
DFLT_REPLICA_COUNT
Default replica count for partitioned caches.
|
static String |
DFLT_REPLICA_COUNT_ATTR_NAME
Name of node attribute to specify number of replicas for a node.
|
Constructor and Description |
---|
CacheConsistentHashAffinityFunction()
Empty constructor with all defaults.
|
CacheConsistentHashAffinityFunction(boolean exclNeighbors)
Initializes affinity with flag to exclude same-host-neighbors from being backups of each other
and specified number of backups.
|
CacheConsistentHashAffinityFunction(boolean exclNeighbors,
int parts)
Initializes affinity with flag to exclude same-host-neighbors from being backups of each other,
and specified number of backups and partitions.
|
CacheConsistentHashAffinityFunction(int parts,
IgniteBiPredicate<ClusterNode,ClusterNode> backupFilter)
Initializes optional counts for replicas and backups.
|
Modifier and Type | Method and Description |
---|---|
List<List<ClusterNode>> |
assignPartitions(CacheAffinityFunctionContext ctx)
Gets affinity nodes for a partition.
|
IgniteBiPredicate<ClusterNode,ClusterNode> |
getBackupFilter()
Gets optional backup filter.
|
int |
getDefaultReplicas()
Gets default count of virtual replicas in consistent hash ring.
|
CacheAffinityNodeHashResolver |
getHashIdResolver()
Gets hash ID resolver for nodes.
|
int |
getPartitions()
Gets total number of key partitions.
|
String |
getReplicaCountAttributeName()
Gets optional attribute name for replica count.
|
boolean |
isExcludeNeighbors()
Checks flag to exclude same-host-neighbors from being backups of each other (default is
false ). |
Collection<ClusterNode> |
nodes(int part,
Collection<ClusterNode> nodes,
int backups)
Assigns nodes to one partition.
|
int |
partition(Object key)
Gets partition number for a given key starting from
0 . |
int |
partitions()
Gets total number of partitions available.
|
void |
removeNode(UUID nodeId)
Removes node from affinity.
|
void |
reset()
Resets cache affinity to its initial state.
|
void |
setBackupFilter(IgniteBiPredicate<ClusterNode,ClusterNode> backupFilter)
Sets optional backup filter.
|
void |
setDefaultReplicas(int replicas)
Sets default count of virtual replicas in consistent hash ring.
|
void |
setExcludeNeighbors(boolean exclNeighbors)
Sets flag to exclude same-host-neighbors from being backups of each other (default is
false ). |
void |
setHashIdResolver(CacheAffinityNodeHashResolver hashIdRslvr)
Sets hash ID resolver for nodes.
|
void |
setPartitions(int parts)
Sets total number of partitions.
|
void |
setReplicaCountAttributeName(String attrName)
Sets optional attribute name for replica count.
|
String |
toString() |
public static final int DFLT_PARTITION_COUNT
public static final int DFLT_REPLICA_COUNT
public static final String DFLT_REPLICA_COUNT_ATTR_NAME
gg:affinity:node:replicas
.public CacheConsistentHashAffinityFunction()
public CacheConsistentHashAffinityFunction(boolean exclNeighbors)
Note that excludeNeighbors
parameter is ignored if #getBackupFilter()
is set.
exclNeighbors
- True
if nodes residing on the same host may not act as backups
of each other.public CacheConsistentHashAffinityFunction(boolean exclNeighbors, int parts)
Note that excludeNeighbors
parameter is ignored if #getBackupFilter()
is set.
exclNeighbors
- True
if nodes residing on the same host may not act as backups
of each other.parts
- Total number of partitions.public CacheConsistentHashAffinityFunction(int parts, @Nullable IgniteBiPredicate<ClusterNode,ClusterNode> backupFilter)
Note that excludeNeighbors
parameter is ignored if backupFilter
is set.
parts
- Total number of partitions.backupFilter
- Optional back up filter for nodes. If provided, backups will be selected
from all nodes that pass this filter. First argument for this filter is primary node, and second
argument is node being tested.
Note that excludeNeighbors
parameter is ignored if backupFilter
is set.
public int getDefaultReplicas()
To determine node replicas, node attribute with getReplicaCountAttributeName()
name will be checked first. If it is absent, then this value will be used.
public void setDefaultReplicas(int replicas)
To determine node replicas, node attribute with getReplicaCountAttributeName()
name
will be checked first. If it is absent, then this value will be used.
replicas
- Count of virtual replicas in consistent hash ring.spublic int getPartitions()
Note that for fully replicated caches this method should always
return 1
.
public void setPartitions(int parts)
parts
- Total number of partitions.public CacheAffinityNodeHashResolver getHashIdResolver()
Node IDs constantly change when nodes get restarted, which causes them to be placed on different locations in the hash ring, and hence causing repartitioning. Providing an alternate hash ID, which survives node restarts, puts node on the same location on the hash ring, hence minimizing required repartitioning.
public void setHashIdResolver(CacheAffinityNodeHashResolver hashIdRslvr)
Node IDs constantly change when nodes get restarted, which causes them to be placed on different locations in the hash ring, and hence causing repartitioning. Providing an alternate hash ID, which survives node restarts, puts node on the same location on the hash ring, hence minimizing required repartitioning.
hashIdRslvr
- Hash ID resolver.@Nullable public IgniteBiPredicate<ClusterNode,ClusterNode> getBackupFilter()
null
, backups will be selected
from all nodes that pass this filter. First node passed to this filter is primary node,
and second node is a node being tested.
Note that excludeNeighbors
parameter is ignored if backupFilter
is set.
public void setBackupFilter(@Nullable IgniteBiPredicate<ClusterNode,ClusterNode> backupFilter)
Note that excludeNeighbors
parameter is ignored if backupFilter
is set.
backupFilter
- Optional backup filter.public String getReplicaCountAttributeName()
DFLT_REPLICA_COUNT_ATTR_NAME
.public void setReplicaCountAttributeName(String attrName)
DFLT_REPLICA_COUNT_ATTR_NAME
.attrName
- User attribute name for replica count for a node.public boolean isExcludeNeighbors()
false
).
Note that excludeNeighbors
parameter is ignored if #getBackupFilter()
is set.
True
if nodes residing on the same host may not act as backups of each other.public void setExcludeNeighbors(boolean exclNeighbors)
false
).
Note that excludeNeighbors
parameter is ignored if #getBackupFilter()
is set.
exclNeighbors
- True
if nodes residing on the same host may not act as backups of each other.public List<List<ClusterNode>> assignPartitions(CacheAffinityFunctionContext ctx)
Note that partitioned affinity must obey the following contract: given that node
N
is primary for some key K
, if any other node(s) leave
grid and no node joins grid, node N
will remain primary for key K
.
assignPartitions
in interface CacheAffinityFunction
ctx
- Affinity function context. Will provide all required information to calculate
new partition assignments.public Collection<ClusterNode> nodes(int part, Collection<ClusterNode> nodes, int backups)
part
- Partition to assign nodes for.nodes
- Cache topology nodes.public int partition(Object key)
0
. Partitioned caches
should make sure that keys are about evenly distributed across all partitions
from 0
to partition count
for best performance.
Note that for fully replicated caches it is possible to segment key sets among different grid node groups. In that case each node group should return a unique partition number. However, unlike partitioned cache, mappings of keys to nodes in replicated caches are constant and a node cannot migrate from one partition to another.
partition
in interface CacheAffinityFunction
key
- Key to get partition for.public int partitions()
0
inclusively to
N
exclusively without any gaps.partitions
in interface CacheAffinityFunction
public void reset()
reset
in interface CacheAffinityFunction
public void removeNode(UUID nodeId)
removeNode
in interface CacheAffinityFunction
nodeId
- ID of node to remove.
Follow @ApacheIgnite
Apache Ignite Fabric : ver. 1.0.0-RC1 Release Date : February 16 2015