diff --git a/hudi-common/src/test/java/org/apache/hudi/common/testutils/minicluster/HdfsTestService.java b/hudi-common/src/test/java/org/apache/hudi/common/testutils/minicluster/HdfsTestService.java index 44819d3ea05f2..44af4ecea7c71 100644 --- a/hudi-common/src/test/java/org/apache/hudi/common/testutils/minicluster/HdfsTestService.java +++ b/hudi-common/src/test/java/org/apache/hudi/common/testutils/minicluster/HdfsTestService.java @@ -31,6 +31,7 @@ import java.io.File; import java.io.IOException; +import java.net.BindException; import java.nio.file.Files; import java.util.Objects; @@ -72,20 +73,32 @@ public MiniDFSCluster start(boolean format) throws IOException { FileIOUtils.deleteDirectory(file); } - int namenodeRpcPort = NetworkTestUtils.nextFreePort(); - int datanodePort = NetworkTestUtils.nextFreePort(); - int datanodeIpcPort = NetworkTestUtils.nextFreePort(); - int datanodeHttpPort = NetworkTestUtils.nextFreePort(); - - // Configure and start the HDFS cluster - // boolean format = shouldFormatDFSCluster(localDFSLocation, clean); - String bindIP = "127.0.0.1"; - configureDFSCluster(hadoopConf, localDFSLocation, bindIP, namenodeRpcPort, - datanodePort, datanodeIpcPort, datanodeHttpPort); - miniDfsCluster = new MiniDFSCluster.Builder(hadoopConf).numDataNodes(1).format(format).checkDataNodeAddrConfig(true) - .checkDataNodeHostConfig(true).build(); - LOG.info("HDFS Minicluster service started."); - return miniDfsCluster; + int loop = 0; + while (true) { + try { + int namenodeRpcPort = NetworkTestUtils.nextFreePort(); + int datanodePort = NetworkTestUtils.nextFreePort(); + int datanodeIpcPort = NetworkTestUtils.nextFreePort(); + int datanodeHttpPort = NetworkTestUtils.nextFreePort(); + + // Configure and start the HDFS cluster + // boolean format = shouldFormatDFSCluster(localDFSLocation, clean); + String bindIP = "127.0.0.1"; + configureDFSCluster(hadoopConf, localDFSLocation, bindIP, namenodeRpcPort, + datanodePort, datanodeIpcPort, datanodeHttpPort); + miniDfsCluster = new MiniDFSCluster.Builder(hadoopConf).numDataNodes(1).format(format).checkDataNodeAddrConfig(true) + .checkDataNodeHostConfig(true).build(); + LOG.info("HDFS Minicluster service started."); + return miniDfsCluster; + } catch (BindException ex) { + ++loop; + if (loop < 5) { + stop(); + } else { + throw ex; + } + } + } } public void stop() {