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/07/13 14:58:58 UTC
[lucene-solr] 02/02: #112 - Tighten SolrCore leak prevention.
This is an automated email from the ASF dual-hosted git repository.
markrmiller pushed a commit to branch reference_impl
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
commit ea6476de3ca91b6929bf1b85a41b355507ee6931
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Mon Jul 13 09:58:30 2020 -0500
#112 - Tighten SolrCore leak prevention.
---
solr/core/src/java/org/apache/solr/core/CoreContainer.java | 4 ++--
solr/core/src/java/org/apache/solr/core/SolrCores.java | 11 +++++++++--
2 files changed, 11 insertions(+), 4 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 cf125f3..029bdff 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -1651,8 +1651,8 @@ public class CoreContainer implements Closeable {
coreInitFailures.put(cd.getName(), new CoreLoadFailure(cd, e));
throw new SolrException(ErrorCode.SERVER_ERROR, "Unable to reload core [" + cd.getName() + "]", e);
} finally {
- if (!success && newCore != null && newCore.getOpenCount() > 0) {
- IOUtils.closeQuietly(newCore);
+ if (!success && newCore != null) {
+ ParWork.close(newCore);
}
solrCores.removeFromPendingOps(cd.getName());
}
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCores.java b/solr/core/src/java/org/apache/solr/core/SolrCores.java
index e9e1ddf..89067ae 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCores.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCores.java
@@ -127,7 +127,7 @@ class SolrCores implements Closeable {
if (transientSolrCoreCache != null) {
coreList.addAll(transientSolrCoreCache.prepareForShutdown());
}
-
+ cores.clear();
coreList.addAll(pendingCloses);
pendingCloses.forEach((c) -> coreList.add(c));
@@ -159,6 +159,9 @@ class SolrCores implements Closeable {
// Returns the old core if there was a core of the same name.
//WARNING! This should be the _only_ place you put anything into the list of transient cores!
protected SolrCore putCore(CoreDescriptor cd, SolrCore core) {
+ if (isClosed()) {
+ throw new AlreadyClosedException();
+ }
if (cd.isTransient()) {
if (getTransientCacheHandler() != null) {
return getTransientCacheHandler().addCore(cd.getName(), core);
@@ -246,7 +249,7 @@ class SolrCores implements Closeable {
}
protected void swap(String n0, String n1) {
- if (closed) {
+ if (isClosed()) {
throw new AlreadyClosedException();
}
synchronized (cores) {
@@ -281,6 +284,10 @@ class SolrCores implements Closeable {
}
+ private boolean isClosed() {
+ return closed || container.isShutDown();
+ }
+
protected SolrCore remove(String name) {
SolrCore ret = cores.remove(name);
// It could have been a newly-created core. It could have been a transient core. The newly-created cores