You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-user@hadoop.apache.org by Ted Yu <yu...@gmail.com> on 2010/03/10 06:47:22 UTC

Re: (Strange!)getFileSystem in JVM shutdown hook throws shutdown in progress exception

By the time run() gets executed, main() has already started shutdown.
Can you perform some action in main() - now it's empty.

On Tue, Mar 9, 2010 at 9:39 PM, Silllllence <wi...@yahoo.cn> wrote:

>
> Hi fellows
> Below code segment add a shutdown hook to JVM, but when I got a strange
> exception,
> java.lang.IllegalStateException: Shutdown in progress
>        at
> java.lang.ApplicationShutdownHooks.add(ApplicationShutdownHooks.java:39)
>        at java.lang.Runtime.addShutdownHook(Runtime.java:192)
>        at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1387)
>        at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:191)
>        at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:95)
>        at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:180)
>        at org.apache.hadoop.fs.Path.getFileSystem(Path.java:175)
>        at young.Main$1.run(Main.java:21)
> Java doc said this exception is threw when the virtual machine is already
> in
> the process of shutting down, (http://java.sun.com/j2se/1.5.0/docs/api/),
> what does this mean? Why this happen? How to fix ?
> I'm really appreciate if you can try this code, and help me to figure out
> what's going on here, thank you !
>
> ---------------------------------------------------------------------------------------
> import org.apache.hadoop.conf.Configuration;
> import org.apache.hadoop.fs.FileSystem;
> import org.apache.hadoop.fs.Path;
> import org.apache.hadoop.mapred.JobConf;
>
> @SuppressWarnings("deprecation")
> public class Main {
>
>        public static void main(String[] args) {
>                Runtime.getRuntime().addShutdownHook(new Thread() {
>                        @Override
>                        public void run() {
>                                Path path = new Path("/temp/hadoop-young");
>                                System.out.println("Thread run : " + path);
>                                Configuration conf = new JobConf();
>                                FileSystem fs;
>                                try {
>                                        fs = path.getFileSystem(conf);
>                                        if(fs.exists(path)){
>                                                fs.delete(path);
>                                        }
>                                } catch (Exception e) {
>                                        System.err.println(e.getMessage());
>                                        e.printStackTrace();
>                                }
>                        };
>                });
>        }
> }
> --
> View this message in context:
> http://old.nabble.com/%28Strange%21%29getFileSystem-in-JVM-shutdown-hook-throws-shutdown-in-progress-exception-tp27845803p27845803.html
> Sent from the Hadoop core-user mailing list archive at Nabble.com.
>
>