You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sr...@apache.org on 2015/11/03 19:09:47 UTC
ambari git commit: AMBARI-13693. Ambari Blueprint sets inconsistent
Yarn RM values (DIPAYAN BHOWMICK via srimanth)
Repository: ambari
Updated Branches:
refs/heads/branch-2.1 30855f280 -> 80d36ec7c
AMBARI-13693. Ambari Blueprint sets inconsistent Yarn RM values (DIPAYAN BHOWMICK via srimanth)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/80d36ec7
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/80d36ec7
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/80d36ec7
Branch: refs/heads/branch-2.1
Commit: 80d36ec7c0f2ccf51a2f62253bfb60b9234ba1ce
Parents: 30855f2
Author: Srimanth Gunturi <sg...@hortonworks.com>
Authored: Tue Nov 3 10:09:32 2015 -0800
Committer: Srimanth Gunturi <sg...@hortonworks.com>
Committed: Tue Nov 3 10:09:32 2015 -0800
----------------------------------------------------------------------
.../ambari/view/utils/ambari/Services.java | 67 +++++++++++--------
.../ambari/view/utils/ambari/ServicesTest.java | 70 ++++++++++++++++++++
2 files changed, 111 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/80d36ec7/contrib/views/utils/src/main/java/org/apache/ambari/view/utils/ambari/Services.java
----------------------------------------------------------------------
diff --git a/contrib/views/utils/src/main/java/org/apache/ambari/view/utils/ambari/Services.java b/contrib/views/utils/src/main/java/org/apache/ambari/view/utils/ambari/Services.java
index 421a365..8a50012 100644
--- a/contrib/views/utils/src/main/java/org/apache/ambari/view/utils/ambari/Services.java
+++ b/contrib/views/utils/src/main/java/org/apache/ambari/view/utils/ambari/Services.java
@@ -45,6 +45,11 @@ public class Services {
private static final String YARN_RESOURCEMANAGER_HA_RM_IDS_KEY = "yarn.resourcemanager.ha.rm-ids";
private static final String YARN_RESOURCEMANAGER_HTTP_HA_PARTIAL_KEY = "yarn.resourcemanager.webapp.address.";
private static final String YARN_RESOURCEMANAGER_HTTPS_HA_PARTIAL_KEY = "yarn.resourcemanager.webapp.https.address.";
+ private static final String YARN_RESOURCEMANAGER_HOSTNAME_KEY = "yarn.resourcemanager.hostname";
+ private static final String YARN_RESOURCEMANAGER_HOSTNAME_PARTIAL_KEY = YARN_RESOURCEMANAGER_HOSTNAME_KEY + ".";
+ private static final String YARN_RESOURCEMANAGER_DEFAULT_HTTP_PORT = "8088";
+ private static final String YARN_RESOURCEMANAGER_DEFAULT_HTTPS_PORT = "8090";
+
private static final String YARN_ATS_URL = "yarn.timeline-server.url";
private final static String YARN_TIMELINE_WEBAPP_HTTP_ADDRESS_KEY = "yarn.timeline-service.webapp.address";
@@ -80,10 +85,9 @@ public class Services {
private String getRMUrlFromClusterConfig() {
String url;
- String protocol;
- String haEnabled = ambariApi.getCluster().getConfigurationValue(YARN_SITE, YARN_RESOURCEMANAGER_HA_ENABLED);
- String httpPolicy = ambariApi.getCluster().getConfigurationValue(YARN_SITE, YARN_HTTP_POLICY);
+ String haEnabled = getYarnConfig(YARN_RESOURCEMANAGER_HA_ENABLED);
+ String httpPolicy = getYarnConfig(YARN_HTTP_POLICY);
if (!(HTTP_ONLY.equals(httpPolicy) || HTTPS_ONLY.equals(httpPolicy))) {
LOG.error(String.format("RA030 Unknown value %s of yarn-site/yarn.http.policy. HTTP_ONLY assumed.", httpPolicy));
@@ -94,34 +98,32 @@ public class Services {
String[] urls = getRMHAUrls(httpPolicy);
url = getActiveRMUrl(urls);
} else {
- if (httpPolicy.equals(HTTPS_ONLY)) {
- protocol = "https";
- url = ambariApi.getCluster().getConfigurationValue(YARN_SITE, YARN_RESOURCEMANAGER_HTTPS_KEY);
- } else {
- protocol = "http";
- url = ambariApi.getCluster().getConfigurationValue(YARN_SITE, YARN_RESOURCEMANAGER_HTTP_KEY);
+ url = (httpPolicy.equals(HTTPS_ONLY)) ? getYarnConfig(YARN_RESOURCEMANAGER_HTTPS_KEY)
+ : getYarnConfig(YARN_RESOURCEMANAGER_HTTP_KEY);
+
+ if (url == null || url.isEmpty()) {
+ url = getYarnConfig(YARN_RESOURCEMANAGER_HOSTNAME_KEY).trim() + ":" + getDefaultRMPort(httpPolicy);
}
- url = addProtocolIfMissing(url, protocol);
+
+ url = addProtocolIfMissing(url, getProtocol(httpPolicy));
}
return url;
}
private String[] getRMHAUrls(String httpPolicy) {
- String haRmIds = ambariApi.getCluster().getConfigurationValue(YARN_SITE, YARN_RESOURCEMANAGER_HA_RM_IDS_KEY);
+ String haRmIds = getYarnConfig(YARN_RESOURCEMANAGER_HA_RM_IDS_KEY);
String[] ids = haRmIds.split(",");
int index = 0;
String[] urls = new String[ids.length];
for (String id : ids) {
- String url, protocol;
- if (HTTPS_ONLY.equals(httpPolicy)) {
- url = ambariApi.getCluster().getConfigurationValue(YARN_SITE, YARN_RESOURCEMANAGER_HTTPS_HA_PARTIAL_KEY + id);
- protocol = "https";
- } else {
- url = ambariApi.getCluster().getConfigurationValue(YARN_SITE, YARN_RESOURCEMANAGER_HTTP_HA_PARTIAL_KEY + id);
- protocol = "http";
+ String url = (HTTPS_ONLY.equals(httpPolicy)) ? getYarnConfig(YARN_RESOURCEMANAGER_HTTPS_HA_PARTIAL_KEY + id)
+ : getYarnConfig(YARN_RESOURCEMANAGER_HTTP_HA_PARTIAL_KEY + id);
+
+ if (url == null || url.isEmpty()) {
+ url = getYarnConfig(YARN_RESOURCEMANAGER_HOSTNAME_PARTIAL_KEY + id).trim() + ":" + getDefaultRMPort(httpPolicy);
}
- urls[index++] = addProtocolIfMissing(url.trim(), protocol);
+ urls[index++] = addProtocolIfMissing(url.trim(), getProtocol(httpPolicy));
}
return urls;
}
@@ -267,9 +269,8 @@ public class Services {
private String getATSUrlFromCluster() {
String url;
- String protocol;
- String httpPolicy = ambariApi.getCluster().getConfigurationValue(YARN_SITE, YARN_HTTP_POLICY);
+ String httpPolicy = getYarnConfig(YARN_HTTP_POLICY);
if (!(HTTP_ONLY.equals(httpPolicy) || HTTPS_ONLY.equals(httpPolicy))) {
LOG.error(String.format("RA030 Unknown value %s of yarn-site/yarn.http.policy. HTTP_ONLY assumed.", httpPolicy));
@@ -277,13 +278,11 @@ public class Services {
}
if (httpPolicy.equals(HTTPS_ONLY)) {
- protocol = "https";
- url = ambariApi.getCluster().getConfigurationValue(YARN_SITE, YARN_TIMELINE_WEBAPP_HTTPS_ADDRESS_KEY);
+ url = getYarnConfig(YARN_TIMELINE_WEBAPP_HTTPS_ADDRESS_KEY);
} else {
- protocol = "http";
- url = ambariApi.getCluster().getConfigurationValue(YARN_SITE, YARN_TIMELINE_WEBAPP_HTTP_ADDRESS_KEY);
+ url = getYarnConfig(YARN_TIMELINE_WEBAPP_HTTP_ADDRESS_KEY);
}
- url = addProtocolIfMissing(url, protocol);
+ url = addProtocolIfMissing(url, getProtocol(httpPolicy));
return url;
}
@@ -317,4 +316,20 @@ public class Services {
public static boolean hasProtocol(String url) {
return url.matches("^[^:]+://.*$");
}
+
+ private String getProtocol(String yarnHttpPolicyConfig) {
+ return HTTPS_ONLY.equals(yarnHttpPolicyConfig) ? "https" : "http";
+ }
+
+ private String getYarnConfig(String key) {
+ return ambariApi.getCluster().getConfigurationValue(YARN_SITE, key);
+ }
+
+ /**
+ * @param yarnHttpPolicy - The HTTP Policy configured in YARN site file
+ * @return The default resource manager port depending on the http policy
+ */
+ private String getDefaultRMPort(String yarnHttpPolicy) {
+ return (HTTPS_ONLY.equals(yarnHttpPolicy)) ? YARN_RESOURCEMANAGER_DEFAULT_HTTPS_PORT : YARN_RESOURCEMANAGER_DEFAULT_HTTP_PORT;
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/80d36ec7/contrib/views/utils/src/test/java/org/apache/ambari/view/utils/ambari/ServicesTest.java
----------------------------------------------------------------------
diff --git a/contrib/views/utils/src/test/java/org/apache/ambari/view/utils/ambari/ServicesTest.java b/contrib/views/utils/src/test/java/org/apache/ambari/view/utils/ambari/ServicesTest.java
index 5d8918d..1cf5747 100644
--- a/contrib/views/utils/src/test/java/org/apache/ambari/view/utils/ambari/ServicesTest.java
+++ b/contrib/views/utils/src/test/java/org/apache/ambari/view/utils/ambari/ServicesTest.java
@@ -41,6 +41,8 @@ public class ServicesTest extends EasyMockSupport {
private static final String HTTP_RM_URL2 = "http://c2.ambari.apache.org:8088";
private static final String HTTPS_RM_URL1 = "https://c1.ambari.apache.org:8088";
private static final String HTTPS_RM_URL2 = "https://c2.ambari.apache.org:8088";
+ private static final String RM_URL1_HOST = "c1.ambari.apache.org";
+ private static final String RM_URL2_HOST = "c2.ambari.apache.org";
private static final String RM_URL1_HOST_PORT = "c1.ambari.apache.org:8088";
private static final String RM_URL2_HOST_PORT = "c2.ambari.apache.org:8088";
private static final String RM_INFO_API_ENDPOINT = Services.RM_INFO_API_ENDPOINT;
@@ -274,6 +276,59 @@ public class ServicesTest extends EasyMockSupport {
}
@Test
+ public void shouldConnectToDefaultHostPortInClusterModeWhenWebaddressConfigIsEmpty() throws Exception {
+ ViewContext viewContext = getViewContext(new HashMap<String, String>());
+ AmbariApi ambariApi = createNiceMock(AmbariApi.class);
+ Cluster cluster = createNiceMock(Cluster.class);
+
+ expect(ambariApi.isClusterAssociated()).andReturn(true).anyTimes();
+ setClusterExpectationWithEmptyWebappConfig(cluster, "HTTP_ONLY");
+ expect(ambariApi.getCluster()).andReturn(cluster).anyTimes();
+
+ Services services = new Services(ambariApi, viewContext);
+
+ replayAll();
+ assertEquals("http://" + RM_URL1_HOST + ":8088", services.getRMUrl());
+
+ reset(cluster);
+ setClusterExpectationWithEmptyWebappConfig(cluster, "HTTPS_ONLY");
+ replay(cluster);
+
+ assertEquals("https://" + RM_URL1_HOST + ":8090", services.getRMUrl());
+
+ }
+
+ @Test
+ public void shouldConnectToDefaultHostPortInClusterModeWithHAWhenWebaddressConfigIsEmpty() throws Exception {
+ ViewContext viewContext = getViewContext(new HashMap<String, String>());
+ AmbariApi ambariApi = createNiceMock(AmbariApi.class);
+ Cluster cluster = createNiceMock(Cluster.class);
+ URLStreamProvider urlStreamProvider = createNiceMock(URLStreamProvider.class);
+
+ expect(ambariApi.isClusterAssociated()).andReturn(true).anyTimes();
+ setClusterExpectationInHAWithEmptyWebappConfig(cluster, "HTTP_ONLY");
+ expect(ambariApi.getCluster()).andReturn(cluster).anyTimes();
+
+ Services services = new Services(ambariApi, viewContext);
+
+ InputStream inputStream = IOUtils.toInputStream("{\"clusterInfo\": {\"haState\": \"ACTIVE\"}}");
+ expect(viewContext.getURLStreamProvider()).andReturn(urlStreamProvider).anyTimes();
+ expect(urlStreamProvider.readFrom(eq("http://" + RM_URL1_HOST + ":8088" + RM_INFO_API_ENDPOINT), eq("GET"), anyString(), EasyMock.<Map<String, String>>anyObject())).andReturn(inputStream);
+
+ replayAll();
+ assertEquals("http://" + RM_URL1_HOST + ":8088", services.getRMUrl());
+
+ reset(cluster, urlStreamProvider);
+ setClusterExpectationInHAWithEmptyWebappConfig(cluster, "HTTPS_ONLY");
+ inputStream = IOUtils.toInputStream("{\"clusterInfo\": {\"haState\": \"ACTIVE\"}}");
+ expect(urlStreamProvider.readFrom(eq("https://" + RM_URL1_HOST + ":8090" + RM_INFO_API_ENDPOINT), eq("GET"), anyString(), EasyMock.<Map<String, String>>anyObject())).andReturn(inputStream);
+ replay(cluster, urlStreamProvider);
+
+ assertEquals("https://" + RM_URL1_HOST + ":8090", services.getRMUrl());
+
+ }
+
+ @Test
public void shouldFetchRMUrlsWhileHAEnabledInClusterMode() throws Exception {
ViewContext viewContext = getViewContext(new HashMap<String, String>());
AmbariApi ambariApi = createNiceMock(AmbariApi.class);
@@ -341,6 +396,21 @@ public class ServicesTest extends EasyMockSupport {
expect(cluster.getConfigurationValue("yarn-site", "yarn.resourcemanager.webapp.https.address.rm2")).andReturn(RM_URL2_HOST_PORT);
}
+ private void setClusterExpectationInHAWithEmptyWebappConfig(Cluster cluster, String httpPolicy) {
+ expect(cluster.getConfigurationValue("yarn-site", "yarn.resourcemanager.ha.enabled")).andReturn("true");
+ expect(cluster.getConfigurationValue("yarn-site", "yarn.http.policy")).andReturn(httpPolicy);
+ expect(cluster.getConfigurationValue("yarn-site", "yarn.resourcemanager.ha.rm-ids")).andReturn("rm1,rm2");
+ expect(cluster.getConfigurationValue("yarn-site", "yarn.resourcemanager.hostname.rm1")).andReturn(RM_URL1_HOST);
+ expect(cluster.getConfigurationValue("yarn-site", "yarn.resourcemanager.hostname.rm2")).andReturn(RM_URL2_HOST);
+
+ }
+
+ private void setClusterExpectationWithEmptyWebappConfig(Cluster cluster, String httpPolicy) {
+ expect(cluster.getConfigurationValue("yarn-site", "yarn.resourcemanager.ha.enabled")).andReturn("false");
+ expect(cluster.getConfigurationValue("yarn-site", "yarn.http.policy")).andReturn(httpPolicy);
+ expect(cluster.getConfigurationValue("yarn-site", "yarn.resourcemanager.hostname")).andReturn(RM_URL1_HOST);
+ }
+
private ViewContext getViewContext(Map<String, String> map) {
ViewContext viewContextMock = createNiceMock(ViewContext.class);
expect(viewContextMock.getProperties()).andReturn(map);