Relocation targets are assigned shards too (#43276)
Adds relocation targets to the output of `IndexShardRoutingTable#assignedShards`.
This commit is contained in:
parent
8b1b9f8ab9
commit
2d9b3a69e8
|
@ -105,6 +105,10 @@ public class IndexShardRoutingTable implements Iterable<ShardRouting> {
|
|||
// create the target initializing shard routing on the node the shard is relocating to
|
||||
allInitializingShards.add(shard.getTargetRelocatingShard());
|
||||
allAllocationIds.add(shard.getTargetRelocatingShard().allocationId().getId());
|
||||
|
||||
assert shard.assignedToNode() : "relocating from unassigned " + shard;
|
||||
assert shard.getTargetRelocatingShard().assignedToNode() : "relocating to unassigned " + shard.getTargetRelocatingShard();
|
||||
assignedShards.add(shard.getTargetRelocatingShard());
|
||||
}
|
||||
if (shard.assignedToNode()) {
|
||||
assignedShards.add(shard);
|
||||
|
@ -211,7 +215,7 @@ public class IndexShardRoutingTable implements Iterable<ShardRouting> {
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns a {@link List} of assigned shards
|
||||
* Returns a {@link List} of assigned shards, including relocation targets
|
||||
*
|
||||
* @return a {@link List} of shards
|
||||
*/
|
||||
|
@ -518,11 +522,6 @@ public class IndexShardRoutingTable implements Iterable<ShardRouting> {
|
|||
if (shardRouting.allocationId().getId().equals(allocationId)) {
|
||||
return shardRouting;
|
||||
}
|
||||
if (shardRouting.relocating()) {
|
||||
if (shardRouting.getTargetRelocatingShard().allocationId().getId().equals(allocationId)) {
|
||||
return shardRouting.getTargetRelocatingShard();
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -194,9 +194,13 @@ public class IndexMetaDataUpdater extends RoutingChangesObserver.AbstractRouting
|
|||
// of replicas was decreased while shards were unassigned.
|
||||
int maxActiveShards = oldIndexMetaData.getNumberOfReplicas() + 1; // +1 for the primary
|
||||
IndexShardRoutingTable newShardRoutingTable = newRoutingTable.shardRoutingTable(shardId);
|
||||
assert newShardRoutingTable.assignedShards().stream()
|
||||
.filter(ShardRouting::isRelocationTarget).map(s -> s.allocationId().getId()).noneMatch(inSyncAllocationIds::contains)
|
||||
: newShardRoutingTable.assignedShards() + " vs " + inSyncAllocationIds;
|
||||
if (inSyncAllocationIds.size() > oldInSyncAllocationIds.size() && inSyncAllocationIds.size() > maxActiveShards) {
|
||||
// trim entries that have no corresponding shard routing in the cluster state (i.e. trim unavailable copies)
|
||||
List<ShardRouting> assignedShards = newShardRoutingTable.assignedShards();
|
||||
List<ShardRouting> assignedShards = newShardRoutingTable.assignedShards()
|
||||
.stream().filter(s -> s.isRelocationTarget() == false).collect(Collectors.toList());
|
||||
assert assignedShards.size() <= maxActiveShards :
|
||||
"cannot have more assigned shards " + assignedShards + " than maximum possible active shards " + maxActiveShards;
|
||||
Set<String> assignedAllocations = assignedShards.stream().map(s -> s.allocationId().getId()).collect(Collectors.toSet());
|
||||
|
|
Loading…
Reference in New Issue