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