Skip to content

Commit c6182cb

Browse files
author
Yannick Welsch
committed
Fail replica shards before primary shards
As failing primaries also fail associated replicas, we must fail replicas first so that their nodes are properly added to ignore list Closes #15686
1 parent 387bdbd commit c6182cb

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

core/src/main/java/org/elasticsearch/cluster/routing/allocation/AllocationService.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646

4747
import java.util.ArrayList;
4848
import java.util.Collections;
49+
import java.util.Comparator;
4950
import java.util.List;
5051
import java.util.Objects;
5152
import java.util.Set;
@@ -181,7 +182,10 @@ public RoutingAllocation.Result applyFailedShards(ClusterState clusterState, Lis
181182
routingNodes.unassigned().shuffle();
182183
FailedRerouteAllocation allocation = new FailedRerouteAllocation(allocationDeciders, routingNodes, clusterState.nodes(), failedShards, clusterInfoService.getClusterInfo());
183184
boolean changed = false;
184-
for (FailedRerouteAllocation.FailedShard failedShard : failedShards) {
185+
// as failing primaries also fail associated replicas, we fail replicas first here so that their nodes are added to ignore list
186+
List<FailedRerouteAllocation.FailedShard> orderedFailedShards = new ArrayList<>(failedShards);
187+
orderedFailedShards.sort(Comparator.comparing(failedShard -> failedShard.shard.primary()));
188+
for (FailedRerouteAllocation.FailedShard failedShard : orderedFailedShards) {
185189
changed |= applyFailedShard(allocation, failedShard.shard, true, new UnassignedInfo(UnassignedInfo.Reason.ALLOCATION_FAILED, failedShard.message, failedShard.failure,
186190
System.nanoTime(), System.currentTimeMillis()));
187191
}

0 commit comments

Comments
 (0)