org.apache.ignite.cache.affinity.fair

## Class FairAffinityFunction

- java.lang.Object
- - org.apache.ignite.cache.affinity.fair.FairAffinityFunction

All Implemented Interfaces:
  Serializable, AffinityFunction

    public class FairAffinityFunction
    extends Object
    implements AffinityFunction

Fair affinity function which tries to ensure that all nodes get equal number of partitions with minimum amount of reassignments between existing nodes.

Cache affinity can be configured for individual caches via `CacheConfiguration.getAffinity()` method.

See Also:
  Serialized Form

### Field Summary

Fields
`static int` `DFLT_PART_CNT` Default partition count.

### Constructor Summary

Constructors
Constructor and Description
`FairAffinityFunction()` Creates fair affinity with default partition count.
`FairAffinityFunction(int parts)`

### Method Summary

Methods
`List<List<ClusterNode>>` `assignPartitions(AffinityFunctionContext ctx)` Gets affinity nodes for a 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.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### DFLT_PART_CNT

    public static final int DFLT_PART_CNT

Default partition count.

See Also:
  Constant Field Values

### Constructor Detail

#### FairAffinityFunction

    public FairAffinityFunction()

Creates fair affinity with default partition count.

#### FairAffinityFunction

    public FairAffinityFunction(int parts)

Parameters:
  `parts` - Number of partitions.

### Method Detail

#### assignPartitions

    public List<List<ClusterNode>> assignPartitions(AffinityFunctionContext ctx)

Gets affinity nodes for a partition. In case of replicated cache, all returned nodes are updated in the same manner. In case of partitioned cache, the returned list should contain only the primary and back up nodes with primary node being always first.

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`.

Specified by:
  `assignPartitions` in interface `AffinityFunction`
Parameters:
  `ctx` - Affinity function context. Will provide all required information to calculate new partition assignments.
Returns:
  Unmodifiable list indexed by partition number. Each element of array is a collection in which first node is a primary node and other nodes are backup nodes.

#### reset

    public void reset()

Resets cache affinity to its initial state. This method will be called by the system any time the affinity has been sent to remote node where it has to be reinitialized. If your implementation of affinity function has no initialization logic, leave this method empty.

Specified by:
  `reset` in interface `AffinityFunction`

#### partitions

    public int partitions()

Gets total number of partitions available. All caches should always provide correct partition count which should be the same on all participating nodes. Note that partitions should always be numbered from `0` inclusively to `N` exclusively without any gaps.

Specified by:
  `partitions` in interface `AffinityFunction`
Returns:
  Total partition count.

#### partition

    public int partition(Object key)

Gets partition number for a given key starting from `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.

Specified by:
  `partition` in interface `AffinityFunction`
Parameters:
  `key` - Key to get partition for.
Returns:
  Partition number for a given key.

#### removeNode

    public void removeNode(UUID nodeId)

Removes node from affinity. This method is called when it is safe to remove left node from affinity mapping.

Specified by:
  `removeNode` in interface `AffinityFunction`
Parameters:
  `nodeId` - ID of node to remove.

2015 Copyright © Apache Software Foundation

Follow @ApacheIgnite

Ignite Fabric | : ver. 1.1.0-incubating
Release Date | : May 20 2015