Add assertion that checks that the same shard with same id is not added to same node
This commit is contained in:
parent
2d3a52c0f2
commit
7099f10909
|
@ -33,6 +33,7 @@ import java.io.IOException;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
@ -572,14 +573,6 @@ public class IndexShardRoutingTable implements Iterable<ShardRouting> {
|
|||
}
|
||||
|
||||
public Builder addShard(ShardRouting shardEntry) {
|
||||
for (ShardRouting shard : shards) {
|
||||
// don't add two that map to the same node id
|
||||
// we rely on the fact that a node does not have primary and backup of the same shard
|
||||
if (shard.assignedToNode() && shardEntry.assignedToNode()
|
||||
&& shard.currentNodeId().equals(shardEntry.currentNodeId())) {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
shards.add(shardEntry);
|
||||
return this;
|
||||
}
|
||||
|
@ -590,9 +583,28 @@ 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 + ")";
|
||||
return new IndexShardRoutingTable(shardId, Collections.unmodifiableList(new ArrayList<>(shards)));
|
||||
}
|
||||
|
||||
private boolean distinctNodes() {
|
||||
Set<String> nodes = new HashSet<>();
|
||||
for (ShardRouting shard : shards) {
|
||||
if (shard.assignedToNode()) {
|
||||
if (nodes.add(shard.currentNodeId()) == false) {
|
||||
return false;
|
||||
}
|
||||
if (shard.relocating()) {
|
||||
if (nodes.add(shard.relocatingNodeId()) == false) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static IndexShardRoutingTable readFrom(StreamInput in) throws IOException {
|
||||
Index index = new Index(in);
|
||||
return readFromThin(in, index);
|
||||
|
|
Loading…
Reference in New Issue