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);