Return-Path: X-Original-To: apmail-hadoop-common-commits-archive@www.apache.org Delivered-To: apmail-hadoop-common-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 3D33C7936 for ; Thu, 20 Oct 2011 22:26:45 +0000 (UTC) Received: (qmail 66800 invoked by uid 500); 20 Oct 2011 22:26:45 -0000 Delivered-To: apmail-hadoop-common-commits-archive@hadoop.apache.org Received: (qmail 66721 invoked by uid 500); 20 Oct 2011 22:26:44 -0000 Mailing-List: contact common-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: common-dev@hadoop.apache.org Delivered-To: mailing list common-commits@hadoop.apache.org Received: (qmail 66714 invoked by uid 99); 20 Oct 2011 22:26:44 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 20 Oct 2011 22:26:44 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 20 Oct 2011 22:26:41 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 8D42123889FA; Thu, 20 Oct 2011 22:26:20 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1187102 - in /hadoop/common/branches/branch-0.23/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 Date: Thu, 20 Oct 2011 22:26:20 -0000 To: common-commits@hadoop.apache.org From: todd@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20111020222620.8D42123889FA@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: todd Date: Thu Oct 20 22:26:19 2011 New Revision: 1187102 URL: http://svn.apache.org/viewvc?rev=1187102&view=rev Log: HADOOP-7749. Add a NetUtils createSocketAddr call which provides more help in exception messages. Contributed by Todd Lipcon. Modified: hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/CHANGES.txt hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestNetUtils.java Modified: hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1187102&r1=1187101&r2=1187102&view=diff ============================================================================== --- hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/CHANGES.txt (original) +++ hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/CHANGES.txt Thu Oct 20 22:26:19 2011 @@ -403,6 +403,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/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java?rev=1187102&r1=1187101&r2=1187102&view=diff ============================================================================== --- hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java (original) +++ hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetUtils.java Thu Oct 20 22:26:19 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 + * configName 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 target does not + * include a port number + * @param configName the name of the configuration from which + * target 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 : 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/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestNetUtils.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestNetUtils.java?rev=1187102&r1=1187101&r2=1187102&view=diff ============================================================================== --- hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestNetUtils.java (original) +++ hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/TestNetUtils.java Thu Oct 20 22:26:19 2011 @@ -131,6 +131,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 {