[
https://issues.apache.org/jira/browse/HADOOP-4829?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12847500#action_12847500
]
Ted Yu commented on HADOOP-4829:
--------------------------------
I saw the following after applying this patch:
Exception in thread "Processor Shutdown Hook" java.lang.IllegalStateException:
Shutdown in progress
at
java.lang.ApplicationShutdownHooks.remove(ApplicationShutdownHooks.java:55)
at java.lang.Runtime.removeShutdownHook(Runtime.java:220)
at org.apache.hadoop.fs.FileSystem$Cache.remove(FileSystem.java:1408)
at org.apache.hadoop.fs.FileSystem$Cache.closeAll(FileSystem.java:1440)
at org.apache.hadoop.fs.FileSystem$Cache.closeAll(FileSystem.java:1417)
at org.apache.hadoop.fs.FileSystem.closeAll(FileSystem.java:202)
Here is the modified Cache.remove() method where IllegalStateException is
handled:
synchronized void remove(Key key, FileSystem fs) {
if (map.containsKey(key) && fs == map.get(key)) {
map.remove(key);
toAutoClose.remove(key);
if (map.isEmpty() && !clientFinalizer.isAlive()) {
try
{
if
(!Runtime.getRuntime().removeShutdownHook(clientFinalizer)) {
LOG.info("Could not cancel cleanup
thread, though no " +
"FileSystems are open");
}
}
// ignore IllegalStateException because Shutdown in
progress
catch (java.lang.IllegalStateException ise)
{
}
}
}
}
> Allow FileSystem shutdown hook to be disabled
> ---------------------------------------------
>
> Key: HADOOP-4829
> URL: https://issues.apache.org/jira/browse/HADOOP-4829
> Project: Hadoop Common
> Issue Type: New Feature
> Components: fs
> Affects Versions: 0.18.1
> Reporter: Bryan Duxbury
> Assignee: Todd Lipcon
> Priority: Minor
> Fix For: 0.21.0
>
> Attachments: HADOOP-4829-0.18.3.patch, hadoop-4829-v2.txt,
> hadoop-4829-v3.txt, hadoop-4829.txt
>
>
> FileSystem sets a JVM shutdown hook so that it can clean up the FileSystem
> cache. This is great behavior when you are writing a client application, but
> when you're writing a server application, like the Collector or an HBase
> RegionServer, you need to control the shutdown of the application and HDFS
> much more closely. If you set your own shutdown hook, there's no guarantee
> that your hook will run before the HDFS one, preventing you from taking some
> shutdown actions.
> The current workaround I've used is to snag the FileSystem shutdown hook via
> Java reflection, disable it, and then run it on my own schedule. I'd really
> appreciate not having to do take this hacky approach. It seems like the right
> way to go about this is to just to add a method to disable the hook directly
> on FileSystem. That way, server applications can elect to disable the
> automatic cleanup and just call FileSystem.closeAll themselves when the time
> is right.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.