Merge -c 1241791 from trunk to branch-0.23 to fix MAPREDUCE-3828. Ensure that urls in single-node mode are correct. Contributed by Siddharth Seth.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.23@1241793 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Arun Murthy 2012-02-08 07:14:03 +00:00
parent ff96fd8f1a
commit b180a2e7ac
3 changed files with 54 additions and 24 deletions

View File

@ -728,6 +728,9 @@ Release 0.23.1 - Unreleased
into the container request table when multiple hosts for a split happen to into the container request table when multiple hosts for a split happen to
be on the same rack. (Siddarth Seth via vinodkv) be on the same rack. (Siddarth Seth via vinodkv)
MAPREDUCE-3828. Ensure that urls in single-node mode are correct. (sseth
via acmurthy)
Release 0.23.0 - 2011-11-01 Release 0.23.0 - 2011-11-01
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -20,8 +20,13 @@ package org.apache.hadoop.yarn.conf;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import com.google.common.base.Splitter; import com.google.common.base.Splitter;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.util.Iterator; import java.util.Iterator;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.net.NetUtils;
public class YarnConfiguration extends Configuration { public class YarnConfiguration extends Configuration {
private static final Splitter ADDR_SPLITTER = Splitter.on(':').trimResults(); private static final Splitter ADDR_SPLITTER = Splitter.on(':').trimResults();
@ -543,7 +548,25 @@ public class YarnConfiguration extends Configuration {
// Use apps manager address to figure out the host for webapp // Use apps manager address to figure out the host for webapp
addr = conf.get(YarnConfiguration.RM_ADDRESS, YarnConfiguration.DEFAULT_RM_ADDRESS); addr = conf.get(YarnConfiguration.RM_ADDRESS, YarnConfiguration.DEFAULT_RM_ADDRESS);
String host = ADDR_SPLITTER.split(addr).iterator().next(); String host = ADDR_SPLITTER.split(addr).iterator().next();
return JOINER.join(host, ":", port); String rmAddress = JOINER.join(host, ":", port);
InetSocketAddress address = NetUtils.createSocketAddr(
rmAddress, DEFAULT_RM_WEBAPP_PORT, RM_WEBAPP_ADDRESS);
StringBuffer sb = new StringBuffer();
InetAddress resolved = address.getAddress();
if (resolved == null || resolved.isAnyLocalAddress() ||
resolved.isLoopbackAddress()) {
String lh = host;
try {
lh = InetAddress.getLocalHost().getCanonicalHostName();
} catch (UnknownHostException e) {
//Ignore and fallback.
}
sb.append(lh);
} else {
sb.append(address.getHostName());
}
sb.append(":").append(address.getPort());
return sb.toString();
} }
public static String getRMWebAppURL(Configuration conf) { public static String getRMWebAppURL(Configuration conf) {

View File

@ -1,24 +1,23 @@
/** /**
* Licensed to the Apache Software Foundation (ASF) under one * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file * or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information * distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file * regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the * to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance * "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at * with the License. You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.apache.hadoop.yarn.conf; package org.apache.hadoop.yarn.conf;
import junit.framework.Assert; import junit.framework.Assert;
import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.conf.YarnConfiguration;
@ -32,20 +31,25 @@ public class TestYarnConfiguration {
String rmWebUrl = YarnConfiguration.getRMWebAppURL(conf); String rmWebUrl = YarnConfiguration.getRMWebAppURL(conf);
// shouldn't have a "/" on the end of the url as all the other uri routinnes // shouldn't have a "/" on the end of the url as all the other uri routinnes
// specifically add slashes and Jetty doesn't handle double slashes. // specifically add slashes and Jetty doesn't handle double slashes.
Assert.assertEquals("RM Web Url is not correct", "http://0.0.0.0:8088", Assert.assertNotSame("RM Web Url is not correct", "http://0.0.0.0:8088",
rmWebUrl); rmWebUrl);
} }
@Test @Test
public void testRMWebUrlSpecified() throws Exception { public void testRMWebUrlSpecified() throws Exception {
YarnConfiguration conf = new YarnConfiguration(); YarnConfiguration conf = new YarnConfiguration();
// seems a bit odd but right now we are forcing webapp for RM to be RM_ADDRESS // seems a bit odd but right now we are forcing webapp for RM to be
// RM_ADDRESS
// for host and use the port from the RM_WEBAPP_ADDRESS // for host and use the port from the RM_WEBAPP_ADDRESS
conf.set(YarnConfiguration.RM_WEBAPP_ADDRESS, "footesting:99110"); conf.set(YarnConfiguration.RM_WEBAPP_ADDRESS, "fortesting:24543");
conf.set(YarnConfiguration.RM_ADDRESS, "rmtesting:9999"); conf.set(YarnConfiguration.RM_ADDRESS, "rmtesting:9999");
String rmWebUrl = YarnConfiguration.getRMWebAppURL(conf); String rmWebUrl = YarnConfiguration.getRMWebAppURL(conf);
Assert.assertEquals("RM Web Url is not correct", "http://rmtesting:99110", String[] parts = rmWebUrl.split(":");
rmWebUrl); Assert.assertEquals("RM Web URL Port is incrrect", 24543,
Integer.valueOf(parts[parts.length - 1]).intValue());
Assert.assertNotSame(
"RM Web Url not resolved correctly. Should not be rmtesting",
"http://rmtesting:24543", rmWebUrl);
} }
} }