[
https://issues.apache.org/jira/browse/AVRO-1715?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14945343#comment-14945343
]
Pavel Safrata commented on AVRO-1715:
-------------------------------------
Thank you for your comments, understood. I think the right approach is closing
the parser in all three cases because the parsers have more resources to
release besides the passed data input. Unfortunately, if I go with disabling
AUTO_CLOSE_SOURCE and closing the parser, the behavior for streams still won't
be fully backward compatible. The reason is that AUTO_CLOSE_SOURCE also closes
the stream "when end-of-input is encountered". So it looks like now, with
AUTO_CLOSE_SOURCE=true and no explicit close() call, the stream is sometimes
closed and sometimes not, depending on whether the parser reads it to the end.
With the proposed modification in place, the stream would always stay open.
I feel uncomfortable contributing a 2/3 fix, but I'm too afraid of fixing the
open files problem and introducing a new one by leaving open streams.
Please review the new patch.
> Compiling a schema leaves the schema file open
> ----------------------------------------------
>
> Key: AVRO-1715
> URL: https://issues.apache.org/jira/browse/AVRO-1715
> Project: Avro
> Issue Type: Bug
> Components: java
> Affects Versions: 1.7.7, 1.8.0
> Reporter: Pavel Safrata
> Fix For: 1.8.0
>
> Attachments: Schema_close_parser.patch
>
>
> The schema compiler leaves the schema file open. This is demonstrated on the
> following code:
> File schemaFile = new File("schema.avsc");
> SpecificCompiler.compileSchema(new File[] { schemaFile }, new File("output"));
> Files.delete(schemaFile.toPath());
> On Windows I get "java.nio.file.FileSystemException: schema.avsc: The process
> cannot access the file because it is being used by another process."
> The problem is in Schema.java, method parse(File). This method creates a
> JsonParser for the schema file but never closes it, so the parser stays open
> together with the FileInputStream created by it. Closing the parser fixes the
> problem. I believe the same should be done for the other types of inputs as
> the json parsers do use more resources that should be freed. So I propose to
> close the parser in the parse(JsonParser) method. I will attach the patch.
> This is almost a blocker for our project and I would really appreciate if we
> can have this resolved for 1.8. Please let me know if that's possible and
> whether I should go ahead with merging the change myself (it's my first
> contribution here).
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)