You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2015/08/10 15:51:45 UTC

svn commit: r1695069 - in /lucene/dev/trunk/solr: CHANGES.txt core/src/java/org/apache/solr/handler/admin/SegmentsInfoRequestHandler.java

Author: shalin
Date: Mon Aug 10 13:51:45 2015
New Revision: 1695069

URL: http://svn.apache.org/r1695069
Log:
SOLR-7908: SegmentsInfoRequestHandler gets a ref counted IndexWriter and does not properly release it

Modified:
    lucene/dev/trunk/solr/CHANGES.txt
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/SegmentsInfoRequestHandler.java

Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1695069&r1=1695068&r2=1695069&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Mon Aug 10 13:51:45 2015
@@ -376,6 +376,9 @@ Bug Fixes
 * SOLR-7666 (and linked tickets): Many fixes to AngularJS Admin UI bringing it close to feature
   parity with existing UI. (Upayavira)
 
+* SOLR-7908: SegmentsInfoRequestHandler gets a ref counted IndexWriter and does not properly release it.
+  (Mark Miller, shalin)
+
 Optimizations
 ----------------------
 

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/SegmentsInfoRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/SegmentsInfoRequestHandler.java?rev=1695069&r1=1695068&r2=1695069&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/SegmentsInfoRequestHandler.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/SegmentsInfoRequestHandler.java Mon Aug 10 13:51:45 2015
@@ -17,6 +17,7 @@ import org.apache.solr.handler.RequestHa
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.search.SolrIndexSearcher;
+import org.apache.solr.util.RefCounted;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -93,25 +94,26 @@ public class SegmentsInfoRequestHandler
 
   private List<String> getMergeCandidatesNames(SolrQueryRequest req, SegmentInfos infos) throws IOException {
     List<String> result = new ArrayList<String>();
-    IndexWriter indexWriter = getIndexWriter(req);
-    //get chosen merge policy
-    MergePolicy mp = indexWriter.getConfig().getMergePolicy();
-    //Find merges
-    MergeSpecification findMerges = mp.findMerges(MergeTrigger.EXPLICIT, infos, indexWriter);
-    if (findMerges != null && findMerges.merges != null && findMerges.merges.size() > 0) {
-      for (OneMerge merge : findMerges.merges) {
-        //TODO: add merge grouping
-        for (SegmentCommitInfo mergeSegmentInfo : merge.segments) {
-          result.add(mergeSegmentInfo.info.name);
+    RefCounted<IndexWriter> refCounted = req.getCore().getSolrCoreState().getIndexWriter(req.getCore());
+    try {
+      IndexWriter indexWriter = refCounted.get();
+      //get chosen merge policy
+      MergePolicy mp = indexWriter.getConfig().getMergePolicy();
+      //Find merges
+      MergeSpecification findMerges = mp.findMerges(MergeTrigger.EXPLICIT, infos, indexWriter);
+      if (findMerges != null && findMerges.merges != null && findMerges.merges.size() > 0) {
+        for (OneMerge merge : findMerges.merges) {
+          //TODO: add merge grouping
+          for (SegmentCommitInfo mergeSegmentInfo : merge.segments) {
+            result.add(mergeSegmentInfo.info.name);
+          }
         }
       }
-    }
-
-    return result;
-  }
 
-  private IndexWriter getIndexWriter(SolrQueryRequest req) throws IOException {
-    return req.getCore().getSolrCoreState().getIndexWriter(req.getCore()).get();
+      return result;
+    } finally {
+      refCounted.decref();
+    }
   }
 
   @Override