Author: blue
Date: Wed Oct 7 21:06:28 2015
New Revision: 1707389
URL: http://svn.apache.org/viewvc?rev=1707389&view=rev
Log:
AVRO-1715. Java: Close files opened by the Schema parser. Contributed by Pavel
Safrata.
This also clarifies the InputStream parse method, which does not own the
stream that is passed in and does not close it. The tools have been
updated to correctly close streams passed to the parser.
Modified:
avro/trunk/CHANGES.txt
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/Schema.java
avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/BinaryFragmentToJsonTool.java
avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/CreateRandomFileTool.java
avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/DataFileWriteTool.java
avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/JsonToBinaryFragmentTool.java
avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/Util.java
Modified: avro/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1707389&r1=1707388&r2=1707389&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Wed Oct 7 21:06:28 2015
@@ -195,6 +195,9 @@ Avro 1.8.0 (10 August 2014)
AVRO-1700. C++: Fix avro_BufferStreambuf_hh__ header guard.
(Liu Yanbo via blue)
+ AVRO-1715. Java: Close files opened by the Schema parser.
+ (Pavel Safrata via blue)
+
Avro 1.7.7 (23 July 2014)
NEW FEATURES
Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/Schema.java
URL:
http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/Schema.java?rev=1707389&r1=1707388&r2=1707389&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/Schema.java
(original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/Schema.java Wed Oct
7 21:06:28 2015
@@ -997,9 +997,11 @@ public abstract class Schema extends Jso
}
/** Parse a schema from the provided stream.
- * If named, the schema is added to the names known to this parser. */
+ * If named, the schema is added to the names known to this parser.
+ * The input stream stays open after the parsing. */
public Schema parse(InputStream in) throws IOException {
- return parse(FACTORY.createJsonParser(in));
+ return parse(FACTORY.createJsonParser(in).disable(
+ JsonParser.Feature.AUTO_CLOSE_SOURCE));
}
/** Read a schema from one or more json strings */
@@ -1030,6 +1032,7 @@ public abstract class Schema extends Jso
} catch (JsonParseException e) {
throw new SchemaParseException(e);
} finally {
+ parser.close();
validateNames.set(saved);
VALIDATE_DEFAULTS.set(savedValidateDefaults);
}
Modified:
avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/BinaryFragmentToJsonTool.java
URL:
http://svn.apache.org/viewvc/avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/BinaryFragmentToJsonTool.java?rev=1707389&r1=1707388&r2=1707389&view=diff
==============================================================================
---
avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/BinaryFragmentToJsonTool.java
(original)
+++
avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/BinaryFragmentToJsonTool.java
Wed Oct 7 21:06:28 2015
@@ -66,7 +66,7 @@ public class BinaryFragmentToJsonTool im
schema = new Schema.Parser().parse(nargs.get(0));
inputFile = nargs.get(1);
} else {
- schema = new Schema.Parser().parse(Util.openFromFS(schemaFile));
+ schema = Util.parseSchemaFromFS(schemaFile);
inputFile = nargs.get(0);
}
InputStream input = Util.fileOrStdin(inputFile, stdin);
Modified:
avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/CreateRandomFileTool.java
URL:
http://svn.apache.org/viewvc/avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/CreateRandomFileTool.java?rev=1707389&r1=1707388&r2=1707389&view=diff
==============================================================================
---
avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/CreateRandomFileTool.java
(original)
+++
avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/CreateRandomFileTool.java
Wed Oct 7 21:06:28 2015
@@ -78,7 +78,7 @@ public class CreateRandomFileTool implem
return 1;
}
Schema schema = (schemafile != null)
- ? new Schema.Parser().parse(Util.openFromFS(schemafile))
+ ? Util.parseSchemaFromFS(schemafile)
: new Schema.Parser().parse(schemastr);
DataFileWriter<Object> writer =
Modified:
avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/DataFileWriteTool.java
URL:
http://svn.apache.org/viewvc/avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/DataFileWriteTool.java?rev=1707389&r1=1707388&r2=1707389&view=diff
==============================================================================
---
avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/DataFileWriteTool.java
(original)
+++
avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/DataFileWriteTool.java
Wed Oct 7 21:06:28 2015
@@ -80,7 +80,7 @@ public class DataFileWriteTool implement
return 1;
}
Schema schema = (schemafile != null)
- ? new Schema.Parser().parse(Util.openFromFS(schemafile))
+ ? Util.parseSchemaFromFS(schemafile)
: new Schema.Parser().parse(schemastr);
DatumReader<Object> reader = new GenericDatumReader<Object>(schema);
Modified:
avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/JsonToBinaryFragmentTool.java
URL:
http://svn.apache.org/viewvc/avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/JsonToBinaryFragmentTool.java?rev=1707389&r1=1707388&r2=1707389&view=diff
==============================================================================
---
avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/JsonToBinaryFragmentTool.java
(original)
+++
avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/JsonToBinaryFragmentTool.java
Wed Oct 7 21:06:28 2015
@@ -62,7 +62,7 @@ public class JsonToBinaryFragmentTool im
schema = new Schema.Parser().parse(nargs.get(0));
inputFile = nargs.get(1);
} else {
- schema = new Schema.Parser().parse(Util.openFromFS(schemaFile));
+ schema = Util.parseSchemaFromFS(schemaFile);
inputFile = nargs.get(0);
}
InputStream input = Util.fileOrStdin(inputFile, stdin);
Modified:
avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/Util.java
URL:
http://svn.apache.org/viewvc/avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/Util.java?rev=1707389&r1=1707388&r2=1707389&view=diff
==============================================================================
--- avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/Util.java
(original)
+++ avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/Util.java Wed
Oct 7 21:06:28 2015
@@ -153,6 +153,21 @@ class Util {
}
}
+ /**
+ * Parses a schema from the specified file.
+ * @param filename The file name to parse
+ * @return The parsed schema
+ * @throws IOException
+ */
+ static Schema parseSchemaFromFS(String filename) throws IOException {
+ InputStream stream = openFromFS(filename);
+ try {
+ return new Schema.Parser().parse(stream);
+ } finally {
+ close(stream);
+ }
+ }
+
/**If pathname is a file, this method returns a list with a single absolute
Path to that file,
* if pathname is a directory, this method returns a list of Pathes to all
the files within
* this directory.