You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2020/08/17 00:56:03 UTC

[lucene-solr] 01/02: SOLR-14750: Invoke core reload with core id to avoid multiple reloads

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

noble pushed a commit to branch jira/solr14750
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit f559c73431b85f8187ef916d3e391ab193432451
Author: noblepaul <no...@gmail.com>
AuthorDate: Mon Aug 17 10:41:15 2020 +1000

    SOLR-14750: Invoke core reload with core id to avoid multiple reloads
---
 .../core/src/java/org/apache/solr/core/CoreContainer.java |  7 +++++++
 solr/core/src/java/org/apache/solr/core/SolrCore.java     |  2 +-
 .../src/java/org/apache/solr/handler/IndexFetcher.java    |  2 +-
 .../java/org/apache/solr/handler/SolrConfigHandler.java   | 15 +++------------
 .../src/java/org/apache/solr/schema/SchemaManager.java    |  9 +++------
 .../solr/metrics/reporters/SolrJmxReporterTest.java       |  2 +-
 .../src/test/org/apache/solr/update/VersionInfoTest.java  |  2 +-
 7 files changed, 17 insertions(+), 22 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 b5cd2d7..ac9342f 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -1570,6 +1570,13 @@ public class CoreContainer {
     return ret;
   }
 
+  /**Reload the core asynchronously
+   */
+  public void reloadAsync(SolrCore core) {
+    final String name = core.getName();
+    final UUID coreId = core.uniqueId;
+    runAsync(() -> reload(name, coreId));
+  }
   /**
    * reloads a core
    * refer {@link CoreContainer#reload(String, UUID)} for details
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 a4a6fcf..13f791d 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -3101,7 +3101,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
         if (configHandler.getReloadLock().tryLock()) {
 
           try {
-            cc.reload(coreName);
+            core.getCoreContainer().reloadAsync(core);
           } catch (SolrCoreState.CoreIsClosedException e) {
             /*no problem this core is already closed*/
           } finally {
diff --git a/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java b/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
index 57f8ba0..0f5bb7b 100644
--- a/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
+++ b/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
@@ -948,7 +948,7 @@ public class IndexFetcher {
     final CountDownLatch latch = new CountDownLatch(1);
     new Thread(() -> {
       try {
-        solrCore.getCoreContainer().reload(solrCore.getName());
+        solrCore.getCoreContainer().reload(solrCore.getName(), solrCore.uniqueId);
       } catch (Exception e) {
         log.error("Could not reload core ", e);
       } finally {
diff --git a/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java b/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
index bf59941..05acdc0 100644
--- a/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
@@ -18,17 +18,8 @@ package org.apache.solr.handler;
 
 import java.io.IOException;
 import java.lang.invoke.MethodHandles;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
@@ -547,7 +538,7 @@ public class SolrConfigHandler extends RequestHandlerBase implements SolrCoreAwa
             latestVersion, 30);
       } else {
         SolrResourceLoader.persistConfLocally(loader, ConfigOverlay.RESOURCE_NAME, overlay.toByteArray());
-        req.getCore().getCoreContainer().reload(req.getCore().getName());
+        req.getCore().getCoreContainer().reloadAsync(req.getCore());
         log.info("Executed config commands successfully and persisted to File System {}", ops);
       }
 
diff --git a/solr/core/src/java/org/apache/solr/schema/SchemaManager.java b/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
index 2402e15..cab0664 100644
--- a/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
+++ b/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
@@ -21,10 +21,7 @@ import java.io.InputStream;
 import java.io.StringWriter;
 import java.lang.invoke.MethodHandles;
 import java.nio.charset.StandardCharsets;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.solr.cloud.ZkController;
@@ -132,7 +129,7 @@ public class SchemaManager {
             latestVersion = ZkController.persistConfigResourceToZooKeeper
                 (zkLoader, managedIndexSchema.getSchemaZkVersion(), managedIndexSchema.getResourceName(),
                  sw.toString().getBytes(StandardCharsets.UTF_8), true);
-            req.getCore().getCoreContainer().reload(req.getCore().getName());
+            req.getCore().getCoreContainer().reloadAsync(req.getCore());
             break;
           } catch (ZkController.ResourceModifiedInZkException e) {
             log.info("Schema was modified by another node. Retrying..");
@@ -142,7 +139,7 @@ public class SchemaManager {
             //only for non cloud stuff
             managedIndexSchema.persistManagedSchema(false);
             core.setLatestSchema(managedIndexSchema);
-            core.getCoreContainer().reload(core.getName());
+            core.getCoreContainer().reloadAsync(core);
           } catch (SolrException e) {
             log.warn(errorMsg);
             errors = singletonList(errorMsg + e.getMessage());
diff --git a/solr/core/src/test/org/apache/solr/metrics/reporters/SolrJmxReporterTest.java b/solr/core/src/test/org/apache/solr/metrics/reporters/SolrJmxReporterTest.java
index 58ee10a..77d192e 100644
--- a/solr/core/src/test/org/apache/solr/metrics/reporters/SolrJmxReporterTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/reporters/SolrJmxReporterTest.java
@@ -184,7 +184,7 @@ public class SolrJmxReporterTest extends SolrTestCaseJ4 {
         filter(o -> scope.equals(o.getObjectName().getKeyProperty("scope")) &&
         o.getObjectName().getDomain().equals(rootName)).count());
 
-    h.getCoreContainer().reload(h.getCore().getName());
+    h.getCoreContainer().reload(h.getCore().getName(), h.getCore().uniqueId);
     PluginInfo pluginInfo = createReporterPluginInfo(rootName, true);
     metricManager.loadReporter(coreMetricManager.getRegistryName(), coreMetricManager.getCore(),
         pluginInfo, String.valueOf(coreMetricManager.getCore().hashCode()));
diff --git a/solr/core/src/test/org/apache/solr/update/VersionInfoTest.java b/solr/core/src/test/org/apache/solr/update/VersionInfoTest.java
index de68a50..163a43d 100644
--- a/solr/core/src/test/org/apache/solr/update/VersionInfoTest.java
+++ b/solr/core/src/test/org/apache/solr/update/VersionInfoTest.java
@@ -138,7 +138,7 @@ public class VersionInfoTest extends SolrTestCaseJ4 {
 
     // reload the core, which should reset the max
     CoreContainer coreContainer = req.getCore().getCoreContainer();
-    coreContainer.reload(req.getCore().getName());
+    coreContainer.reload(req.getCore().getName(), req.getCore().uniqueId);
     maxVersionFromUlog = ulog.getMaxVersionFromIndex();
     assertEquals("after reload, max version from ulog should be equal to version of last doc added",
                  maxVersionFromUlog, versionFromIndex);