From 0c6638c2ea278bd460df88e7118945e461266a8b Mon Sep 17 00:00:00 2001 From: Vinayakumar B Date: Fri, 22 May 2015 16:15:15 +0530 Subject: [PATCH] HDFS-8268. Port conflict log for data node server is not sufficient (Contributed by Mohammad Shahid Khan) --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 ++ .../datanode/web/DatanodeHttpServer.java | 36 +++++++++++++++---- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 50fccd2759..68775da67f 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -802,6 +802,9 @@ Release 2.8.0 - UNRELEASED HDFS-8454. Remove unnecessary throttling in TestDatanodeDeath. (Arpit Agarwal) + HDFS-8268. Port conflict log for data node server is not sufficient + (Mohammad Shahid Khan via vinayakumarb) + Release 2.7.1 - UNRELEASED INCOMPATIBLE CHANGES diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/web/DatanodeHttpServer.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/web/DatanodeHttpServer.java index b620ba6ac1..f461ddaa50 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/web/DatanodeHttpServer.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/web/DatanodeHttpServer.java @@ -42,8 +42,10 @@ import org.apache.hadoop.security.ssl.SSLFactory; import java.io.Closeable; import java.io.IOException; +import java.net.BindException; import java.net.InetSocketAddress; import java.net.SocketAddress; +import java.net.SocketException; import java.nio.channels.ServerSocketChannel; import java.security.GeneralSecurityException; @@ -142,19 +144,41 @@ public class DatanodeHttpServer implements Closeable { return httpsAddress; } - public void start() { + public void start() throws IOException { if (httpServer != null) { - ChannelFuture f = httpServer.bind(DataNode.getInfoAddr(conf)); - f.syncUninterruptibly(); + InetSocketAddress infoAddr = DataNode.getInfoAddr(conf); + ChannelFuture f = httpServer.bind(infoAddr); + try { + f.syncUninterruptibly(); + } catch (Throwable e) { + if (e instanceof BindException) { + throw NetUtils.wrapException(null, 0, infoAddr.getHostName(), + infoAddr.getPort(), (SocketException) e); + } else { + throw e; + } + } httpAddress = (InetSocketAddress) f.channel().localAddress(); LOG.info("Listening HTTP traffic on " + httpAddress); } if (httpsServer != null) { - InetSocketAddress secInfoSocAddr = NetUtils.createSocketAddr(conf.getTrimmed( - DFS_DATANODE_HTTPS_ADDRESS_KEY, DFS_DATANODE_HTTPS_ADDRESS_DEFAULT)); + InetSocketAddress secInfoSocAddr = + NetUtils.createSocketAddr(conf.getTrimmed( + DFS_DATANODE_HTTPS_ADDRESS_KEY, + DFS_DATANODE_HTTPS_ADDRESS_DEFAULT)); ChannelFuture f = httpsServer.bind(secInfoSocAddr); - f.syncUninterruptibly(); + + try { + f.syncUninterruptibly(); + } catch (Throwable e) { + if (e instanceof BindException) { + throw NetUtils.wrapException(null, 0, secInfoSocAddr.getHostName(), + secInfoSocAddr.getPort(), (SocketException) e); + } else { + throw e; + } + } httpsAddress = (InetSocketAddress) f.channel().localAddress(); LOG.info("Listening HTTPS traffic on " + httpsAddress); }