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/11/09 15:14:11 UTC

[lucene-solr] branch reference_impl_dev updated (54b8ee6 -> 0535e62)

This is an automated email from the ASF dual-hosted git repository.

markrmiller pushed a change to branch reference_impl_dev
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git.


    from 54b8ee6  @1115 Bring these executors back to the root thread pool.
     new f4aa65b  @1116 Inc ref core state last, init rest manager sooner.
     new 0535e62  @1117 Make core close get the reload lock.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../java/org/apache/solr/core/CoreContainer.java   | 27 +++++++------
 .../src/java/org/apache/solr/core/SolrCore.java    | 44 +++++++++++++++-------
 2 files changed, 46 insertions(+), 25 deletions(-)


[lucene-solr] 01/02: @1116 Inc ref core state last, init rest manager sooner.

Posted by ma...@apache.org.
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

commit f4aa65b6e77dfa9255d2ec5ab7a43576aedcf1d5
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Mon Nov 9 08:56:23 2020 -0600

    @1116 Inc ref core state last, init rest manager sooner.
---
 solr/core/src/java/org/apache/solr/core/SolrCore.java | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 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 d6caa54..bded8f3 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -976,10 +976,8 @@ public final class SolrCore implements SolrInfoBean, Closeable {
 
     this.coreContainer = coreContainer;
 
+
     try {
-      if (reload) {
-        updateHandler.getSolrCoreState().increfSolrCoreState();
-      }
 
       IndexSchema schema = configSet.getIndexSchema();
 
@@ -991,11 +989,16 @@ public final class SolrCore implements SolrInfoBean, Closeable {
       this.solrConfig = configSet.getSolrConfig();
       this.resourceLoader = configSet.getSolrConfig().getResourceLoader();
       this.configSetProperties = configSet.getProperties();
+
+      // Initialize the RestManager
+      restManager = initRestManager(cd);
+      
       // Initialize the metrics manager
       this.coreMetricManager = initCoreMetricManager(solrConfig);
       solrMetricsContext = coreMetricManager.getSolrMetricsContext();
       this.coreMetricManager.loadReporters();
 
+
       if (updateHandler == null) {
         directoryFactory = initDirectoryFactory();
         recoveryStrategyBuilder = initRecoveryStrategyBuilder();
@@ -1068,9 +1071,6 @@ public final class SolrCore implements SolrInfoBean, Closeable {
 
       initSearcher(prev);
 
-      // Initialize the RestManager
-      restManager = initRestManager(cd);
-
       // Finally tell anyone who wants to know
       resourceLoader.inform(resourceLoader);
 
@@ -1105,9 +1105,13 @@ public final class SolrCore implements SolrInfoBean, Closeable {
       searcherReadyLatch.countDown();
 
       // seed version buckets with max from index during core initialization ... requires a searcher!
-      //if (!reload) { // reload could move to a different index
+      //if (!reload) { // TODO: reload could move to a different index?
         seedVersionBuckets();
      // }
+
+      if (reload) {
+        updateHandler.getSolrCoreState().increfSolrCoreState();
+      }
     } catch (Throwable e) {
       log.error("Error while creating SolrCore", e);
       // release the latch, otherwise we block trying to do the close. This


[lucene-solr] 02/02: @1117 Make core close get the reload lock.

Posted by ma...@apache.org.
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

commit 0535e62ed65125a01483f9fef03c8a15d58bf1c8
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Mon Nov 9 09:13:40 2020 -0600

    @1117 Make core close get the reload lock.
---
 .../java/org/apache/solr/core/CoreContainer.java   | 27 ++++++++++++---------
 .../src/java/org/apache/solr/core/SolrCore.java    | 28 +++++++++++++++-------
 2 files changed, 36 insertions(+), 19 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index 408d601..b857a7d 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -1626,18 +1626,23 @@ public class CoreContainer implements Closeable {
           solrCores.waitForLoadingCoreToFinish(name, 15000);
           ConfigSet coreConfig = coreConfigService.loadConfigSet(cd);
           log.info("Reloading SolrCore '{}' using configuration from {}", name, coreConfig.getName());
-          newCore = core.reload(coreConfig);
-
           DocCollection docCollection = null;
-          if (getZkController() != null) {
-            docCollection = getZkController().getClusterState().getCollection(cd.getCollectionName());
-            // turn off indexing now, before the new core is registered
-            if (docCollection.getBool(ZkStateReader.READ_ONLY, false)) {
-              newCore.readOnly = true;
-            }
-          }
-
-          registerCore(cd, newCore, false, false);
+          newCore = core.reload(coreConfig);
+         try {
+           if (getZkController() != null) {
+             docCollection = getZkController().getClusterState().getCollection(cd.getCollectionName());
+             // turn off indexing now, before the new core is registered
+             if (docCollection.getBool(ZkStateReader.READ_ONLY, false)) {
+               newCore.readOnly = true;
+             }
+           }
+
+           registerCore(cd, newCore, false, false);
+         } catch (Exception e) {
+           log.error("Exception registering reloaded core", e);
+           newCore.close();
+           throw new SolrException(ErrorCode.SERVER_ERROR, e);
+         }
 
           // force commit on old core if the new one is readOnly and prevent any new updates
           if (newCore.readOnly) {
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 bded8f3..bbc1837 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -710,6 +710,10 @@ public final class SolrCore implements SolrInfoBean, Closeable {
 
   public SolrCore reload(ConfigSet coreConfig) throws IOException {
     log.info("Reload SolrCore");
+
+    if (isClosed || isClosing()) {
+      throw new AlreadyClosedException();
+    }
     // only one reload at a time
     synchronized (getUpdateHandler().getSolrCoreState().getReloadLock()) {
       final SolrCore currentCore;
@@ -992,7 +996,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
 
       // Initialize the RestManager
       restManager = initRestManager(cd);
-      
+
       // Initialize the metrics manager
       this.coreMetricManager = initCoreMetricManager(solrConfig);
       solrMetricsContext = coreMetricManager.getSolrMetricsContext();
@@ -1586,9 +1590,19 @@ public final class SolrCore implements SolrInfoBean, Closeable {
    */
   @Override
   public void close() {
+    if (getUpdateHandler() != null && getUpdateHandler().getSolrCoreState() != null) {
+      synchronized (getUpdateHandler().getSolrCoreState().getReloadLock()) {
+        doClose();
+      }
+    } else {
+      doClose();
+    }
+  }
+
+  private void doClose() {
     int count = refCount.decrementAndGet();
     if (log.isTraceEnabled()) log.trace("close refcount {} {}", this, count);
-    if (count > 0) return; // close is called often, and only actually closes if nothing is using it.
+    if (count > 0) return;
     if (count < 0) {
       log.warn("Too many close [count:{}] on {}", count, this);
       throw new SolrException(ErrorCode.SERVER_ERROR, "Too many closes on SolrCore");
@@ -1624,7 +1638,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
       closeCalls.addAll(closeHookCalls);
       if (unregisterMetrics) {
         closeCalls.add(() -> {
-         // IOUtils.closeQuietly(coreMetricManager);
+          // IOUtils.closeQuietly(coreMetricManager);
           return "SolrCoreMetricManager";
         });
       }
@@ -1676,7 +1690,8 @@ public final class SolrCore implements SolrInfoBean, Closeable {
               searcher.get().close();
             } catch (IOException e) {
               log.error("", e);
-            }          _realtimeSearchers.clear();
+            }
+            _realtimeSearchers.clear();
           }
           _searchers.clear();
           for (RefCounted<SolrIndexSearcher> searcher : _realtimeSearchers) {
@@ -1706,7 +1721,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
       closer.collect();
 
       assert ObjectReleaseTracker.release(searcherExecutor);
-      closer.collect("", ()->{
+      closer.collect("", () -> {
         if (!searcherExecutor.isTerminated()) {
           searcherExecutor.shutdownNow();
         }
@@ -1742,8 +1757,6 @@ public final class SolrCore implements SolrInfoBean, Closeable {
 
       closer.collect("PostCloseHooks", closeHookCalls);
 
-
-
     } finally {
       infoRegistry.clear();
 
@@ -1755,7 +1768,6 @@ public final class SolrCore implements SolrInfoBean, Closeable {
       }
       assert ObjectReleaseTracker.release(this);
     }
-
   }
 
   /**