[ 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.