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
|
// create the target initializing shard routing on the node the shard is relocating to
|
||||||
allInitializingShards.add(shard.getTargetRelocatingShard());
|
allInitializingShards.add(shard.getTargetRelocatingShard());
|
||||||
allAllocationIds.add(shard.getTargetRelocatingShard().allocationId().getId());
|
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()) {
|
if (shard.assignedToNode()) {
|
||||||
assignedShards.add(shard);
|
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
|
* @return a {@link List} of shards
|
||||||
*/
|
*/
|
||||||
|
@ -518,11 +522,6 @@ public class IndexShardRoutingTable implements Iterable<ShardRouting> {
|
||||||
if (shardRouting.allocationId().getId().equals(allocationId)) {
|
if (shardRouting.allocationId().getId().equals(allocationId)) {
|
||||||
return shardRouting;
|
return shardRouting;
|
||||||
}
|
}
|
||||||
if (shardRouting.relocating()) {
|
|
||||||
if (shardRouting.getTargetRelocatingShard().allocationId().getId().equals(allocationId)) {
|
|
||||||
return shardRouting.getTargetRelocatingShard();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -194,9 +194,13 @@ public class IndexMetaDataUpdater extends RoutingChangesObserver.AbstractRouting
|
||||||
// of replicas was decreased while shards were unassigned.
|
// of replicas was decreased while shards were unassigned.
|
||||||
int maxActiveShards = oldIndexMetaData.getNumberOfReplicas() + 1; // +1 for the primary
|
int maxActiveShards = oldIndexMetaData.getNumberOfReplicas() + 1; // +1 for the primary
|
||||||
IndexShardRoutingTable newShardRoutingTable = newRoutingTable.shardRoutingTable(shardId);
|
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) {
|
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)
|
// 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 :
|
assert assignedShards.size() <= maxActiveShards :
|
||||||
"cannot have more assigned shards " + assignedShards + " than maximum possible active shards " + 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());
|
Set<String> assignedAllocations = assignedShards.stream().map(s -> s.allocationId().getId()).collect(Collectors.toSet());
|
||||||
|
|
Loading…
Reference in New Issue