You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ab...@apache.org on 2020/05/04 12:59:08 UTC
[lucene-solr] branch master updated: SOLR-14431:
SegmentsInfoRequestHandler does not release IndexWriter.
This is an automated email from the ASF dual-hosted git repository.
ab pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/master by this push:
new 5eea489 SOLR-14431: SegmentsInfoRequestHandler does not release IndexWriter.
5eea489 is described below
commit 5eea489e447be1bbc291d1465fca8b40c1f46d11
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Mon May 4 14:43:43 2020 +0200
SOLR-14431: SegmentsInfoRequestHandler does not release IndexWriter.
---
solr/CHANGES.txt | 2 ++
.../solr/handler/admin/SegmentsInfoRequestHandler.java | 2 +-
.../handler/admin/SegmentsInfoRequestHandlerTest.java | 16 ++++++++++++++--
3 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 50f2614..584ebaf 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -150,6 +150,8 @@ Bug Fixes
* SOLR-14421: New examples in solr.in.cmd in Solr 8.5 don't work as provided (Colvin Cowie via janhoy)
+* SOLR-14431: SegmentsInfoRequestHandler does not release IndexWriter (Tiziano Degaetano, ab)
+
Other Changes
---------------------
* SOLR-14197: SolrResourceLoader: marked many methods as deprecated, and in some cases rerouted exiting logic to avoid
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/SegmentsInfoRequestHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/SegmentsInfoRequestHandler.java
index 19d9d81..9183dcf 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/SegmentsInfoRequestHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/SegmentsInfoRequestHandler.java
@@ -127,7 +127,6 @@ public class SegmentsInfoRequestHandler extends RequestHandlerBase {
SimpleOrderedMap<Object> segmentInfos = new SimpleOrderedMap<>();
SolrCore core = req.getCore();
- RefCounted<IndexWriter> iwRef = core.getSolrCoreState().getIndexWriter(core);
SimpleOrderedMap<Object> infosInfo = new SimpleOrderedMap<>();
Version minVersion = infos.getMinSegmentLuceneVersion();
if (minVersion != null) {
@@ -149,6 +148,7 @@ public class SegmentsInfoRequestHandler extends RequestHandlerBase {
coreInfo.add("indexDir", core.getIndexDir());
coreInfo.add("sizeInGB", (double)core.getIndexSize() / GB);
+ RefCounted<IndexWriter> iwRef = core.getSolrCoreState().getIndexWriter(core);
if (iwRef != null) {
try {
IndexWriter iw = iwRef.get();
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/SegmentsInfoRequestHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/SegmentsInfoRequestHandlerTest.java
index 06d3da5..23c0df5 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/SegmentsInfoRequestHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/SegmentsInfoRequestHandlerTest.java
@@ -17,11 +17,14 @@
package org.apache.solr.handler.admin;
import java.io.IOException;
+
+import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.SegmentCommitInfo;
import org.apache.lucene.index.SegmentInfos;
import org.apache.lucene.util.Version;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.index.NoMergePolicyFactory;
+import org.apache.solr.util.RefCounted;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -35,6 +38,8 @@ public class SegmentsInfoRequestHandlerTest extends SolrTestCaseJ4 {
private static final int DEL_COUNT = 1;
private static final int NUM_SEGMENTS = 2;
+
+ private static int initialRefCount;
@BeforeClass
public static void beforeClass() throws Exception {
@@ -69,11 +74,18 @@ public class SegmentsInfoRequestHandlerTest extends SolrTestCaseJ4 {
NUM_SEGMENTS, numSegments);
return null;
});
-
+ // see SOLR-14431
+ RefCounted<IndexWriter> iwRef = h.getCore().getSolrCoreState().getIndexWriter(h.getCore());
+ initialRefCount = iwRef.getRefcount();
+ iwRef.decref();
}
@AfterClass
- public static void afterClass() {
+ public static void afterClass() throws Exception {
+ RefCounted<IndexWriter> iwRef = h.getCore().getSolrCoreState().getIndexWriter(h.getCore());
+ int finalRefCount = iwRef.getRefcount();
+ iwRef.decref();
+ assertEquals("IW refcount mismatch", initialRefCount, finalRefCount);
systemClearPropertySolrTestsMergePolicyFactory();
System.clearProperty("solr.tests.maxBufferedDocs");
System.clearProperty("solr.tests.ramBufferSizeMB");