diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/cluster/metadata/MetaDataMappingService.java b/modules/elasticsearch/src/main/java/org/elasticsearch/cluster/metadata/MetaDataMappingService.java index f7b49c1e4ed65..961ee2fe0ce7d 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/cluster/metadata/MetaDataMappingService.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/cluster/metadata/MetaDataMappingService.java @@ -282,13 +282,10 @@ public void putMapping(final PutRequest request, final Listener listener) { for (String index : request.indices) { IndexRoutingTable indexRoutingTable = clusterState.routingTable().index(index); if (indexRoutingTable != null) { - counter += indexRoutingTable.numberOfNodesShardsAreAllocatedOn(); + counter += indexRoutingTable.numberOfNodesShardsAreAllocatedOn(clusterState.nodes().masterNodeId()); } } - if (counter > 0) { - counter = counter - 1; // we already added the mapping on the master here... - } if (counter == 0) { listener.onResponse(new Response(true)); return; diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/cluster/routing/IndexRoutingTable.java b/modules/elasticsearch/src/main/java/org/elasticsearch/cluster/routing/IndexRoutingTable.java index 9ddf5f03844eb..743629cdbf196 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/cluster/routing/IndexRoutingTable.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/cluster/routing/IndexRoutingTable.java @@ -102,12 +102,24 @@ public void validate(RoutingTableValidation validation, MetaData metaData) { return shards.values().iterator(); } - public int numberOfNodesShardsAreAllocatedOn() { + public int numberOfNodesShardsAreAllocatedOn(String... excludedNodes) { Set nodes = Sets.newHashSet(); for (IndexShardRoutingTable shardRoutingTable : this) { for (ShardRouting shardRouting : shardRoutingTable) { if (shardRouting.assignedToNode()) { - nodes.add(shardRouting.currentNodeId()); + String currentNodeId = shardRouting.currentNodeId(); + boolean excluded = false; + if (excludedNodes != null) { + for (String excludedNode : excludedNodes) { + if (currentNodeId.equals(excludedNode)) { + excluded = true; + break; + } + } + } + if (!excluded) { + nodes.add(currentNodeId); + } } } }