You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-issues@hadoop.apache.org by "Ted Yu (JIRA)" <ji...@apache.org> on 2010/03/19 19:28:27 UTC

[jira] Commented: (HADOOP-4829) Allow FileSystem shutdown hook to be disabled

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