HADOOP-7749. Add a NetUtils createSocketAddr call which provides more help in exception messages. Contributed by Todd Lipcon.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.23@1187102 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
9a8b923418
commit
ac21f20ac6
|
@ -403,6 +403,9 @@ Release 0.23.0 - Unreleased
|
||||||
HADOOP-7705. Add a log4j back end that can push out JSON data,
|
HADOOP-7705. Add a log4j back end that can push out JSON data,
|
||||||
one per line. (stevel)
|
one per line. (stevel)
|
||||||
|
|
||||||
|
HADOOP-7749. Add a NetUtils createSocketAddr call which provides more
|
||||||
|
help in exception messages. (todd)
|
||||||
|
|
||||||
OPTIMIZATIONS
|
OPTIMIZATIONS
|
||||||
|
|
||||||
HADOOP-7333. Performance improvement in PureJavaCrc32. (Eric Caspole
|
HADOOP-7333. Performance improvement in PureJavaCrc32. (Eric Caspole
|
||||||
|
|
|
@ -150,12 +150,38 @@ public class NetUtils {
|
||||||
*/
|
*/
|
||||||
public static InetSocketAddress createSocketAddr(String target,
|
public static InetSocketAddress createSocketAddr(String target,
|
||||||
int defaultPort) {
|
int defaultPort) {
|
||||||
|
return createSocketAddr(target, defaultPort, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an InetSocketAddress from the given target string and
|
||||||
|
* default port. If the string cannot be parsed correctly, the
|
||||||
|
* <code>configName</code> parameter is used as part of the
|
||||||
|
* exception message, allowing the user to better diagnose
|
||||||
|
* the misconfiguration.
|
||||||
|
*
|
||||||
|
* @param target a string of either "host" or "host:port"
|
||||||
|
* @param defaultPort the default port if <code>target</code> does not
|
||||||
|
* include a port number
|
||||||
|
* @param configName the name of the configuration from which
|
||||||
|
* <code>target</code> was loaded. This is used in the
|
||||||
|
* exception message in the case that parsing fails.
|
||||||
|
*/
|
||||||
|
public static InetSocketAddress createSocketAddr(String target,
|
||||||
|
int defaultPort,
|
||||||
|
String configName) {
|
||||||
|
String helpText = "";
|
||||||
|
if (configName != null) {
|
||||||
|
helpText = " (configuration property '" + configName + "')";
|
||||||
|
}
|
||||||
if (target == null) {
|
if (target == null) {
|
||||||
throw new IllegalArgumentException("Target address cannot be null.");
|
throw new IllegalArgumentException("Target address cannot be null." +
|
||||||
|
helpText);
|
||||||
}
|
}
|
||||||
int colonIndex = target.indexOf(':');
|
int colonIndex = target.indexOf(':');
|
||||||
if (colonIndex < 0 && defaultPort == -1) {
|
if (colonIndex < 0 && defaultPort == -1) {
|
||||||
throw new RuntimeException("Not a host:port pair: " + target);
|
throw new RuntimeException("Not a host:port pair: " + target +
|
||||||
|
helpText);
|
||||||
}
|
}
|
||||||
String hostname;
|
String hostname;
|
||||||
int port = -1;
|
int port = -1;
|
||||||
|
@ -165,7 +191,14 @@ public class NetUtils {
|
||||||
} else {
|
} else {
|
||||||
// must be the old style <host>:<port>
|
// must be the old style <host>:<port>
|
||||||
hostname = target.substring(0, colonIndex);
|
hostname = target.substring(0, colonIndex);
|
||||||
port = Integer.parseInt(target.substring(colonIndex + 1));
|
String portStr = target.substring(colonIndex + 1);
|
||||||
|
try {
|
||||||
|
port = Integer.parseInt(portStr);
|
||||||
|
} catch (NumberFormatException nfe) {
|
||||||
|
throw new IllegalArgumentException(
|
||||||
|
"Can't parse port '" + portStr + "'"
|
||||||
|
+ helpText);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// a new uri
|
// a new uri
|
||||||
|
|
|
@ -131,6 +131,27 @@ public class TestNetUtils {
|
||||||
assertRemoteDetailsIncluded(wrapped);
|
assertRemoteDetailsIncluded(wrapped);
|
||||||
assertInException(wrapped, "/UnknownHost");
|
assertInException(wrapped, "/UnknownHost");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCreateSocketAddress() throws Throwable {
|
||||||
|
InetSocketAddress addr = NetUtils.createSocketAddr(
|
||||||
|
"127.0.0.1:12345", 1000, "myconfig");
|
||||||
|
assertEquals("127.0.0.1", addr.getAddress().getHostAddress());
|
||||||
|
assertEquals(12345, addr.getPort());
|
||||||
|
|
||||||
|
addr = NetUtils.createSocketAddr(
|
||||||
|
"127.0.0.1", 1000, "myconfig");
|
||||||
|
assertEquals("127.0.0.1", addr.getAddress().getHostAddress());
|
||||||
|
assertEquals(1000, addr.getPort());
|
||||||
|
|
||||||
|
try {
|
||||||
|
addr = NetUtils.createSocketAddr(
|
||||||
|
"127.0.0.1:blahblah", 1000, "myconfig");
|
||||||
|
fail("Should have failed to parse bad port");
|
||||||
|
} catch (IllegalArgumentException iae) {
|
||||||
|
assertInException(iae, "myconfig");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void assertRemoteDetailsIncluded(IOException wrapped)
|
private void assertRemoteDetailsIncluded(IOException wrapped)
|
||||||
throws Throwable {
|
throws Throwable {
|
||||||
|
|
Loading…
Reference in New Issue