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<Path> 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));