Return-Path: X-Original-To: apmail-hadoop-common-commits-archive@www.apache.org Delivered-To: apmail-hadoop-common-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 4B42FD382 for ; Tue, 3 Jul 2012 21:39:13 +0000 (UTC) Received: (qmail 51767 invoked by uid 500); 3 Jul 2012 21:39:13 -0000 Delivered-To: apmail-hadoop-common-commits-archive@hadoop.apache.org Received: (qmail 51557 invoked by uid 500); 3 Jul 2012 21:39:13 -0000 Mailing-List: contact common-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: common-dev@hadoop.apache.org Delivered-To: mailing list common-commits@hadoop.apache.org Received: (qmail 51549 invoked by uid 99); 3 Jul 2012 21:39:12 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 03 Jul 2012 21:39:12 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 03 Jul 2012 21:39:11 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 3D9972388980; Tue, 3 Jul 2012 21:38:51 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1356966 - in /hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common: ./ src/main/java/org/apache/hadoop/fs/ src/main/java/org/apache/hadoop/util/ src/test/java/org/apache/hadoop/fs/ src/test/java/org/apache/hadoop/util/ Date: Tue, 03 Jul 2012 21:38:47 -0000 To: common-commits@hadoop.apache.org From: bobby@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120703213851.3D9972388980@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: bobby Date: Tue Jul 3 21:38:44 2012 New Revision: 1356966 URL: http://svn.apache.org/viewvc?rev=1356966&view=rev Log: svn merge -c 1332345 FIXES: HADOOP-8325. Add a ShutdownHookManager to be used by different components instead of the JVM shutdownhook (tucu) Added: hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/ShutdownHookManager.java - copied unchanged from r1332345, hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/ShutdownHookManager.java hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestShutdownHookManager.java - copied unchanged from r1332345, hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestShutdownHookManager.java Modified: hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/CHANGES.txt hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileContext.java hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/RunJar.java hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/StringUtils.java hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileContextDeleteOnExit.java Modified: hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1356966&r1=1356965&r2=1356966&view=diff ============================================================================== --- hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/CHANGES.txt (original) +++ hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/CHANGES.txt Tue Jul 3 21:38:44 2012 @@ -88,6 +88,9 @@ Release 0.23.3 - UNRELEASED HADOOP-8543. Invalid pom.xml files on 0.23 branch (Radim Kolar via bobby) + HADOOP-8325. Add a ShutdownHookManager to be used by different + components instead of the JVM shutdownhook (tucu) + Release 0.23.2 - UNRELEASED NEW FEATURES Modified: hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileContext.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileContext.java?rev=1356966&r1=1356965&r2=1356966&view=diff ============================================================================== --- hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileContext.java (original) +++ hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileContext.java Tue Jul 3 21:38:44 2012 @@ -54,6 +54,7 @@ import org.apache.hadoop.fs.InvalidPathE import org.apache.hadoop.security.AccessControlException; import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.security.token.Token; +import org.apache.hadoop.util.ShutdownHookManager; /** * The FileContext class provides an interface to the application writer for @@ -171,7 +172,12 @@ public final class FileContext { public static final Log LOG = LogFactory.getLog(FileContext.class); public static final FsPermission DEFAULT_PERM = FsPermission.getDefault(); - + + /** + * Priority of the FileContext shutdown hook. + */ + public static final int SHUTDOWN_HOOK_PRIORITY = 20; + /** * List of files that should be deleted on JVM shutdown. */ @@ -1456,8 +1462,8 @@ public final class FileContext { return false; } synchronized (DELETE_ON_EXIT) { - if (DELETE_ON_EXIT.isEmpty() && !FINALIZER.isAlive()) { - Runtime.getRuntime().addShutdownHook(FINALIZER); + if (DELETE_ON_EXIT.isEmpty()) { + ShutdownHookManager.get().addShutdownHook(FINALIZER, SHUTDOWN_HOOK_PRIORITY); } Set set = DELETE_ON_EXIT.get(this); @@ -2215,7 +2221,7 @@ public final class FileContext { /** * Deletes all the paths in deleteOnExit on JVM shutdown. */ - static class FileContextFinalizer extends Thread { + static class FileContextFinalizer implements Runnable { public synchronized void run() { processDeleteOnExit(); } Modified: hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java?rev=1356966&r1=1356965&r2=1356966&view=diff ============================================================================== --- hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java (original) +++ hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java Tue Jul 3 21:38:44 2012 @@ -54,6 +54,7 @@ import org.apache.hadoop.security.UserGr import org.apache.hadoop.security.token.Token; import org.apache.hadoop.util.Progressable; import org.apache.hadoop.util.ReflectionUtils; +import org.apache.hadoop.util.ShutdownHookManager; /**************************************************************** * An abstract base class for a fairly generic filesystem. It @@ -83,6 +84,11 @@ public abstract class FileSystem extends public static final Log LOG = LogFactory.getLog(FileSystem.class); + /** + * Priority of the FileSystem shutdown hook. + */ + public static final int SHUTDOWN_HOOK_PRIORITY = 10; + /** FileSystem cache */ static final Cache CACHE = new Cache(); @@ -2128,8 +2134,8 @@ public abstract class FileSystem extends } // now insert the new file system into the map - if (map.isEmpty() && !clientFinalizer.isAlive()) { - Runtime.getRuntime().addShutdownHook(clientFinalizer); + if (map.isEmpty() ) { + ShutdownHookManager.get().addShutdownHook(clientFinalizer, SHUTDOWN_HOOK_PRIORITY); } fs.key = key; map.put(key, fs); @@ -2144,11 +2150,8 @@ public abstract class FileSystem extends if (map.containsKey(key) && fs == map.get(key)) { map.remove(key); toAutoClose.remove(key); - if (map.isEmpty() && !clientFinalizer.isAlive()) { - if (!Runtime.getRuntime().removeShutdownHook(clientFinalizer)) { - LOG.info("Could not cancel cleanup thread, though no " + - "FileSystems are open"); - } + if (map.isEmpty()) { + ShutdownHookManager.get().removeShutdownHook(clientFinalizer); } } } @@ -2194,7 +2197,7 @@ public abstract class FileSystem extends } } - private class ClientFinalizer extends Thread { + private class ClientFinalizer implements Runnable { public synchronized void run() { try { closeAll(true); Modified: hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/RunJar.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/RunJar.java?rev=1356966&r1=1356965&r2=1356966&view=diff ============================================================================== --- hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/RunJar.java (original) +++ hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/RunJar.java Tue Jul 3 21:38:44 2012 @@ -51,6 +51,11 @@ public class RunJar { public static final Pattern MATCH_ANY = Pattern.compile(".*"); /** + * Priority of the RunJar shutdown hook. + */ + public static final int SHUTDOWN_HOOK_PRIORITY = 10; + + /** * Unpack a jar file into a directory. * * This version unpacks all files inside the jar regardless of filename. @@ -167,11 +172,14 @@ public class RunJar { } ensureDirectory(workDir); - Runtime.getRuntime().addShutdownHook(new Thread() { + ShutdownHookManager.get().addShutdownHook( + new Runnable() { + @Override public void run() { FileUtil.fullyDelete(workDir); } - }); + }, SHUTDOWN_HOOK_PRIORITY); + unJar(file, workDir); Modified: hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/StringUtils.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/StringUtils.java?rev=1356966&r1=1356965&r2=1356966&view=diff ============================================================================== --- hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/StringUtils.java (original) +++ hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/StringUtils.java Tue Jul 3 21:38:44 2012 @@ -46,6 +46,11 @@ import org.apache.hadoop.net.NetUtils; @InterfaceStability.Unstable public class StringUtils { + /** + * Priority of the StringUtils shutdown hook. + */ + public static final int SHUTDOWN_HOOK_PRIORITY = 0; + private static final DecimalFormat decimalFormat; static { NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.ENGLISH); @@ -600,12 +605,15 @@ public class StringUtils { ) ); - Runtime.getRuntime().addShutdownHook(new Thread() { - public void run() { - LOG.info(toStartupShutdownString("SHUTDOWN_MSG: ", new String[]{ - "Shutting down " + classname + " at " + hostname})); - } - }); + ShutdownHookManager.get().addShutdownHook( + new Runnable() { + @Override + public void run() { + LOG.info(toStartupShutdownString("SHUTDOWN_MSG: ", new String[]{ + "Shutting down " + classname + " at " + hostname})); + } + }, SHUTDOWN_HOOK_PRIORITY); + } /** Modified: hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileContextDeleteOnExit.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileContextDeleteOnExit.java?rev=1356966&r1=1356965&r2=1356966&view=diff ============================================================================== --- hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileContextDeleteOnExit.java (original) +++ hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileContextDeleteOnExit.java Tue Jul 3 21:38:44 2012 @@ -21,6 +21,7 @@ import java.io.IOException; import java.util.Set; import junit.framework.Assert; +import org.apache.hadoop.util.ShutdownHookManager; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -65,7 +66,7 @@ public class TestFileContextDeleteOnExit checkDeleteOnExitData(1, fc, file1); // Ensure shutdown hook is added - Assert.assertTrue(Runtime.getRuntime().removeShutdownHook(FileContext.FINALIZER)); + Assert.assertTrue(ShutdownHookManager.get().hasShutdownHook(FileContext.FINALIZER)); Path file2 = getTestRootPath(fc, "dir1/file2"); createFile(fc, file2, numBlocks, blockSize); @@ -79,8 +80,7 @@ public class TestFileContextDeleteOnExit // trigger deleteOnExit and ensure the registered // paths are cleaned up - FileContext.FINALIZER.start(); - FileContext.FINALIZER.join(); + FileContext.FINALIZER.run(); checkDeleteOnExitData(0, fc, new Path[0]); Assert.assertFalse(exists(fc, file1)); Assert.assertFalse(exists(fc, file2));