|
@@ -17,7 +17,6 @@ import org.elasticsearch.cluster.health.ClusterHealthStatus;
|
|
|
import org.elasticsearch.cluster.metadata.AutoExpandReplicas;
|
|
|
import org.elasticsearch.cluster.metadata.IndexMetadata;
|
|
|
import org.elasticsearch.cluster.metadata.Metadata;
|
|
|
-import org.elasticsearch.cluster.metadata.SingleNodeShutdownMetadata;
|
|
|
import org.elasticsearch.cluster.metadata.SingleNodeShutdownMetadata.Type;
|
|
|
import org.elasticsearch.cluster.node.DiscoveryNode;
|
|
|
import org.elasticsearch.cluster.routing.IndexRoutingTable;
|
|
@@ -49,7 +48,7 @@ import java.util.Comparator;
|
|
|
import java.util.Iterator;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
-import java.util.Optional;
|
|
|
+import java.util.Objects;
|
|
|
import java.util.Set;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.function.Supplier;
|
|
@@ -519,23 +518,24 @@ public class AllocationService {
|
|
|
}
|
|
|
|
|
|
private static void disassociateDeadNodes(RoutingAllocation allocation) {
|
|
|
- Map<String, SingleNodeShutdownMetadata> nodesShutdownMetadata = allocation.metadata().nodeShutdowns();
|
|
|
-
|
|
|
for (Iterator<RoutingNode> it = allocation.routingNodes().mutableIterator(); it.hasNext();) {
|
|
|
RoutingNode node = it.next();
|
|
|
if (allocation.nodes().getDataNodes().containsKey(node.nodeId())) {
|
|
|
// its a live node, continue
|
|
|
continue;
|
|
|
}
|
|
|
- final UnassignedInfo.Reason unassignedReason = nodesShutdownMetadata.containsKey(node.nodeId())
|
|
|
+
|
|
|
+ var nodeShutdownMetadata = allocation.metadata().nodeShutdowns().get(node.nodeId());
|
|
|
+ var unassignedReason = nodeShutdownMetadata != null && Objects.equals(nodeShutdownMetadata.getType(), Type.RESTART)
|
|
|
? UnassignedInfo.Reason.NODE_RESTARTING
|
|
|
: UnassignedInfo.Reason.NODE_LEFT;
|
|
|
+ boolean delayedDueToKnownRestart = nodeShutdownMetadata != null
|
|
|
+ && Objects.equals(nodeShutdownMetadata.getType(), Type.RESTART)
|
|
|
+ && nodeShutdownMetadata.getAllocationDelay().nanos() > 0;
|
|
|
+
|
|
|
// now, go over all the shards routing on the node, and fail them
|
|
|
for (ShardRouting shardRouting : node.copyShards()) {
|
|
|
final IndexMetadata indexMetadata = allocation.metadata().getIndexSafe(shardRouting.index());
|
|
|
- boolean delayedDueToKnownRestart = Optional.ofNullable(nodesShutdownMetadata.get(node.nodeId()))
|
|
|
- .map(shutdown -> Type.RESTART.equals(shutdown.getType()) && shutdown.getAllocationDelay().nanos() > 0)
|
|
|
- .orElse(false);
|
|
|
boolean delayed = delayedDueToKnownRestart
|
|
|
|| INDEX_DELAYED_NODE_LEFT_TIMEOUT_SETTING.get(indexMetadata.getSettings()).nanos() > 0;
|
|
|
|