diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/gateway/local/LocalGatewayNodeAllocation.java b/modules/elasticsearch/src/main/java/org/elasticsearch/gateway/local/LocalGatewayNodeAllocation.java index 3f58a501439..aedadad0952 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/gateway/local/LocalGatewayNodeAllocation.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/gateway/local/LocalGatewayNodeAllocation.java @@ -154,8 +154,11 @@ public class LocalGatewayNodeAllocation extends NodeAllocation { RoutingNodes routingNodes = allocation.routingNodes(); for (IndexRoutingTable indexRoutingTable : routingNodes.routingTable()) { - // TODO we need to also handle a case where all shards per replication group are unassigned, in that case, we ignore until we - // manage to find a place to allocate them... + // only do the allocation if there is a local "INDEX NOT RECOVERED" block + if (!routingNodes.blocks().hasIndexBlock(indexRoutingTable.index(), LocalGateway.INDEX_NOT_RECOVERED_BLOCK)) { + continue; + } + if (indexRoutingTable.allPrimaryShardsUnassigned()) { // all primary are unassigned for the index, see if we can allocate it on existing nodes, if not, don't assign Set nodesIds = Sets.newHashSet(); @@ -245,7 +248,6 @@ public class LocalGatewayNodeAllocation extends NodeAllocation { return changed; } - // go ahead and see if we can optimize replica allocation to an existing node... Iterator unassignedIterator = routingNodes.unassigned().iterator(); while (unassignedIterator.hasNext()) { MutableShardRouting shard = unassignedIterator.next();