Class SyncConsistentHashFactory

java.lang.Object
org.infinispan.distribution.ch.impl.SyncConsistentHashFactory
All Implemented Interfaces:
ConsistentHashFactory<DefaultConsistentHash>
Direct Known Subclasses:
TopologyAwareSyncConsistentHashFactory

public class SyncConsistentHashFactory extends Object implements ConsistentHashFactory<DefaultConsistentHash>
ConsistentHashFactory implementation that guarantees that multiple caches with the same members will have the same consistent hash (unlike DefaultConsistentHashFactory).

It has a drawback compared to DefaultConsistentHashFactory though: it can potentially move a lot more segments during a rebalance than strictly necessary. E.g. {0:AB, 1:BA, 2:CD, 3:DA} could turn into {0:BC, 1:CA, 2:CB, 3:AB} when D leaves, even though {0:AB, 1:BA, 2:CB, 3:AC} would require fewer segment ownership changes.

It may also reorder the owners of a segments, e.g. AB -> BA (same as DefaultConsistentHashFactory).

Since:
5.2
Author:
Dan Berindei
  • Constructor Details

    • SyncConsistentHashFactory

      public SyncConsistentHashFactory()
  • Method Details

    • create

      public DefaultConsistentHash create(int numOwners, int numSegments, List<Address> members, Map<Address,Float> capacityFactors)
      Description copied from interface: ConsistentHashFactory
      Create a new consistent hash instance. The consistent hash will be balanced.
      Specified by:
      create in interface ConsistentHashFactory<DefaultConsistentHash>
      Parameters:
      numOwners - The ideal number of owners for each key. The created consistent hash can have more or less owners, but each key will have at least one owner.
      numSegments - Number of hash-space segments. The implementation may round up the number of segments for performance, or may ignore the parameter altogether.
      members - A list of addresses representing the new cache members.
      capacityFactors - The capacity factor of each member. Determines the relative capacity of each node compared to the others. The implementation may ignore this parameter. If null, all the members are assumed to have a capacity factor of 1.
    • fromPersistentState

      public DefaultConsistentHash fromPersistentState(ScopedPersistentState state)
      Description copied from interface: ConsistentHashFactory
      Recreates a ConsistentHash from a previously stored persistent state. The returned ConsistentHash will not have proper addresses, but PersistentUUIDs instead so they will need to be replaced
      Specified by:
      fromPersistentState in interface ConsistentHashFactory<DefaultConsistentHash>
      Parameters:
      state - the state to restore
    • updateMembers

      public DefaultConsistentHash updateMembers(DefaultConsistentHash baseCH, List<Address> newMembers, Map<Address,Float> actualCapacityFactors)
      Description copied from interface: ConsistentHashFactory
      Updates an existing consistent hash instance to remove owners that are not in the newMembers list.

      If a segment has at least one owner in newMembers, this method will not add another owner. This guarantees that the new consistent hash can be used immediately, without transferring any state.

      If a segment has no owners in newMembers and the ConsistentHash implementation (e.g. DefaultConsistentHash) requires at least one owner for each segment, this method may add one or more owners for that segment. Since the data in that segment was lost, the new consistent hash can still be used without transferring state.

      Specified by:
      updateMembers in interface ConsistentHashFactory<DefaultConsistentHash>
      Parameters:
      baseCH - An existing consistent hash instance, should not be null
      newMembers - A list of addresses representing the new cache members.
      actualCapacityFactors - The capacity factor of each member. Determines the relative capacity of each node compared to the others. The implementation may ignore this parameter. If null, all the members are assumed to have a capacity factor of 1.
      Returns:
      A new ConsistentHash instance, or baseCH if the existing instance does not need any changes.
    • rebalance

      public DefaultConsistentHash rebalance(DefaultConsistentHash baseCH)
      Description copied from interface: ConsistentHashFactory
      Create a new consistent hash instance, based on an existing instance, but balanced according to the implementation's rules.
      Specified by:
      rebalance in interface ConsistentHashFactory<DefaultConsistentHash>
      Parameters:
      baseCH - An existing consistent hash instance, should not be null
      Returns:
      A new ConsistentHash instance, or baseCH if the existing instance does not need any changes.
    • union

      Description copied from interface: ConsistentHashFactory
      Creates a union of two compatible ConsistentHashes (use the same hashing function and have the same configuration parameters).

      The owners of a segment s in union(ch1, ch2) will include both the owners of s in ch1 and the owners of s in ch2, so a cache can switch from using union(ch1, ch2) to using ch2 without transferring any state.

      Specified by:
      union in interface ConsistentHashFactory<DefaultConsistentHash>
    • equals

      public boolean equals(Object other)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object