diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 40b4c70750..3bd6204d06 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -353,6 +353,9 @@ Release 2.4.1 - UNRELEASED HDFS-6204. Fix TestRBWBlockInvalidation: change the last sleep to a loop. (szetszwo) + HDFS-6209. TestValidateConfigurationSettings should use random ports. + (Arpit Agarwal via szetszwo) + Release 2.4.0 - 2014-04-07 INCOMPATIBLE CHANGES diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestValidateConfigurationSettings.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestValidateConfigurationSettings.java index 01b0a4f773..9221653a80 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestValidateConfigurationSettings.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestValidateConfigurationSettings.java @@ -17,12 +17,10 @@ */ package org.apache.hadoop.hdfs.server.namenode; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - import java.io.File; import java.io.IOException; import java.net.BindException; +import java.util.Random; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; @@ -55,16 +53,26 @@ public void cleanUp() { public void testThatMatchingRPCandHttpPortsThrowException() throws IOException { - Configuration conf = new HdfsConfiguration(); - File nameDir = new File(MiniDFSCluster.getBaseDirectory(), "name"); - conf.set(DFSConfigKeys.DFS_NAMENODE_NAME_DIR_KEY, - nameDir.getAbsolutePath()); + NameNode nameNode = null; + try { + Configuration conf = new HdfsConfiguration(); + File nameDir = new File(MiniDFSCluster.getBaseDirectory(), "name"); + conf.set(DFSConfigKeys.DFS_NAMENODE_NAME_DIR_KEY, + nameDir.getAbsolutePath()); - // set both of these to port 9000, should fail - FileSystem.setDefaultUri(conf, "hdfs://localhost:9000"); - conf.set(DFSConfigKeys.DFS_NAMENODE_HTTP_ADDRESS_KEY, "127.0.0.1:9000"); - DFSTestUtil.formatNameNode(conf); - new NameNode(conf); + Random rand = new Random(); + final int port = 30000 + rand.nextInt(30000); + + // set both of these to the same port. It should fail. + FileSystem.setDefaultUri(conf, "hdfs://localhost:" + port); + conf.set(DFSConfigKeys.DFS_NAMENODE_HTTP_ADDRESS_KEY, "127.0.0.1:" + port); + DFSTestUtil.formatNameNode(conf); + nameNode = new NameNode(conf); + } finally { + if (nameNode != null) { + nameNode.stop(); + } + } } /** @@ -80,11 +88,29 @@ public void testThatDifferentRPCandHttpPortsAreOK() conf.set(DFSConfigKeys.DFS_NAMENODE_NAME_DIR_KEY, nameDir.getAbsolutePath()); - FileSystem.setDefaultUri(conf, "hdfs://localhost:8000"); - conf.set(DFSConfigKeys.DFS_NAMENODE_HTTP_ADDRESS_KEY, "127.0.0.1:9000"); - DFSTestUtil.formatNameNode(conf); - NameNode nameNode = new NameNode(conf); // should be OK! - nameNode.stop(); + Random rand = new Random(); + + // A few retries in case the ports we choose are in use. + for (int i = 0; i < 5; ++i) { + final int port1 = 30000 + rand.nextInt(10000); + final int port2 = port1 + 1 + rand.nextInt(10000); + + FileSystem.setDefaultUri(conf, "hdfs://localhost:" + port1); + conf.set(DFSConfigKeys.DFS_NAMENODE_HTTP_ADDRESS_KEY, "127.0.0.1:" + port2); + DFSTestUtil.formatNameNode(conf); + NameNode nameNode = null; + + try { + nameNode = new NameNode(conf); // should be OK! + break; + } catch(BindException be) { + continue; // Port in use? Try another. + } finally { + if (nameNode != null) { + nameNode.stop(); + } + } + } } /**