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 Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract 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.final scala.concurrent.Future<ActorRef>allocateShard(ActorRef requester, String shardId, scala.collection.immutable.Map<ActorRef, scala.collection.immutable.IndexedSeq<String>> currentShardAllocations) Invoked when the location of a new shard is to be decided.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.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) Invoked periodically to decide which shards to rebalance to another location.
-
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.ShardAllocationStrategyInvoked when the location of a new shard is to be decided.- Specified by:
allocateShardin interfaceShardCoordinator.ShardAllocationStrategy- Parameters:
requester- actor reference to theShardRegionthat requested the location of the shard, can be returned if preference should be given to the node where the shard was first accessedshardId- the id of the shard to allocatecurrentShardAllocations- all actor refs toShardRegionand their current allocated shards, in the order they were allocated- Returns:
- a
Futureof the actor ref of theShardRegionthat is to be responsible for the shard, must be one of the references included in thecurrentShardAllocationsparameter
-
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 theShardRegionthat requested the location of the shard, can be returned if preference should be given to the node where the shard was first accessedshardId- the id of the shard to allocatecurrentShardAllocations- all actor refs toShardRegionand their current allocated shards, in the order they were allocated- Returns:
- a
CompletionStageof the actor ref of theShardRegionthat is to be responsible for the shard, must be one of the references included in thecurrentShardAllocationsparameter (in Pekko 1.x, this was a ScalaFuture)
-
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.ShardAllocationStrategyInvoked periodically to decide which shards to rebalance to another location.- Specified by:
rebalancein interfaceShardCoordinator.ShardAllocationStrategy- Parameters:
currentShardAllocations- all actor refs toShardRegionand their current allocated shards, in the order they were allocatedrebalanceInProgress- set of shards that are currently being rebalanced, i.e. you should not include these in the returned set- Returns:
- a
Futureof 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 toShardRegionand their current allocated shards, in the order they were allocatedrebalanceInProgress- set of shards that are currently being rebalanced, i.e. you should not include these in the returned set- Returns:
- a
CompletionStageof the shards to be migrated, may be empty to skip rebalance in this round (in Pekko 1.x, this was a ScalaFuture)
-