SOLR-7248: In legacyCloud=false mode we should check if the core was hosted on the same node before registering it

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1668931 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Varun Thacker 2015-03-24 16:35:30 +00:00
parent 5ac2c238cf
commit 2cba11bfa6
2 changed files with 23 additions and 8 deletions

View File

@ -286,6 +286,9 @@ Bug Fixes
* SOLR-7134: Replication can still cause index corruption. (Mark Miller, shalin, Mike Drob)
* SOLR-7248: In legacyCloud=false mode we should check if the core was hosted on the same node before registering it
(Varun Thacker, Noble Paul, Mark Miller)
Optimizations
----------------------

View File

@ -1516,21 +1516,33 @@ public final class ZkController {
CloudDescriptor cloudDesc = cd.getCloudDescriptor();
String coreNodeName = cloudDesc.getCoreNodeName();
assert coreNodeName != null;
if (cloudDesc.getShardId() == null) throw new SolrException(ErrorCode.SERVER_ERROR ,"No shard id for :" + cd);
if (cloudDesc.getShardId() == null) {
throw new SolrException(ErrorCode.SERVER_ERROR ,"No shard id for :" + cd);
}
long endTime = System.nanoTime() + TimeUnit.NANOSECONDS.convert(3, TimeUnit.SECONDS);
String errMessage= null;
for (; System.nanoTime()<endTime; ) {
Thread.sleep(100);
errMessage = null;
String errMessage = null;
while (System.nanoTime() < endTime) {
Slice slice = zkStateReader.getClusterState().getSlice(cd.getCollectionName(), cloudDesc.getShardId());
if (slice == null) {
errMessage = "Invalid slice : " + cloudDesc.getShardId();
continue;
}
if (slice.getReplica(coreNodeName) != null) return;
if (slice.getReplica(coreNodeName) != null) {
Replica replica = slice.getReplica(coreNodeName);
String baseUrl = replica.getStr(BASE_URL_PROP);
String coreName = replica.getStr(CORE_NAME_PROP);
if (baseUrl.equals(this.baseURL) && coreName.equals(cd.getName())) {
return;
} else {
errMessage = "replica with coreNodeName " + coreNodeName + " exists but with a different name or base_url";
}
}
Thread.sleep(100);
}
if(errMessage == null) errMessage = " no_such_replica in clusterstate ,replicaName : " + coreNodeName;
throw new SolrException(ErrorCode.SERVER_ERROR,errMessage + "state : "+ zkStateReader.getClusterState().getCollection(cd.getCollectionName()));
if (errMessage == null) {
errMessage = "replica " + coreNodeName + " is not present in cluster state";
}
throw new SolrException(ErrorCode.SERVER_ERROR, errMessage + ". state : "+ zkStateReader.getClusterState().getCollection(cd.getCollectionName()));
}
}