Class ShardCoordinator.AbstractShardAllocationStrategy

java.lang.Object
org.apache.pekko.cluster.sharding.ShardCoordinator.AbstractShardAllocationStrategy
All Implemented Interfaces:
NoSerializationVerificationNeeded, ShardCoordinator.ShardAllocationStrategy
Enclosing class:
ShardCoordinator

public abstract static class ShardCoordinator.AbstractShardAllocationStrategy extends Object implements ShardCoordinator.ShardAllocationStrategy
Java API: Java implementations of custom shard allocation and rebalancing logic used by the ShardCoordinator should extend this abstract class and implement the two methods.

Implement ShardCoordinator.StartableAllocationStrategy as well to receive a start() callback on the coordinator node before any calls to allocateShard or rebalance. Initialization in start() must not block.

The coordinator supplies read-only snapshots of the current allocations and shards being rebalanced. Shard ids are iterated in allocation order. Allocation values are java.util.Lists, so an implementation can count the shards of a region in constant time without downcasting; the wildcard lets a caller pass a map whose values use a concrete list type such as ArrayList. Java overrides must declare the parameter with the same wildcard, narrowing it to java.util.List is a compile error.

  • Constructor Details

    • AbstractShardAllocationStrategy

      public AbstractShardAllocationStrategy()
  • Method Details

    • allocateShard

      public final scala.concurrent.Future<ActorRef> allocateShard(ActorRef requester, String shardId, scala.collection.immutable.Map<ActorRef,scala.collection.immutable.IndexedSeq<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:
      a Future of 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
    • allocateShard

      public abstract CompletionStage<ActorRef> allocateShard(ActorRef requester, String shardId, Map<ActorRef,? extends List<String>> currentShardAllocations)
      Invoked when the location of a new shard is to be decided.

      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:
      a CompletionStage of 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 (in Pekko 1.x, this was a Scala Future)
    • rebalance

      public final scala.concurrent.Future<scala.collection.immutable.Set<String>> rebalance(scala.collection.immutable.Map<ActorRef,scala.collection.immutable.IndexedSeq<String>> currentShardAllocations, scala.collection.immutable.Set<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:
      a Future of the shards to be migrated, may be empty to skip rebalance in this round
    • rebalance

      public abstract CompletionStage<Set<String>> rebalance(Map<ActorRef,? extends List<String>> currentShardAllocations, Set<String> rebalanceInProgress)
      Invoked periodically to decide which shards to rebalance to another location.

      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:
      a CompletionStage of the shards to be migrated, may be empty to skip rebalance in this round (in Pekko 1.x, this was a Scala Future)