HDFS-7553. fix the TestDFSUpgradeWithHA due to BindException. Contributed by Xiao Chen.
(cherry picked from commit 1f8162b74eddd849c7949ac64acf729c208b8af9) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/6d9f210c Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/6d9f210c Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/6d9f210c Branch: refs/heads/branch-2.8 Commit: 6d9f210c4d10c77925e921c80de05df3a1714f5c Parents: 2139458 Author: cnauroth <[email protected]> Authored: Tue Dec 29 10:56:59 2015 -0800 Committer: cnauroth <[email protected]> Committed: Tue Dec 29 10:57:30 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 | 26 ++++++++++++-------- .../hdfs/server/namenode/TestStartup.java | 2 ++ 5 files changed, 46 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/6d9f210c/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 0740aa7..2051aba 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -1626,6 +1626,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/6d9f210c/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 5b86eea..d9b5ea1 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 @@ -1023,6 +1023,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/6d9f210c/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 749f34c..b8ddef9 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 @@ -195,6 +195,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/6d9f210c/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 092d9f0..6784650 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 @@ -1805,12 +1805,7 @@ public class MiniDFSCluster { shutdownDataNodes(); for (NameNodeInfo nnInfo : nameNodes) { 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) { @@ -1851,14 +1846,25 @@ public class MiniDFSCluster { public synchronized void shutdownNameNode(int nnIndex) { NameNode nn = nameNodes[nnIndex].nameNode; if (nn != null) { - LOG.info("Shutting down the namenode"); - nn.stop(); - nn.join(); + stopAndJoinNameNode(nn); Configuration conf = nameNodes[nnIndex].conf; nameNodes[nnIndex] = new NameNodeInfo(null, null, null, null, conf); } } - + + /** + * 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/6d9f210c/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 a69c6e7..b8dda2a 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 @@ -459,6 +459,7 @@ public class TestStartup { nnRpc.saveNamespace(); namenode.stop(); namenode.join(); + namenode.joinHttpServer(); // compress image using default codec LOG.info("Read an uncomressed image and store it compressed using default codec."); @@ -489,6 +490,7 @@ public class TestStartup { nnRpc.saveNamespace(); namenode.stop(); namenode.join(); + namenode.joinHttpServer(); } @Test
