From cd5e10ccca9b919d55ef7a500e61b44bd1a00171 Mon Sep 17 00:00:00 2001 From: Xiao Chen Date: Mon, 29 Aug 2016 17:41:01 -0700 Subject: [PATCH] HDFS-4210. Throw helpful exception when DNS entry for JournalNode cannot be resolved. Contributed by Charles Lamb and John Zhuge. --- .../qjournal/client/QuorumJournalManager.java | 9 +++++++-- .../qjournal/client/TestQJMWithFaults.java | 19 ++++++++++++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/client/QuorumJournalManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/client/QuorumJournalManager.java index c32b667bdaa..ae3358b2868 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/client/QuorumJournalManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/qjournal/client/QuorumJournalManager.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.net.InetSocketAddress; import java.net.URI; import java.net.URL; +import java.net.UnknownHostException; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -387,8 +388,12 @@ public class QuorumJournalManager implements JournalManager { List addrs = Lists.newArrayList(); for (String addr : parts) { - addrs.add(NetUtils.createSocketAddr( - addr, DFSConfigKeys.DFS_JOURNALNODE_RPC_PORT_DEFAULT)); + InetSocketAddress isa = NetUtils.createSocketAddr( + addr, DFSConfigKeys.DFS_JOURNALNODE_RPC_PORT_DEFAULT); + if (isa.isUnresolved()) { + throw new UnknownHostException(addr); + } + addrs.add(isa); } return addrs; } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/qjournal/client/TestQJMWithFaults.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/qjournal/client/TestQJMWithFaults.java index b0a9b990502..ecdbaf5296d 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/qjournal/client/TestQJMWithFaults.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/qjournal/client/TestQJMWithFaults.java @@ -27,7 +27,9 @@ import java.io.Closeable; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.net.InetSocketAddress; +import java.net.URI; import java.net.URISyntaxException; +import java.net.UnknownHostException; import java.util.List; import java.util.Map; import java.util.Random; @@ -52,7 +54,9 @@ import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.ipc.ProtobufRpcEngine; import org.apache.hadoop.test.GenericTestUtils; import org.apache.log4j.Level; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; @@ -125,7 +129,10 @@ public class TestQJMWithFaults { } return ret; } - + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + /** * Sets up two of the nodes to each drop a single RPC, at all * possible combinations of RPCs. This may result in the @@ -186,6 +193,16 @@ public class TestQJMWithFaults { } } + /** + * Expect {@link UnknownHostException} if a hostname can't be resolved. + */ + @Test + public void testUnresolvableHostName() throws Exception { + expectedException.expect(UnknownHostException.class); + new QuorumJournalManager(conf, + new URI("qjournal://" + "bogus:12345" + "/" + JID), FAKE_NSINFO); + } + /** * Test case in which three JournalNodes randomly flip flop between * up and down states every time they get an RPC.