.../mapreduce/v2/app/webapp/AppController.java | 2 +- .../mapreduce/v2/app/webapp/TestAppController.java | 41 ++++++++++++++++++++-- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/AppController.java b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/AppController.java index 0f528e4..305ec7e 100644 --- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/AppController.java +++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/AppController.java @@ -62,7 +62,7 @@ protected AppController(App app, Configuration conf, RequestContext ctx, set(APP_ID, app.context.getApplicationID().toString()); set(RM_WEB, JOINER.join(MRWebAppUtil.getYARNWebappScheme(), - WebAppUtils.getResolvedRMWebAppURLWithoutScheme(conf, + WebAppUtils.getResolvedRemoteRMWebAppURLWithoutScheme(conf, MRWebAppUtil.getYARNHttpPolicy()))); } diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/v2/app/webapp/TestAppController.java b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/v2/app/webapp/TestAppController.java index c1bc9ef..b68f507 100644 --- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/v2/app/webapp/TestAppController.java +++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/v2/app/webapp/TestAppController.java @@ -20,8 +20,9 @@ import static org.mockito.Mockito.*; import java.io.IOException; +import java.util.HashMap; import java.util.Iterator; - +import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.mapreduce.JobACL; @@ -33,19 +34,28 @@ import org.apache.hadoop.mapreduce.v2.util.MRApps; import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.yarn.api.records.ApplicationId; +import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.webapp.Controller.RequestContext; import org.apache.hadoop.yarn.webapp.MimeType; import org.apache.hadoop.yarn.webapp.ResponseInfo; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.*; +import org.apache.hadoop.mapreduce.v2.app.webapp.AMParams; +import org.apache.hadoop.net.NetUtils; public class TestAppController { private AppControllerForTest appController; private RequestContext ctx; private Job job; - + + private static final String RM1_NODE_ID = "rm1"; + private static final String RM2_NODE_ID = "rm2"; + private static String dummyHostNames[] = {"host1", "host2", "host3"}; + private static final String anyIpAddress = "1.2.3.4"; + private static Map savedStaticResolution = new HashMap<>(); @Before public void setUp() throws IOException { AppContext context = mock(AppContext.class); @@ -66,6 +76,22 @@ public void setUp() throws IOException { App app = new App(context); Configuration configuration = new Configuration(); + final String rmAddress = "host1:8088"; + configuration.set(YarnConfiguration.RM_WEBAPP_ADDRESS, rmAddress); + final String rm1Address = "host2:8088"; + final String rm2Address = "host3:8088"; + configuration.set(YarnConfiguration.RM_WEBAPP_ADDRESS + "." + RM1_NODE_ID, rm1Address); + configuration.set(YarnConfiguration.RM_WEBAPP_ADDRESS + "." + RM2_NODE_ID, rm2Address); + configuration.setBoolean(YarnConfiguration.RM_HA_ENABLED, true); + configuration.set(YarnConfiguration.RM_HA_IDS, RM1_NODE_ID + "," + RM2_NODE_ID); + + String previousIpAddress; + for (String hostName : dummyHostNames) { + if (null != (previousIpAddress = NetUtils.getStaticResolution(hostName))) { + savedStaticResolution.put(hostName, previousIpAddress); + } + NetUtils.addStaticResolution(hostName, anyIpAddress); + } ctx = mock(RequestContext.class); appController = new AppControllerForTest(app, configuration, ctx); @@ -306,4 +332,15 @@ public void testAttempts() { assertEquals(AttemptsPage.class, appController.getClazz()); } + /** + * test bad request should Resolve HA RAM Address + */ + @Test + public void testResolveHARMAdress() { + final String rmRemoteUrl = appController.getProperty().get(AMParams.RM_WEB); + final String rm1Address = "http://host2:8088"; + Assert.assertEquals( + "ResolvedRemoteRMWebAppUrl should resolve to the first HA RM address", + rm1Address, rmRemoteUrl); + } }