HDFS-7553. fix the TestDFSUpgradeWithHA due to BindException. Contributed by Xiao Chen.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/99cf2ece Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/99cf2ece Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/99cf2ece Branch: refs/heads/yarn-2877 Commit: 99cf2ecee9c19231dea3620c053b2d8d71812fd6 Parents: 2a59d01 Author: cnauroth <cnaur...@apache.org> Authored: Tue Dec 29 10:56:59 2015 -0800 Committer: cnauroth <cnaur...@apache.org> Committed: Tue Dec 29 10:56:59 2015 -0800 ---------------------------------------------------------------------- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 ++ .../hadoop/hdfs/server/namenode/NameNode.java | 16 ++++++++++ .../server/namenode/NameNodeHttpServer.java | 9 ++++++ .../org/apache/hadoop/hdfs/MiniDFSCluster.java | 33 +++++++++++--------- .../hdfs/server/namenode/TestStartup.java | 2 ++ 5 files changed, 48 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/99cf2ece/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index d5f51ff..9da92b2 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -2547,6 +2547,9 @@ Release 2.8.0 - UNRELEASED HDFS-9458. TestBackupNode always binds to port 50070, which can cause bind failures. (Xiao Chen via cnauroth) + HDFS-7553. fix the TestDFSUpgradeWithHA due to BindException. + (Xiao Chen via cnauroth) + Release 2.7.3 - UNRELEASED INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/99cf2ece/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java index acb4069..97c8b26 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java @@ -1022,6 +1022,22 @@ public class NameNode implements NameNodeStatusMXBean { } /** + * @return NameNodeHttpServer, used by unit tests to ensure a full shutdown, + * so that no bind exception is thrown during restart. + */ + @VisibleForTesting + public void joinHttpServer() { + if (httpServer != null) { + try { + httpServer.join(); + } catch (InterruptedException e) { + LOG.info("Caught InterruptedException joining NameNodeHttpServer", e); + Thread.currentThread().interrupt(); + } + } + } + + /** * Verify that configured directories exist, then * Interactively confirm that formatting is desired * for each existing directory and format them. http://git-wip-us.apache.org/repos/asf/hadoop/blob/99cf2ece/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNodeHttpServer.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNodeHttpServer.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNodeHttpServer.java index 6bd9868..8f112bd 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNodeHttpServer.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNodeHttpServer.java @@ -194,6 +194,15 @@ public class NameNodeHttpServer { return params; } + /** + * Joins the httpserver. + */ + public void join() throws InterruptedException { + if (httpServer != null) { + httpServer.join(); + } + } + void stop() throws Exception { if (httpServer != null) { httpServer.stop(); http://git-wip-us.apache.org/repos/asf/hadoop/blob/99cf2ece/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/MiniDFSCluster.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/MiniDFSCluster.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/MiniDFSCluster.java index 3e25177..63561fe 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/MiniDFSCluster.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/MiniDFSCluster.java @@ -1908,12 +1908,7 @@ public class MiniDFSCluster { shutdownDataNodes(); for (NameNodeInfo nnInfo : namenodes.values()) { if (nnInfo == null) continue; - NameNode nameNode = nnInfo.nameNode; - if (nameNode != null) { - nameNode.stop(); - nameNode.join(); - nameNode = null; - } + stopAndJoinNameNode(nnInfo.nameNode); } ShutdownHookManager.get().clearShutdownHooks(); if (base_dir != null) { @@ -1953,17 +1948,25 @@ public class MiniDFSCluster { */ public synchronized void shutdownNameNode(int nnIndex) { NameNodeInfo info = getNN(nnIndex); - NameNode nn = info.nameNode; - if (nn != null) { - LOG.info("Shutting down the namenode"); - nn.stop(); - nn.join(); - info.nnId = null; - info.nameNode = null; - info.nameserviceId = null; + stopAndJoinNameNode(info.nameNode); + info.nnId = null; + info.nameNode = null; + info.nameserviceId = null; + } + + /** + * Fully stop the NameNode by stop and join. + */ + private void stopAndJoinNameNode(NameNode nn) { + if (nn == null) { + return; } + LOG.info("Shutting down the namenode"); + nn.stop(); + nn.join(); + nn.joinHttpServer(); } - + /** * Restart all namenodes. */ http://git-wip-us.apache.org/repos/asf/hadoop/blob/99cf2ece/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestStartup.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestStartup.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestStartup.java index 20dda37..860a2c9 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestStartup.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestStartup.java @@ -444,6 +444,7 @@ public class TestStartup { nnRpc.saveNamespace(0, 0); namenode.stop(); namenode.join(); + namenode.joinHttpServer(); // compress image using default codec LOG.info("Read an uncomressed image and store it compressed using default codec."); @@ -474,6 +475,7 @@ public class TestStartup { nnRpc.saveNamespace(0, 0); namenode.stop(); namenode.join(); + namenode.joinHttpServer(); } @Test