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

This commit is contained in:
Chris Hostetter 2018-02-28 18:03:46 -07:00
parent 60984536b0
commit 1bf7189486
2 changed files with 35 additions and 18 deletions

View File

@ -184,6 +184,10 @@ Bug Fixes
* LUCENE-8174: Fixed {Float,Double,Int,Long}Range.toString(). (Oliver Kaleske * LUCENE-8174: Fixed {Float,Double,Int,Long}Range.toString(). (Oliver Kaleske
via Adrien Grand) via Adrien Grand)
* LUCENE-8188: Fixed bugs in OpenNLPOpsFactory that were causing InputStreams fetched from the
ResourceLoader to be leaked (hossman)
Other Other
* LUCENE-8111: IndexOrDocValuesQuery Javadoc references outdated method name. * LUCENE-8111: IndexOrDocValuesQuery Javadoc references outdated method name.

View File

@ -59,7 +59,9 @@ public class OpenNLPOpsFactory {
public static SentenceModel getSentenceModel(String modelName, ResourceLoader loader) throws IOException { public static SentenceModel getSentenceModel(String modelName, ResourceLoader loader) throws IOException {
SentenceModel model = sentenceModels.get(modelName); SentenceModel model = sentenceModels.get(modelName);
if (model == null) { if (model == null) {
model = new SentenceModel(loader.openResource(modelName)); try (InputStream resource = loader.openResource(modelName)) {
model = new SentenceModel(resource);
}
sentenceModels.put(modelName, model); sentenceModels.put(modelName, model);
} }
return model; return model;
@ -77,7 +79,9 @@ public class OpenNLPOpsFactory {
public static TokenizerModel getTokenizerModel(String modelName, ResourceLoader loader) throws IOException { public static TokenizerModel getTokenizerModel(String modelName, ResourceLoader loader) throws IOException {
TokenizerModel model = tokenizerModels.get(modelName); TokenizerModel model = tokenizerModels.get(modelName);
if (model == null) { if (model == null) {
model = new TokenizerModel(loader.openResource(modelName)); try (InputStream resource = loader.openResource(modelName)) {
model = new TokenizerModel(resource);
}
tokenizerModels.put(modelName, model); tokenizerModels.put(modelName, model);
} }
return model; return model;
@ -91,7 +95,9 @@ public class OpenNLPOpsFactory {
public static POSModel getPOSTaggerModel(String modelName, ResourceLoader loader) throws IOException { public static POSModel getPOSTaggerModel(String modelName, ResourceLoader loader) throws IOException {
POSModel model = posTaggerModels.get(modelName); POSModel model = posTaggerModels.get(modelName);
if (model == null) { if (model == null) {
model = new POSModel(loader.openResource(modelName)); try (InputStream resource = loader.openResource(modelName)) {
model = new POSModel(resource);
}
posTaggerModels.put(modelName, model); posTaggerModels.put(modelName, model);
} }
return model; return model;
@ -105,7 +111,9 @@ public class OpenNLPOpsFactory {
public static ChunkerModel getChunkerModel(String modelName, ResourceLoader loader) throws IOException { public static ChunkerModel getChunkerModel(String modelName, ResourceLoader loader) throws IOException {
ChunkerModel model = chunkerModels.get(modelName); ChunkerModel model = chunkerModels.get(modelName);
if (model == null) { if (model == null) {
model = new ChunkerModel(loader.openResource(modelName)); try (InputStream resource = loader.openResource(modelName)) {
model = new ChunkerModel(resource);
}
chunkerModels.put(modelName, model); chunkerModels.put(modelName, model);
} }
return model; return model;
@ -119,7 +127,9 @@ public class OpenNLPOpsFactory {
public static TokenNameFinderModel getNERTaggerModel(String modelName, ResourceLoader loader) throws IOException { public static TokenNameFinderModel getNERTaggerModel(String modelName, ResourceLoader loader) throws IOException {
TokenNameFinderModel model = nerModels.get(modelName); TokenNameFinderModel model = nerModels.get(modelName);
if (model == null) { if (model == null) {
model = new TokenNameFinderModel(loader.openResource(modelName)); try (InputStream resource = loader.openResource(modelName)) {
model = new TokenNameFinderModel(resource);
}
nerModels.put(modelName, model); nerModels.put(modelName, model);
} }
return model; return model;
@ -139,7 +149,7 @@ public class OpenNLPOpsFactory {
public static String getLemmatizerDictionary(String dictionaryFile, ResourceLoader loader) throws IOException { public static String getLemmatizerDictionary(String dictionaryFile, ResourceLoader loader) throws IOException {
String dictionary = lemmaDictionaries.get(dictionaryFile); String dictionary = lemmaDictionaries.get(dictionaryFile);
if (dictionary == null) { if (dictionary == null) {
Reader reader = new InputStreamReader(loader.openResource(dictionaryFile), StandardCharsets.UTF_8); try (Reader reader = new InputStreamReader(loader.openResource(dictionaryFile), StandardCharsets.UTF_8)) {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
char[] chars = new char[8092]; char[] chars = new char[8092];
int numRead = 0; int numRead = 0;
@ -152,13 +162,16 @@ public class OpenNLPOpsFactory {
dictionary = builder.toString(); dictionary = builder.toString();
lemmaDictionaries.put(dictionaryFile, dictionary); lemmaDictionaries.put(dictionaryFile, dictionary);
} }
}
return dictionary; return dictionary;
} }
public static LemmatizerModel getLemmatizerModel(String modelName, ResourceLoader loader) throws IOException { public static LemmatizerModel getLemmatizerModel(String modelName, ResourceLoader loader) throws IOException {
LemmatizerModel model = lemmatizerModels.get(modelName); LemmatizerModel model = lemmatizerModels.get(modelName);
if (model == null) { if (model == null) {
model = new LemmatizerModel(loader.openResource(modelName)); try (InputStream resource = loader.openResource(modelName)) {
model = new LemmatizerModel(resource);
}
lemmatizerModels.put(modelName, model); lemmatizerModels.put(modelName, model);
} }
return model; return model;