Test distinctNodes
This commit is contained in:
parent
d195ef258b
commit
9cbb23f3d7
|
@ -584,11 +584,11 @@ public class IndexShardRoutingTable implements Iterable<ShardRouting> {
|
|||
|
||||
public IndexShardRoutingTable build() {
|
||||
// don't allow more than one shard copy with same id to be allocated to same node
|
||||
assert distinctNodes() : "more than one shard with same id assigned to same node (shards: " + shards + ")";
|
||||
assert distinctNodes(shards) : "more than one shard with same id assigned to same node (shards: " + shards + ")";
|
||||
return new IndexShardRoutingTable(shardId, Collections.unmodifiableList(new ArrayList<>(shards)));
|
||||
}
|
||||
|
||||
private boolean distinctNodes() {
|
||||
static boolean distinctNodes(List<ShardRouting> shards) {
|
||||
Set<String> nodes = new HashSet<>();
|
||||
for (ShardRouting shard : shards) {
|
||||
if (shard.assignedToNode()) {
|
||||
|
|
|
@ -28,9 +28,12 @@ import org.elasticsearch.cluster.node.DiscoveryNodes;
|
|||
import org.elasticsearch.cluster.node.DiscoveryNodes.Builder;
|
||||
import org.elasticsearch.cluster.routing.allocation.AllocationService;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.IndexNotFoundException;
|
||||
import org.elasticsearch.index.shard.ShardId;
|
||||
import org.junit.Before;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
@ -328,6 +331,19 @@ public class RoutingTableTests extends ESAllocationTestCase {
|
|||
expectThrows(IllegalStateException.class, () -> indexRoutingTable.validate(metaData4));
|
||||
}
|
||||
|
||||
public void testDistinctNodes() {
|
||||
ShardId shardId = new ShardId(new Index("index", "uuid"), 0);
|
||||
ShardRouting routing1 = TestShardRouting.newShardRouting(shardId, "node1", randomBoolean(), ShardRoutingState.STARTED);
|
||||
ShardRouting routing2 = TestShardRouting.newShardRouting(shardId, "node2", randomBoolean(), ShardRoutingState.STARTED);
|
||||
ShardRouting routing3 = TestShardRouting.newShardRouting(shardId, "node1", randomBoolean(), ShardRoutingState.STARTED);
|
||||
ShardRouting routing4 = TestShardRouting.newShardRouting(shardId, "node3", "node2", randomBoolean(), ShardRoutingState.RELOCATING);
|
||||
assertTrue(IndexShardRoutingTable.Builder.distinctNodes(Arrays.asList(routing1, routing2)));
|
||||
assertFalse(IndexShardRoutingTable.Builder.distinctNodes(Arrays.asList(routing1, routing3)));
|
||||
assertFalse(IndexShardRoutingTable.Builder.distinctNodes(Arrays.asList(routing1, routing2, routing3)));
|
||||
assertTrue(IndexShardRoutingTable.Builder.distinctNodes(Arrays.asList(routing1, routing4)));
|
||||
assertFalse(IndexShardRoutingTable.Builder.distinctNodes(Arrays.asList(routing2, routing4)));
|
||||
}
|
||||
|
||||
/** reverse engineer the in sync aid based on the given indexRoutingTable **/
|
||||
public static IndexMetaData updateActiveAllocations(IndexRoutingTable indexRoutingTable, IndexMetaData indexMetaData) {
|
||||
IndexMetaData.Builder imdBuilder = IndexMetaData.builder(indexMetaData);
|
||||
|
|
Loading…
Reference in New Issue