You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ho...@apache.org on 2018/03/01 01:03:53 UTC

lucene-solr:master: LUCENE-8188: Fixed bugs in OpenNLPOpsFactory that were causing InputStreams fetched from the ResourceLoader to be leaked

Repository: lucene-solr
Updated Branches:
  refs/heads/master 60984536b -> 1bf718948


LUCENE-8188: Fixed bugs in OpenNLPOpsFactory that were causing InputStreams fetched from the ResourceLoader to be leaked


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/1bf71894
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/1bf71894
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/1bf71894

Branch: refs/heads/master
Commit: 1bf718948696e69053bd5b7177b9ed32b5f57015
Parents: 6098453
Author: Chris Hostetter <ho...@apache.org>
Authored: Wed Feb 28 18:03:46 2018 -0700
Committer: Chris Hostetter <ho...@apache.org>
Committed: Wed Feb 28 18:03:46 2018 -0700

----------------------------------------------------------------------
 lucene/CHANGES.txt                              |  4 ++
 .../opennlp/tools/OpenNLPOpsFactory.java        | 49 +++++++++++++-------
 2 files changed, 35 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1bf71894/lucene/CHANGES.txt
----------------------------------------------------------------------
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 345357a..1cf399b 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -184,6 +184,10 @@ Bug Fixes
 * LUCENE-8174: Fixed {Float,Double,Int,Long}Range.toString(). (Oliver Kaleske
   via Adrien Grand)
 
+* LUCENE-8188: Fixed bugs in OpenNLPOpsFactory that were causing InputStreams fetched from the
+  ResourceLoader to be leaked (hossman)
+
+
 Other
 
 * LUCENE-8111: IndexOrDocValuesQuery Javadoc references outdated method name.

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1bf71894/lucene/analysis/opennlp/src/java/org/apache/lucene/analysis/opennlp/tools/OpenNLPOpsFactory.java
----------------------------------------------------------------------
diff --git a/lucene/analysis/opennlp/src/java/org/apache/lucene/analysis/opennlp/tools/OpenNLPOpsFactory.java b/lucene/analysis/opennlp/src/java/org/apache/lucene/analysis/opennlp/tools/OpenNLPOpsFactory.java
index 5348857..84080af 100644
--- a/lucene/analysis/opennlp/src/java/org/apache/lucene/analysis/opennlp/tools/OpenNLPOpsFactory.java
+++ b/lucene/analysis/opennlp/src/java/org/apache/lucene/analysis/opennlp/tools/OpenNLPOpsFactory.java
@@ -59,7 +59,9 @@ public class OpenNLPOpsFactory {
   public static SentenceModel getSentenceModel(String modelName, ResourceLoader loader) throws IOException {
     SentenceModel model = sentenceModels.get(modelName);
     if (model == null) {
-      model = new SentenceModel(loader.openResource(modelName));
+      try (InputStream resource = loader.openResource(modelName)) {
+        model = new SentenceModel(resource);
+      }
       sentenceModels.put(modelName, model);
     }
     return model;
@@ -77,7 +79,9 @@ public class OpenNLPOpsFactory {
   public static TokenizerModel getTokenizerModel(String modelName, ResourceLoader loader) throws IOException {
     TokenizerModel model = tokenizerModels.get(modelName);
     if (model == null) {
-      model = new TokenizerModel(loader.openResource(modelName));
+      try (InputStream resource = loader.openResource(modelName)) {
+        model = new TokenizerModel(resource);
+      }
       tokenizerModels.put(modelName, model);
     }
     return model;
@@ -91,7 +95,9 @@ public class OpenNLPOpsFactory {
   public static POSModel getPOSTaggerModel(String modelName, ResourceLoader loader) throws IOException {
     POSModel model = posTaggerModels.get(modelName);
     if (model == null) {
-      model = new POSModel(loader.openResource(modelName));
+      try (InputStream resource = loader.openResource(modelName)) {
+        model = new POSModel(resource);
+      }
       posTaggerModels.put(modelName, model);
     }
     return model;
@@ -105,7 +111,9 @@ public class OpenNLPOpsFactory {
   public static ChunkerModel getChunkerModel(String modelName, ResourceLoader loader) throws IOException {
     ChunkerModel model = chunkerModels.get(modelName);
     if (model == null) {
-      model = new ChunkerModel(loader.openResource(modelName));
+      try (InputStream resource = loader.openResource(modelName)) {
+        model = new ChunkerModel(resource);
+      }
       chunkerModels.put(modelName, model);
     }
     return model;
@@ -119,7 +127,9 @@ public class OpenNLPOpsFactory {
   public static TokenNameFinderModel getNERTaggerModel(String modelName, ResourceLoader loader) throws IOException {
     TokenNameFinderModel model = nerModels.get(modelName);
     if (model == null) {
-      model = new TokenNameFinderModel(loader.openResource(modelName));
+      try (InputStream resource = loader.openResource(modelName)) {
+        model = new TokenNameFinderModel(resource);
+      }
       nerModels.put(modelName, model);
     }
     return model;
@@ -139,18 +149,19 @@ public class OpenNLPOpsFactory {
   public static String getLemmatizerDictionary(String dictionaryFile, ResourceLoader loader) throws IOException {
     String dictionary = lemmaDictionaries.get(dictionaryFile);
     if (dictionary == null) {
-      Reader reader = new InputStreamReader(loader.openResource(dictionaryFile), StandardCharsets.UTF_8);
-      StringBuilder builder = new StringBuilder();
-      char[] chars = new char[8092];
-      int numRead = 0;
-      do {
-        numRead = reader.read(chars, 0, chars.length);
-        if (numRead > 0) {
-          builder.append(chars, 0, numRead);
-        }
-      } while (numRead > 0);
-      dictionary = builder.toString();
-      lemmaDictionaries.put(dictionaryFile, dictionary);
+      try (Reader reader = new InputStreamReader(loader.openResource(dictionaryFile), StandardCharsets.UTF_8)) {
+        StringBuilder builder = new StringBuilder();
+        char[] chars = new char[8092];
+        int numRead = 0;
+        do {
+          numRead = reader.read(chars, 0, chars.length);
+          if (numRead > 0) {
+            builder.append(chars, 0, numRead);
+          }
+        } while (numRead > 0);
+        dictionary = builder.toString();
+        lemmaDictionaries.put(dictionaryFile, dictionary);
+      }
     }
     return dictionary;
   }
@@ -158,7 +169,9 @@ public class OpenNLPOpsFactory {
   public static LemmatizerModel getLemmatizerModel(String modelName, ResourceLoader loader) throws IOException {
     LemmatizerModel model = lemmatizerModels.get(modelName);
     if (model == null) {
-      model = new LemmatizerModel(loader.openResource(modelName));
+      try (InputStream resource = loader.openResource(modelName)) {
+        model = new LemmatizerModel(resource);
+      }
       lemmatizerModels.put(modelName, model);
     }
     return model;