You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2013/04/08 22:00:15 UTC
svn commit: r1465760 - in
/lucene/dev/trunk/solr/core/src/java/org/apache/solr:
cloud/ZkController.java core/CoreContainer.java
Author: shalin
Date: Mon Apr 8 20:00:15 2013
New Revision: 1465760
URL: http://svn.apache.org/r1465760
Log:
SOLR-3755: Set update log to buffering mode in preRegister before the core can accept any requests
Modified:
lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/ZkController.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/ZkController.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/ZkController.java?rev=1465760&r1=1465759&r2=1465760&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/ZkController.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/ZkController.java Mon Apr 8 20:00:15 2013
@@ -795,25 +795,23 @@ public final class ZkController {
// disable recovery in case shard is in construction state (for shard splits)
Slice slice = getClusterState().getSlice(collection, shardId);
if (Slice.CONSTRUCTION.equals(slice.getState())) {
- core.getUpdateHandler().getUpdateLog().bufferUpdates();
publish(desc, ZkStateReader.ACTIVE);
-
- } else {
- Future<UpdateLog.RecoveryInfo> recoveryFuture = core.getUpdateHandler()
- .getUpdateLog().recoverFromLog();
- if (recoveryFuture != null) {
- recoveryFuture.get(); // NOTE: this could potentially block for
- // minutes or more!
- // TODO: public as recovering in the mean time?
- // TODO: in the future we could do peersync in parallel with recoverFromLog
} else {
- log.info("No LogReplay needed for core="+core.getName() + " baseURL=" + baseUrl);
- }
- boolean didRecovery = checkRecovery(coreName, desc, recoverReloadedCores, isLeader, cloudDesc,
- collection, coreZkNodeName, shardId, leaderProps, core, cc);
- if (!didRecovery) {
- publish(desc, ZkStateReader.ACTIVE);
- }
+ Future<UpdateLog.RecoveryInfo> recoveryFuture = core.getUpdateHandler()
+ .getUpdateLog().recoverFromLog();
+ if (recoveryFuture != null) {
+ recoveryFuture.get(); // NOTE: this could potentially block for
+ // minutes or more!
+ // TODO: public as recovering in the mean time?
+ // TODO: in the future we could do peersync in parallel with recoverFromLog
+ } else {
+ log.info("No LogReplay needed for core=" + core.getName() + " baseURL=" + baseUrl);
+ }
+ boolean didRecovery = checkRecovery(coreName, desc, recoverReloadedCores, isLeader, cloudDesc,
+ collection, coreZkNodeName, shardId, leaderProps, core, cc);
+ if (!didRecovery) {
+ publish(desc, ZkStateReader.ACTIVE);
+ }
}
}
} finally {
@@ -1279,13 +1277,17 @@ public final class ZkController {
downloadFromZK(zkClient, ZkController.CONFIGS_ZKNODE + "/" + configName, dir);
}
- public void preRegister(CoreDescriptor cd) throws KeeperException, InterruptedException {
+ public void preRegister(SolrCore core) throws KeeperException, InterruptedException {
+ CoreDescriptor cd = core.getCoreDescriptor();
// before becoming available, make sure we are not live and active
// this also gets us our assigned shard id if it was not specified
publish(cd, ZkStateReader.DOWN, false);
// shardState and shardRange are for one-time use only, thereafter the actual values in the Slice should be used
- cd.getCloudDescriptor().setShardState(null);
- cd.getCloudDescriptor().setShardRange(null);
+ if (Slice.CONSTRUCTION.equals(cd.getCloudDescriptor().getShardState())) {
+ cd.getCloudDescriptor().setShardState(null);
+ cd.getCloudDescriptor().setShardRange(null);
+ core.getUpdateHandler().getUpdateLog().bufferUpdates();
+ }
String coreNodeName = getCoreNodeName(cd);
// make sure the node name is set on the descriptor
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java?rev=1465760&r1=1465759&r2=1465760&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java Mon Apr 8 20:00:15 2013
@@ -763,7 +763,7 @@ public class CoreContainer
if (zkController != null) {
// this happens before we can receive requests
try {
- zkController.preRegister(core.getCoreDescriptor());
+ zkController.preRegister(core);
} catch (KeeperException e) {
log.error("", e);
throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR,