public static class BalancedShardsAllocator.Balancer
extends java.lang.Object
| Constructor | Description |
|---|---|
Balancer(org.apache.logging.log4j.Logger logger,
RoutingAllocation allocation,
BalancedShardsAllocator.WeightFunction weight,
float threshold) |
| Modifier and Type | Method | Description |
|---|---|---|
float |
avgShardsPerNode() |
Returns the global average of shards per node
|
float |
avgShardsPerNode(java.lang.String index) |
Returns the average of shards per node for the given index
|
MoveDecision |
decideMove(ShardRouting shardRouting) |
Makes a decision on whether to move a started shard to another node.
|
void |
moveShards() |
Move started shards that can not be allocated to a node anymore
For each shard to be moved this function executes a move operation
to the minimal eligible node with respect to the
weight function.
|
java.util.Map<DiscoveryNode,java.lang.Float> |
weighShard(ShardRouting shard) |
public Balancer(org.apache.logging.log4j.Logger logger,
RoutingAllocation allocation,
BalancedShardsAllocator.WeightFunction weight,
float threshold)
public float avgShardsPerNode(java.lang.String index)
public float avgShardsPerNode()
public java.util.Map<DiscoveryNode,java.lang.Float> weighShard(ShardRouting shard)
public void moveShards()
ShardRoutingState.RELOCATING and a shadow instance of this
shard is created with an incremented version in the state
ShardRoutingState.INITIALIZING.public MoveDecision decideMove(ShardRouting shardRouting)
MoveDecision return object:
1. If the shard is not started, no decision will be taken and MoveDecision.isDecisionTaken() will return false.
2. If the shard is allowed to remain on its current node, no attempt will be made to move the shard and
MoveDecision.canRemainDecision will have a decision type of YES. All other fields in the object will be null.
3. If the shard is not allowed to remain on its current node, then MoveDecision.getAllocationDecision() will be
populated with the decision of moving to another node. If MoveDecision.forceMove() ()} returns true, then
AbstractAllocationDecision.targetNode will return a non-null value, otherwise the assignedNodeId will be null.
4. If the method is invoked in explain mode (e.g. from the cluster allocation explain APIs), then
AbstractAllocationDecision.nodeDecisions will have a non-null value.