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 2020/08/21 16:09:02 UTC
[lucene-solr] branch reference_impl_dev updated: @597 It can always
get a little better.
This is an automated email from the ASF dual-hosted git repository.
markrmiller pushed a commit to branch reference_impl_dev
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/reference_impl_dev by this push:
new c81447b @597 It can always get a little better.
c81447b is described below
commit c81447b7ac83c44b19ea8ca86d5269c207f68042
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Fri Aug 21 11:08:17 2020 -0500
@597 It can always get a little better.
---
.../src/java/org/apache/solr/core/SolrCore.java | 80 +++++++++++-----------
1 file changed, 39 insertions(+), 41 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java b/solr/core/src/java/org/apache/solr/core/SolrCore.java
index baf4985..3b5b4f3 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -80,9 +80,7 @@ import org.apache.solr.client.solrj.impl.BinaryResponseParser;
import org.apache.solr.cloud.CloudDescriptor;
import org.apache.solr.cloud.RecoveryStrategy;
import org.apache.solr.cloud.ZkSolrResourceLoader;
-import org.apache.solr.common.AlreadyClosedException;
import org.apache.solr.common.ParWork;
-import org.apache.solr.common.ParWorkExecService;
import org.apache.solr.common.ParWorkExecutor;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
@@ -90,13 +88,11 @@ import org.apache.solr.common.cloud.ClusterState;
import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.common.cloud.Slice;
import org.apache.solr.common.cloud.SolrZkClient;
-import org.apache.solr.common.cloud.SolrZooKeeper;
import org.apache.solr.common.params.CollectionAdminParams;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.CommonParams.EchoParamStyle;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.params.UpdateParams;
-import org.apache.solr.common.util.ExecutorUtil;
import org.apache.solr.common.util.IOUtils;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.ObjectReleaseTracker;
@@ -164,7 +160,6 @@ import org.apache.solr.update.processor.RunUpdateProcessorFactory;
import org.apache.solr.update.processor.UpdateRequestProcessorChain;
import org.apache.solr.update.processor.UpdateRequestProcessorChain.ProcessorInfo;
import org.apache.solr.update.processor.UpdateRequestProcessorFactory;
-import org.apache.solr.common.util.SolrNamedThreadFactory;
import org.apache.solr.util.IOFunction;
import org.apache.solr.util.NumberUtils;
import org.apache.solr.util.PropertiesInputStream;
@@ -176,7 +171,6 @@ import org.apache.solr.util.plugin.PluginInfoInitialized;
import org.apache.solr.util.plugin.SolrCoreAware;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.data.Stat;
-import org.eclipse.jetty.util.BlockingArrayQueue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -949,6 +943,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
return coreContainer;
}
+ final CountDownLatch searcherReadyLatch = new CountDownLatch(1);
/**
* Creates a new core and register it in the list of cores. If a core with the
@@ -963,8 +958,6 @@ public final class SolrCore implements SolrInfoBean, Closeable {
assert ObjectReleaseTracker.track(this);
this.coreContainer = coreContainer;
- final CountDownLatch latch = new CountDownLatch(1);
-
try {
IndexSchema schema = configSet.getIndexSchema();
@@ -1042,7 +1035,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
// until after inform() has been called for all components.
// searchExecutor must be single-threaded for this to work
searcherExecutor.submit(() -> {
- boolean success = latch.await(10000, TimeUnit.MILLISECONDS);
+ searcherReadyLatch.await(10000, TimeUnit.MILLISECONDS);
return null;
});
@@ -1098,13 +1091,12 @@ public final class SolrCore implements SolrInfoBean, Closeable {
}
resourceLoader.inform(this); // last call before the latch is released.
- latch.countDown();
- failedCreation1 = false;
+ searcherReadyLatch.countDown();
} catch (Throwable e) {
log.error("Error while creating SolrCore", e);
// release the latch, otherwise we block trying to do the close. This
// should be fine, since counting down on a latch of 0 is still fine
- latch.countDown();
+ searcherReadyLatch.countDown();
ParWork.propegateInterrupt(e);
try {
// close down the searcher and any other resources, if it exists, as this
@@ -1580,9 +1572,11 @@ public final class SolrCore implements SolrInfoBean, Closeable {
log.error("Too many close [count:{}] on {}. Please report this exception to solr-user@lucene.apache.org", count, this);
throw new SolrException(ErrorCode.SERVER_ERROR, "Too many closes on SolrCore");
}
- try (ParWork closer = new ParWork(this, true)) {
- log.info("{} CLOSING SolrCore {}", logid, this);
+ log.info("{} CLOSING SolrCore {}", logid, this);
+
+ searcherReadyLatch.countDown();
+ try (ParWork closer = new ParWork(this, true)) {
List<Callable<Object>> closeHookCalls = new ArrayList<>();
if (closeHooks != null) {
@@ -1594,12 +1588,10 @@ public final class SolrCore implements SolrInfoBean, Closeable {
}
}
-
this.isClosed = true;
searcherExecutor.shutdown();
assert ObjectReleaseTracker.release(searcherExecutor);
-
closer.collect("snapshotsDir", () -> {
Directory snapshotsDir = snapshotMgr.getSnapshotsDir();
this.directoryFactory.doneWithDirectory(snapshotsDir);
@@ -1608,31 +1600,6 @@ public final class SolrCore implements SolrInfoBean, Closeable {
return snapshotsDir;
});
-
- closer.collect(searcherExecutor);
- closer.collect("shutdown", () -> {
-
- synchronized (searcherLock) {
- for (RefCounted<SolrIndexSearcher> searcher : _searchers) {
- try {
- searcher.get().close();
- } catch (IOException e) {
- log.error("", e);
- } _realtimeSearchers.clear();
- }
- _searchers.clear();
- for (RefCounted<SolrIndexSearcher> searcher : _realtimeSearchers) {
- try {
- searcher.get().close();
- } catch (IOException e) {
- log.error("", e);
- }
- }
- _realtimeSearchers.clear();
- closeSearcher();
- }
- });
-
List<Callable<Object>> closeCalls = new ArrayList<Callable<Object>>();
closeCalls.addAll(closeHookCalls);
if (unregisterMetrics) {
@@ -1688,6 +1655,37 @@ public final class SolrCore implements SolrInfoBean, Closeable {
closer.collect(updateHandler);
+ closer.collect(searcherExecutor);
+
+ closer.addCollect();
+ closer.collect("closeSearcher", () -> {
+
+ synchronized (searcherLock) {
+ closeSearcher();
+ }
+ });
+ closer.collect("ondeck", () -> {
+
+ synchronized (searcherLock) {
+ for (RefCounted<SolrIndexSearcher> searcher : _searchers) {
+ try {
+ searcher.get().close();
+ } catch (IOException e) {
+ log.error("", e);
+ } _realtimeSearchers.clear();
+ }
+ _searchers.clear();
+ for (RefCounted<SolrIndexSearcher> searcher : _realtimeSearchers) {
+ try {
+ searcher.get().close();
+ } catch (IOException e) {
+ log.error("", e);
+ }
+ }
+ _realtimeSearchers.clear();
+ }
+ });
+
closer.addCollect();
closer.collect("CleanupOldIndexDirs", () -> {