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