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", () -> {