HDFS-4210. Throw helpful exception when DNS entry for JournalNode cannot be resolved. Contributed by Charles Lamb and John Zhuge.

(cherry picked from commit 046f6bf0f944311fc70de3a96fc6ab8211cbbbd8)
This commit is contained in:
Xiao Chen 2016-08-29 17:41:01 -07:00
parent 9ad3a7a43b
commit a291306510
2 changed files with 25 additions and 3 deletions

View File

@ -21,6 +21,7 @@ import java.io.IOException;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.URI; import java.net.URI;
import java.net.URL; import java.net.URL;
import java.net.UnknownHostException;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -387,8 +388,12 @@ public class QuorumJournalManager implements JournalManager {
List<InetSocketAddress> addrs = Lists.newArrayList(); List<InetSocketAddress> addrs = Lists.newArrayList();
for (String addr : parts) { for (String addr : parts) {
addrs.add(NetUtils.createSocketAddr( InetSocketAddress isa = NetUtils.createSocketAddr(
addr, DFSConfigKeys.DFS_JOURNALNODE_RPC_PORT_DEFAULT)); addr, DFSConfigKeys.DFS_JOURNALNODE_RPC_PORT_DEFAULT);
if (isa.isUnresolved()) {
throw new UnknownHostException(addr);
}
addrs.add(isa);
} }
return addrs; return addrs;
} }

View File

@ -27,7 +27,9 @@ import java.io.Closeable;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.URI;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.net.UnknownHostException;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Random; import java.util.Random;
@ -52,7 +54,9 @@ import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.ipc.ProtobufRpcEngine; import org.apache.hadoop.ipc.ProtobufRpcEngine;
import org.apache.hadoop.test.GenericTestUtils; import org.apache.hadoop.test.GenericTestUtils;
import org.apache.log4j.Level; import org.apache.log4j.Level;
import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.mockito.Mockito; import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock; import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer; import org.mockito.stubbing.Answer;
@ -126,6 +130,9 @@ public class TestQJMWithFaults {
return ret; return ret;
} }
@Rule
public ExpectedException expectedException = ExpectedException.none();
/** /**
* Sets up two of the nodes to each drop a single RPC, at all * Sets up two of the nodes to each drop a single RPC, at all
* possible combinations of RPCs. This may result in the * 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 * Test case in which three JournalNodes randomly flip flop between
* up and down states every time they get an RPC. * up and down states every time they get an RPC.