akka.contrib.pattern
Class ShardCoordinator.LeastShardAllocationStrategy

java.lang.Object
  extended by akka.contrib.pattern.ShardCoordinator.LeastShardAllocationStrategy
All Implemented Interfaces:
NoSerializationVerificationNeeded, ShardCoordinator.ShardAllocationStrategy, java.io.Serializable
Enclosing class:
ShardCoordinator

public static class ShardCoordinator.LeastShardAllocationStrategy
extends java.lang.Object
implements ShardCoordinator.ShardAllocationStrategy, scala.Serializable

The default implementation of ShardCoordinator.LeastShardAllocationStrategy allocates new shards to the ShardRegion with least number of previously allocated shards. It picks shards for rebalancing handoff from the ShardRegion with most number of previously allocated shards. They will then be allocated to the ShardRegion with least number of previously allocated shards, i.e. new members in the cluster. There is a configurable threshold of how large the difference must be to begin the rebalancing. The number of ongoing rebalancing processes can be limited.

See Also:
Serialized Form

Constructor Summary
ShardCoordinator.LeastShardAllocationStrategy(int rebalanceThreshold, int maxSimultaneousRebalance)
           
 
Method Summary
 ActorRef allocateShard(ActorRef requester, java.lang.String shardId, scala.collection.immutable.Map<ActorRef,scala.collection.immutable.IndexedSeq<java.lang.String>> currentShardAllocations)
          Invoked when the location of a new shard is to be decided.
 scala.collection.immutable.Set<java.lang.String> rebalance(scala.collection.immutable.Map<ActorRef,scala.collection.immutable.IndexedSeq<java.lang.String>> currentShardAllocations, scala.collection.immutable.Set<java.lang.String> rebalanceInProgress)
          Invoked periodically to decide which shards to rebalance to another location.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ShardCoordinator.LeastShardAllocationStrategy

public ShardCoordinator.LeastShardAllocationStrategy(int rebalanceThreshold,
                                                     int maxSimultaneousRebalance)
Method Detail

allocateShard

public ActorRef allocateShard(ActorRef requester,
                              java.lang.String shardId,
                              scala.collection.immutable.Map<ActorRef,scala.collection.immutable.IndexedSeq<java.lang.String>> currentShardAllocations)
Description copied from interface: ShardCoordinator.ShardAllocationStrategy
Invoked when the location of a new shard is to be decided.

Specified by:
allocateShard in interface ShardCoordinator.ShardAllocationStrategy
Parameters:
requester - actor reference to the ShardRegion that requested the location of the shard, can be returned if preference should be given to the node where the shard was first accessed
shardId - the id of the shard to allocate
currentShardAllocations - all actor refs to ShardRegion and their current allocated shards, in the order they were allocated
Returns:
the actor ref of the ShardRegion that is to be responsible for the shard, must be one of the references included in the currentShardAllocations parameter

rebalance

public scala.collection.immutable.Set<java.lang.String> rebalance(scala.collection.immutable.Map<ActorRef,scala.collection.immutable.IndexedSeq<java.lang.String>> currentShardAllocations,
                                                                  scala.collection.immutable.Set<java.lang.String> rebalanceInProgress)
Description copied from interface: ShardCoordinator.ShardAllocationStrategy
Invoked periodically to decide which shards to rebalance to another location.

Specified by:
rebalance in interface ShardCoordinator.ShardAllocationStrategy
Parameters:
currentShardAllocations - all actor refs to ShardRegion and their current allocated shards, in the order they were allocated
rebalanceInProgress - set of shards that are currently being rebalanced, i.e. you should not include these in the returned set
Returns:
the shards to be migrated, may be empty to skip rebalance in this round