You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by to...@apache.org on 2011/10/21 00:26:32 UTC
svn commit: r1187103 - in
/hadoop/common/trunk/hadoop-common-project/hadoop-common: CHANGES.txt
src/main/java/org/apache/hadoop/net/NetUtils.java
src/test/java/org/apache/hadoop/net/TestNetUtils.java
Author: todd
Date: Thu Oct 20 22:26:32 2011
New Revision: 1187103
URL: http://svn.apache.org/viewvc?rev=1187103&view=rev
Log:
HADOOP-7749. Add a NetUtils createSocketAddr call which provides more help in exception messages. Contributed by Todd Lipcon.
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestNetUtils.java
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1187103&r1=1187102&r2=1187103&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt Thu Oct 20 22:26:32 2011
@@ -486,6 +486,9 @@ Release 0.23.0 - Unreleased
HADOOP-7705. Add a log4j back end that can push out JSON data,
one per line. (stevel)
+ HADOOP-7749. Add a NetUtils createSocketAddr call which provides more
+ help in exception messages. (todd)
+
OPTIMIZATIONS
HADOOP-7333. Performance improvement in PureJavaCrc32. (Eric Caspole
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java?rev=1187103&r1=1187102&r2=1187103&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java Thu Oct 20 22:26:32 2011
@@ -150,12 +150,38 @@ public class NetUtils {
*/
public static InetSocketAddress createSocketAddr(String target,
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) {
- throw new IllegalArgumentException("Target address cannot be null.");
+ throw new IllegalArgumentException("Target address cannot be null." +
+ helpText);
}
int colonIndex = target.indexOf(':');
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;
int port = -1;
@@ -165,7 +191,14 @@ public class NetUtils {
} else {
// must be the old style <host>:<port>
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 {
// a new uri
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestNetUtils.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestNetUtils.java?rev=1187103&r1=1187102&r2=1187103&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestNetUtils.java (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestNetUtils.java Thu Oct 20 22:26:32 2011
@@ -163,6 +163,27 @@ public class TestNetUtils {
assertRemoteDetailsIncluded(wrapped);
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)
throws Throwable {