You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ar...@apache.org on 2018/01/12 16:04:32 UTC
hadoop git commit: HDFS-12984. BlockPoolSlice can leak in a mini dfs
cluster. Contributed by Ajay Kumar.
Repository: hadoop
Updated Branches:
refs/heads/trunk 128d773a2 -> b278f7b29
HDFS-12984. BlockPoolSlice can leak in a mini dfs cluster. Contributed by Ajay Kumar.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/b278f7b2
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/b278f7b2
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/b278f7b2
Branch: refs/heads/trunk
Commit: b278f7b29305cb67d22ef0bb08b067c422381f48
Parents: 128d773
Author: Arpit Agarwal <ar...@apache.org>
Authored: Fri Jan 12 08:04:00 2018 -0800
Committer: Arpit Agarwal <ar...@apache.org>
Committed: Fri Jan 12 08:04:00 2018 -0800
----------------------------------------------------------------------
.../datanode/fsdataset/impl/BlockPoolSlice.java | 23 +++++++++++++-------
1 file changed, 15 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/b278f7b2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/BlockPoolSlice.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/BlockPoolSlice.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/BlockPoolSlice.java
index 6b1ee3d..2d0c6ea 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/BlockPoolSlice.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/BlockPoolSlice.java
@@ -84,6 +84,7 @@ class BlockPoolSlice {
private final int ioFileBufferSize;
@VisibleForTesting
public static final String DU_CACHE_FILE = "dfsUsed";
+ private final Runnable shutdownHook;
private volatile boolean dfsUsedSaved = false;
private static final int SHUTDOWN_HOOK_PRIORITY = 30;
private final boolean deleteDuplicateReplicas;
@@ -162,15 +163,16 @@ class BlockPoolSlice {
.build();
// Make the dfs usage to be saved during shutdown.
- ShutdownHookManager.get().addShutdownHook(
- new Runnable() {
- @Override
- public void run() {
- if (!dfsUsedSaved) {
- saveDfsUsed();
- }
+ shutdownHook = new Runnable() {
+ @Override
+ public void run() {
+ if (!dfsUsedSaved) {
+ saveDfsUsed();
}
- }, SHUTDOWN_HOOK_PRIORITY);
+ }
+ };
+ ShutdownHookManager.get().addShutdownHook(shutdownHook,
+ SHUTDOWN_HOOK_PRIORITY);
}
File getDirectory() {
@@ -756,6 +758,11 @@ class BlockPoolSlice {
saveDfsUsed();
dfsUsedSaved = true;
+ // Remove the shutdown hook to avoid any memory leak
+ if (shutdownHook != null) {
+ ShutdownHookManager.get().removeShutdownHook(shutdownHook);
+ }
+
if (dfsUsage instanceof CachingGetSpaceUsed) {
IOUtils.cleanup(LOG, ((CachingGetSpaceUsed) dfsUsage));
}
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org