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/02/23 17:43:55 UTC
lucene-solr:master: SOLR-12021: Fixed a bug in ApiSpec and other JSON
resource loading that was causing unclosed file handles
Repository: lucene-solr
Updated Branches:
refs/heads/master df0f14190 -> 9e0e301f9
SOLR-12021: Fixed a bug in ApiSpec and other JSON resource loading that was causing unclosed file handles
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/9e0e301f
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/9e0e301f
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/9e0e301f
Branch: refs/heads/master
Commit: 9e0e301f9fe4a1b5e33925ae4d2848ead71cca25
Parents: df0f141
Author: Chris Hostetter <ho...@apache.org>
Authored: Fri Feb 23 10:43:22 2018 -0700
Committer: Chris Hostetter <ho...@apache.org>
Committed: Fri Feb 23 10:43:22 2018 -0700
----------------------------------------------------------------------
solr/CHANGES.txt | 2 ++
.../java/org/apache/solr/common/util/Utils.java | 15 ++++++++++++---
.../solr/common/util/ValidatingJsonMap.java | 20 +++++++++++++-------
3 files changed, 27 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/9e0e301f/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 8286065..df7db59 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -223,6 +223,8 @@ Bug Fixes
* SOLR-11971: Don't allow referal to external resources in DataImportHandler's dataConfig request parameter.
(麦 香浓郁, Uwe Schindler)
+* SOLR-12021: Fixed a bug in ApiSpec and other JSON resource loading that was causing unclosed file handles (hossman)
+
Optimizations
----------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/9e0e301f/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/Utils.java b/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
index 4ab24d2..d35486e 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
@@ -23,6 +23,7 @@ import java.io.Reader;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import java.lang.invoke.MethodHandles;
+import java.net.URL;
import java.net.URLDecoder;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
@@ -200,9 +201,17 @@ public class Utils {
}
}
- public static Object fromJSONResource(String resourceName){
- return fromJSON(Utils.class.getClassLoader().getResourceAsStream(resourceName));
-
+ public static Object fromJSONResource(String resourceName) {
+ final URL resource = Utils.class.getClassLoader().getResource(resourceName);
+ if (null == resource) {
+ throw new IllegalArgumentException("invalid resource name: " + resourceName);
+ }
+ try (InputStream stream = resource.openStream()) {
+ return fromJSON(stream);
+ } catch (IOException e) {
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
+ "Resource error: " + e.getMessage(), e);
+ }
}
public static JSONParser getJSONParser(Reader reader){
JSONParser parser = new JSONParser(reader);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/9e0e301f/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java b/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java
index 4edef90..28c0019 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java
@@ -21,6 +21,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
+import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -313,17 +314,22 @@ public class ValidatingJsonMap implements Map<String, Object> {
}
public static ValidatingJsonMap parse(String resourceName, String includeLocation) {
- InputStream is = ValidatingJsonMap.class.getClassLoader().getResourceAsStream(resourceName);
- if (is == null)
+ final URL resource = ValidatingJsonMap.class.getClassLoader().getResource(resourceName);
+ if (null == resource) {
throw new RuntimeException("invalid API spec: " + resourceName);
+ }
ValidatingJsonMap map = null;
- try {
- map = fromJSON(is, includeLocation);
- } catch (Exception e) {
- throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Error in JSON : " + resourceName, e);
+ try (InputStream is = resource.openStream()) {
+ try {
+ map = fromJSON(is, includeLocation);
+ } catch (Exception e) {
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Error in JSON : " + resourceName, e);
+ }
+ } catch (IOException ioe) {
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
+ "Unable to read resource: " + resourceName, ioe);
}
if (map == null) throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Empty value for " + resourceName);
-
return getDeepCopy(map, 5, false);
}