[
https://issues.apache.org/jira/browse/HADOOP-10792?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14057736#comment-14057736
]
Chris Nauroth commented on HADOOP-10792:
----------------------------------------
bq. If I use FileSystem, using newInstance method and not invoke
FileSystem#close makes sense right?
This might not be a good idea depending on exactly how you use the
{{FileSystem}}. For example:
* If you rely on delete-on-exit (see method {{FileSystem#deleteOnExit}}), then
never calling {{FileSystem#close}} means those files might not get deleted in a
timely fashion. They'd still get deleted on JVM process shutdown thanks to a
shutdown hook, but that might not clean up the files quickly enough if you have
a long-running process.
* If this is HDFS, then closing the {{DistributedFileSystem}} instance also
implicitly closes any files that are still held open for write. If your
application was dependent on this behavior, then skipping the close might cause
problems.
* If this is a custom {{FileSystem}}, then the subclass implementors could have
overridden {{close}} and coded any arbitrary cleanup logic that they saw
necessary. It's hard to predict what would happen if you refuse to close when
you consider custom implementations.
In general, I prefer Steve's earlier recommendation.
> Add FileSystem#closeIfNotReferred method
> ----------------------------------------
>
> Key: HADOOP-10792
> URL: https://issues.apache.org/jira/browse/HADOOP-10792
> Project: Hadoop Common
> Issue Type: Improvement
> Components: fs
> Reporter: Kousuke Saruta
>
> FileSystem#close closes FileSystem even if the same instance of FileSystem is
> referred by someone.
> For instance, a library using FileSystem calls FileSystem.get, and a program
> using the library calls FileSystem.get, both of instances of FileSystem is
> same.
> When the library and the program is implemented as different threads and one
> calls FileSystem.close, another fails most of operations of FileSystem.
> So, we need the method like cloesIfNotReferred, which closes FileSystem only
> if a instance of FileSystem is not referred by anyone.
--
This message was sent by Atlassian JIRA
(v6.2#6252)