SOLR-5576: Improve concurrency when registering and waiting for all SolrCore's to register a DOWN state.

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1553178 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Mark Robert Miller 2013-12-23 19:00:14 +00:00
parent 227ce7c228
commit 76f3bbef6e
2 changed files with 12 additions and 4 deletions

View File

@ -227,6 +227,9 @@ Optimizations
* SOLR-5512: Optimize DocValuesFacets. (Robert Muir) * SOLR-5512: Optimize DocValuesFacets. (Robert Muir)
* SOLR-5576: Improve concurrency when registering and waiting for all
SolrCore's to register a DOWN state. (Christine Poerschke via Mark Miller)
Other Changes Other Changes
--------------------- ---------------------

View File

@ -297,7 +297,6 @@ public final class ZkController {
// before registering as live, make sure everyone is in a // before registering as live, make sure everyone is in a
// down state // down state
for (CoreDescriptor descriptor : descriptors) { for (CoreDescriptor descriptor : descriptors) {
final String coreZkNodeName = descriptor.getCloudDescriptor().getCoreNodeName();
try { try {
descriptor.getCloudDescriptor().setLeader(false); descriptor.getCloudDescriptor().setLeader(false);
publish(descriptor, ZkStateReader.DOWN, updateLastPublished); publish(descriptor, ZkStateReader.DOWN, updateLastPublished);
@ -317,7 +316,9 @@ public final class ZkController {
continue; continue;
} }
} }
}
for (CoreDescriptor descriptor : descriptors) {
// if it looks like we are going to be the leader, we don't // if it looks like we are going to be the leader, we don't
// want to wait for the following stuff // want to wait for the following stuff
CloudDescriptor cloudDesc = descriptor.getCloudDescriptor(); CloudDescriptor cloudDesc = descriptor.getCloudDescriptor();
@ -331,19 +332,23 @@ public final class ZkController {
ZkStateReader.COLLECTIONS_ZKNODE + "/" + collection ZkStateReader.COLLECTIONS_ZKNODE + "/" + collection
+ "/leader_elect/" + slice + "/election", null, true).size(); + "/leader_elect/" + slice + "/election", null, true).size();
if (children == 0) { if (children == 0) {
return; log.debug("looks like we are going to be the leader for collection {} shard {}", collection, slice);
continue;
} }
} catch (NoNodeException e) { } catch (NoNodeException e) {
return; log.debug("looks like we are going to be the leader for collection {} shard {}", collection, slice);
continue;
} catch (InterruptedException e2) { } catch (InterruptedException e2) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
} catch (KeeperException e) { } catch (KeeperException e) {
log.warn("", e); log.warn("", e);
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
} }
final String coreZkNodeName = descriptor.getCloudDescriptor().getCoreNodeName();
try { try {
log.debug("calling waitForLeaderToSeeDownState for coreZkNodeName={} collection={} shard={}", new Object[] {coreZkNodeName, collection, slice});
waitForLeaderToSeeDownState(descriptor, coreZkNodeName); waitForLeaderToSeeDownState(descriptor, coreZkNodeName);
} catch (Exception e) { } catch (Exception e) {
SolrException.log(log, "", e); SolrException.log(log, "", e);