You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2012/02/27 03:52:49 UTC
svn commit: r1294004 -
/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java
Author: markrmiller
Date: Mon Feb 27 02:52:49 2012
New Revision: 1294004
URL: http://svn.apache.org/viewvc?rev=1294004&view=rev
Log:
do not hold the cores lock while calling cancel on recovery
Modified:
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java
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=1294004&r1=1294003&r2=1294004&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 Feb 27 02:52:49 2012
@@ -66,6 +66,7 @@ import org.apache.solr.handler.admin.Cor
import org.apache.solr.handler.component.HttpShardHandlerFactory;
import org.apache.solr.handler.component.ShardHandlerFactory;
import org.apache.solr.schema.IndexSchema;
+import org.apache.solr.update.SolrCoreState;
import org.apache.zookeeper.KeeperException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -485,14 +486,16 @@ public class CoreContainer
* Stops all cores.
*/
public void shutdown() {
- log.info("Shutting down CoreContainer instance="+System.identityHashCode(this));
+ log.info("Shutting down CoreContainer instance="+System.identityHashCode(this));
+ if (isZooKeeperAware()) {
+ cancelCoreRecoveries();
+ }
+
synchronized(cores) {
try {
for (SolrCore core : cores.values()) {
try {
core.close();
- // make sure we wait for any recoveries to stop
- core.getUpdateHandler().getSolrCoreState().cancelRecovery();
} catch (Throwable t) {
SolrException.log(log, "Error shutting down core", t);
}
@@ -512,6 +515,28 @@ public class CoreContainer
}
}
}
+
+ private void cancelCoreRecoveries() {
+ ArrayList<SolrCoreState> coreStates = null;
+ synchronized (cores) {
+ for (SolrCore core : cores.values()) {
+ try {
+ coreStates = new ArrayList<SolrCoreState>(cores.size());
+ // make sure we wait for any recoveries to stop
+ coreStates.add(core.getUpdateHandler().getSolrCoreState());
+ } catch (Throwable t) {
+ SolrException.log(log, "Error canceling recovery for core", t);
+ }
+ }
+ }
+
+ // we must cancel without holding the cores sync
+ if (coreStates != null) {
+ for (SolrCoreState coreState : coreStates) {
+ coreState.cancelRecovery();
+ }
+ }
+ }
@Override
protected void finalize() throws Throwable {