public static class BalancedShardsAllocator.Balancer
extends java.lang.Object
Constructor and Description |
---|
Balancer(org.apache.logging.log4j.Logger logger,
RoutingAllocation allocation,
BalancedShardsAllocator.WeightFunction weight,
float threshold) |
Modifier and Type | Method and 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.