You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2018/04/28 13:42:46 UTC
lucene-solr:branch_7x: LUCENE-8244: Do not leak open file descriptors
in SearcherTaxonomyManager's refresh on exception (Mike McCandless)
Repository: lucene-solr
Updated Branches:
refs/heads/branch_7x f1f572012 -> 9f2eda7a1
LUCENE-8244: Do not leak open file descriptors in SearcherTaxonomyManager's refresh on exception (Mike McCandless)
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/9f2eda7a
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/9f2eda7a
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/9f2eda7a
Branch: refs/heads/branch_7x
Commit: 9f2eda7a1fc6d4cec70a8a76f3401a6bd53a48b1
Parents: f1f5720
Author: Mike McCandless <mi...@apache.org>
Authored: Sat Apr 28 09:42:30 2018 -0400
Committer: Mike McCandless <mi...@apache.org>
Committed: Sat Apr 28 09:42:30 2018 -0400
----------------------------------------------------------------------
lucene/CHANGES.txt | 5 +++-
.../facet/taxonomy/SearcherTaxonomyManager.java | 12 ++++++++-
.../taxonomy/TestSearcherTaxonomyManager.java | 26 ++++++++++++++++++++
3 files changed, 41 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/9f2eda7a/lucene/CHANGES.txt
----------------------------------------------------------------------
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index eb42a1a..1df7796 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -80,6 +80,9 @@ Bug Fixes
the directory has pending deletes files even if the directory is filtered or
a FileSwitchDirectory (Simon Willnauer, Robert Muir)
+* LUCENE-8244: Do not leak open file descriptors in SearcherTaxonomyManager's
+ refresh on exception (Mike McCandless)
+
Other
* LUCENE-8228: removed obsolete IndexDeletionPolicy clone() requirements from
@@ -107,7 +110,7 @@ Build
Documentation
* LUCENE-8238: Improve WordDelimiterFilter and WordDelimiterGraphFilter javadocs
-xo (Mike Sokolov via Mike McCandless)
+ (Mike Sokolov via Mike McCandless)
======================= Lucene 7.3.0 =======================
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/9f2eda7a/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/SearcherTaxonomyManager.java
----------------------------------------------------------------------
diff --git a/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/SearcherTaxonomyManager.java b/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/SearcherTaxonomyManager.java
index 0a81dfb..e618aa5 100644
--- a/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/SearcherTaxonomyManager.java
+++ b/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/SearcherTaxonomyManager.java
@@ -134,7 +134,17 @@ public class SearcherTaxonomyManager extends ReferenceManager<SearcherTaxonomyMa
if (newReader == null) {
return null;
} else {
- DirectoryTaxonomyReader tr = TaxonomyReader.openIfChanged(ref.taxonomyReader);
+ DirectoryTaxonomyReader tr;
+ try {
+ tr = TaxonomyReader.openIfChanged(ref.taxonomyReader);
+ } catch (Throwable t1) {
+ try {
+ IOUtils.close(newReader);
+ } catch (Throwable t2) {
+ t2.addSuppressed(t2);
+ }
+ throw t1;
+ }
if (tr == null) {
ref.taxonomyReader.incRef();
tr = ref.taxonomyReader;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/9f2eda7a/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestSearcherTaxonomyManager.java
----------------------------------------------------------------------
diff --git a/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestSearcherTaxonomyManager.java b/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestSearcherTaxonomyManager.java
index a1e0344..d9a3f8e 100644
--- a/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestSearcherTaxonomyManager.java
+++ b/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestSearcherTaxonomyManager.java
@@ -33,8 +33,10 @@ import org.apache.lucene.facet.FacetsCollector;
import org.apache.lucene.facet.FacetsConfig;
import org.apache.lucene.facet.taxonomy.SearcherTaxonomyManager.SearcherAndTaxonomy;
import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyWriter;
+import org.apache.lucene.index.IndexNotFoundException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.SegmentInfos;
import org.apache.lucene.index.TieredMergePolicy;
import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.search.ReferenceManager;
@@ -321,4 +323,28 @@ public class TestSearcherTaxonomyManager extends FacetTestCase {
IOUtils.close(mgr, tw, taxoDir, indexDir);
}
+ public void testExceptionDuringRefresh() throws Exception {
+
+ Directory indexDir = newDirectory();
+ Directory taxoDir = newDirectory();
+
+ IndexWriter w = new IndexWriter(indexDir, newIndexWriterConfig(new MockAnalyzer(random())));
+ DirectoryTaxonomyWriter tw = new DirectoryTaxonomyWriter(taxoDir);
+ w.commit();
+ tw.commit();
+
+ SearcherTaxonomyManager mgr = new SearcherTaxonomyManager(indexDir, taxoDir, null);
+
+ tw.addCategory(new FacetLabel("a", "b"));
+ w.addDocument(new Document());
+
+ tw.commit();
+ w.commit();
+
+ // intentionally corrupt the taxo index:
+ SegmentInfos infos = SegmentInfos.readLatestCommit(taxoDir);
+ taxoDir.deleteFile(infos.getSegmentsFileName());
+ expectThrows(IndexNotFoundException.class, mgr::maybeRefreshBlocking);
+ IOUtils.close(w, tw, mgr, indexDir, taxoDir);
+ }
}