Author: bobby Date: Mon Apr 30 21:57:54 2012 New Revision: 1332430 URL: http://svn.apache.org/viewvc?rev=1332430&view=rev Log: svn merge -c 1332427. FIXES: HADOOP-8335. Improve Configuration's address handling (Daryn Sharp via bobby)
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/conf/Configuration.java 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/conf/TestConfiguration.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=1332430&r1=1332429&r2=1332430&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 Mon Apr 30 21:57:54 2012 @@ -50,6 +50,9 @@ Release 0.23.3 - UNRELEASED HADOOP-8330. Update TestSequenceFile.testCreateUsesFsArg() for HADOOP-8305. (John George via szetszwo) + HADOOP-8335. Improve Configuration's address handling (Daryn Sharp via + bobby) + Release 0.23.2 - UNRELEASED NEW FEATURES Modified: hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java?rev=1332430&r1=1332429&r2=1332430&view=diff ============================================================================== --- hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java (original) +++ hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java Mon Apr 30 21:57:54 2012 @@ -1212,6 +1212,29 @@ public class Configuration implements It final String address = get(name, defaultAddress); return NetUtils.createSocketAddr(address, defaultPort, name); } + + /** + * Set the socket address for the <code>name</code> property as + * a <code>host:port</code>. + */ + public void setSocketAddr(String name, InetSocketAddress addr) { + set(name, NetUtils.getHostPortString(addr)); + } + + /** + * Set the socket address a client can use to connect for the + * <code>name</code> property as a <code>host:port</code>. The wildcard + * address is replaced with the local host's address. + * @param name property name. + * @param addr InetSocketAddress of a listener to store in the given property + * @return InetSocketAddress for clients to connect + */ + public InetSocketAddress updateConnectAddr(String name, + InetSocketAddress addr) { + final InetSocketAddress connectAddr = NetUtils.getConnectAddress(addr); + setSocketAddr(name, connectAddr); + return connectAddr; + } /** * Load a class by name. 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=1332430&r1=1332429&r2=1332430&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 Mon Apr 30 21:57:54 2012 @@ -347,8 +347,19 @@ public class NetUtils { * @return socket address that a client can use to connect to the server. */ public static InetSocketAddress getConnectAddress(Server server) { - InetSocketAddress addr = server.getListenerAddress(); - if (addr.getAddress().isAnyLocalAddress()) { + return getConnectAddress(server.getListenerAddress()); + } + + /** + * Returns the InetSocketAddress that a client can use to connect to the + * given listening address. This returns "hostname:port" of the server, + * or "127.0.0.1:port" when given a wildcard address of "0.0.0.0:port". + * + * @param addr of a listener + * @return socket address that a client can use to connect to the server. + */ + public static InetSocketAddress getConnectAddress(InetSocketAddress addr) { + if (!addr.isUnresolved() && addr.getAddress().isAnyLocalAddress()) { try { addr = new InetSocketAddress(InetAddress.getLocalHost(), addr.getPort()); } catch (UnknownHostException uhe) { Modified: hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java?rev=1332430&r1=1332429&r2=1332430&view=diff ============================================================================== --- hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java (original) +++ hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java Mon Apr 30 21:57:54 2012 @@ -23,6 +23,7 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.StringWriter; +import java.net.InetAddress; import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.Arrays; @@ -671,6 +672,27 @@ public class TestConfiguration extends T } } + public void testSetSocketAddress() throws IOException { + Configuration conf = new Configuration(); + NetUtils.addStaticResolution("host", "127.0.0.1"); + final String defaultAddr = "host:1"; + + InetSocketAddress addr = NetUtils.createSocketAddr(defaultAddr); + conf.setSocketAddr("myAddress", addr); + assertEquals(defaultAddr, NetUtils.getHostPortString(addr)); + } + + public void testUpdateSocketAddress() throws IOException { + InetSocketAddress addr = NetUtils.createSocketAddrForHost("host", 1); + InetSocketAddress connectAddr = conf.updateConnectAddr("myAddress", addr); + assertEquals(connectAddr.getHostName(), addr.getHostName()); + + addr = new InetSocketAddress(1); + connectAddr = conf.updateConnectAddr("myAddress", addr); + assertEquals(connectAddr.getHostName(), + InetAddress.getLocalHost().getHostName()); + } + public void testReload() throws IOException { out=new BufferedWriter(new FileWriter(CONFIG)); startConfig(); 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=1332430&r1=1332429&r2=1332430&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 Mon Apr 30 21:57:54 2012 @@ -170,6 +170,19 @@ public class TestNetUtils { } @Test + public void testGetConnectAddress() throws IOException { + NetUtils.addStaticResolution("host", "127.0.0.1"); + InetSocketAddress addr = NetUtils.createSocketAddrForHost("host", 1); + InetSocketAddress connectAddr = NetUtils.getConnectAddress(addr); + assertEquals(addr.getHostName(), connectAddr.getHostName()); + + addr = new InetSocketAddress(1); + connectAddr = NetUtils.getConnectAddress(addr); + assertEquals(InetAddress.getLocalHost().getHostName(), + connectAddr.getHostName()); + } + + @Test public void testCreateSocketAddress() throws Throwable { InetSocketAddress addr = NetUtils.createSocketAddr( "127.0.0.1:12345", 1000, "myconfig");