You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by vb...@apache.org on 2014/08/11 18:01:29 UTC
git commit: AMBARI-6810. rm_metrics and StartTime are missed after
ResourceManager HA enabling.(vbrodetskyi)
Repository: ambari
Updated Branches:
refs/heads/trunk f1909d72c -> 4897ab831
AMBARI-6810. rm_metrics and StartTime are missed after ResourceManager HA enabling.(vbrodetskyi)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/4897ab83
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/4897ab83
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/4897ab83
Branch: refs/heads/trunk
Commit: 4897ab831ea6aa0e96e6b89ca15e73d6780c62fc
Parents: f1909d7
Author: Vitaly Brodetskyi <vb...@hortonworks.com>
Authored: Mon Aug 11 18:01:40 2014 +0300
Committer: Vitaly Brodetskyi <vb...@hortonworks.com>
Committed: Mon Aug 11 18:01:40 2014 +0300
----------------------------------------------------------------------
.../controller/AmbariManagementController.java | 12 +++++++
.../AmbariManagementControllerImpl.java | 2 +-
.../internal/AbstractProviderModule.java | 16 ++++++++-
.../server/controller/jmx/JMXHostProvider.java | 15 ++++++--
.../controller/jmx/JMXPropertyProvider.java | 36 ++++++++++++++------
.../internal/JMXHostProviderTest.java | 32 +++++++++++++++++
.../controller/jmx/JMXPropertyProviderTest.java | 5 +++
.../apache/ambari/scom/SQLProviderModule.java | 6 ++++
8 files changed, 109 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/4897ab83/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
index 92ef821..bee118e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
@@ -454,6 +454,18 @@ public interface AmbariManagementController {
// ----- Common utility methods --------------------------------------------
/**
+ * Get service name by cluster instance and component name
+ *
+ * @param cluster the cluster instance
+ * @param componentName the component name in String type
+ *
+ * @return a service name
+ *
+ * @throws AmbariException if service name is null or empty
+ */
+ public String findServiceName(Cluster cluster, String componentName) throws AmbariException;
+
+ /**
* Get the clusters for this management controller.
*
* @return the clusters
http://git-wip-us.apache.org/repos/asf/ambari/blob/4897ab83/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
index 9d2c5d3..1530a20 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
@@ -2322,7 +2322,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
}
}
- private String findServiceName(Cluster cluster, String componentName) throws AmbariException {
+ public String findServiceName(Cluster cluster, String componentName) throws AmbariException {
StackId stackId = cluster.getDesiredStackVersion();
String serviceName =
ambariMetaInfo.getComponentToService(stackId.getStackName(),
http://git-wip-us.apache.org/repos/asf/ambari/blob/4897ab83/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
index bf92238..fc60210 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
@@ -46,6 +46,7 @@ import org.apache.ambari.server.state.DesiredConfig;
import org.apache.ambari.server.state.HostState;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.State;
+import org.apache.ambari.server.state.Cluster;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -133,7 +134,7 @@ public abstract class AbstractProviderModule implements ProviderModule, Resource
private final Map<Resource.Type,List<PropertyProvider>> propertyProviders = new HashMap<Resource.Type, List<PropertyProvider>>();
@Inject
- private AmbariManagementController managementController;
+ AmbariManagementController managementController;
/**
* The map of host components.
@@ -212,6 +213,19 @@ public abstract class AbstractProviderModule implements ProviderModule, Resource
}
@Override
+ public Set<String> getHostNames(String clusterName, String componentName) {
+ Set<String> hosts = null;
+ try {
+ Cluster cluster = managementController.getClusters().getCluster(clusterName);
+ String serviceName = managementController.findServiceName(cluster, componentName);
+ hosts = cluster.getService(serviceName).getServiceComponent(componentName).getServiceComponentHosts().keySet();
+ } catch (Exception e) {
+ LOG.warn("Exception in getting host names for jmx metrics: ", e);
+ }
+ return hosts;
+ }
+
+ @Override
public String getPort(String clusterName, String componentName) throws SystemException {
// Parent map need not be synchronized
Map<String, String> clusterJmxPorts = jmxPortMap.get(clusterName);
http://git-wip-us.apache.org/repos/asf/ambari/blob/4897ab83/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXHostProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXHostProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXHostProvider.java
index 142740c..12f3725 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXHostProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXHostProvider.java
@@ -17,9 +17,9 @@
*/
package org.apache.ambari.server.controller.jmx;
-import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
import org.apache.ambari.server.controller.spi.SystemException;
-import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
+
+import java.util.Set;
/**
* Provider of JMX host information.
@@ -40,6 +40,17 @@ public interface JMXHostProvider {
throws SystemException;
/**
+ * Get the JMX host names for the given cluster name and component name.
+ *
+ * @param clusterName the cluster name
+ * @param componentName the component name
+ *
+ * @return set of JMX host names
+ *
+ */
+ public Set<String> getHostNames(String clusterName, String componentName);
+
+ /**
* Get the port for the specified cluster name and component.
*
* @param clusterName the cluster name
http://git-wip-us.apache.org/repos/asf/ambari/blob/4897ab83/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXPropertyProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXPropertyProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXPropertyProvider.java
index 734da90..4437ce9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXPropertyProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXPropertyProvider.java
@@ -20,6 +20,7 @@ package org.apache.ambari.server.controller.jmx;
import java.io.IOException;
import java.io.InputStream;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
@@ -334,26 +335,33 @@ public class JMXPropertyProvider extends AbstractPropertyProvider {
return resource;
}
- String hostName = getHost(resource, clusterName, componentName);
- if (hostName == null) {
+ Set<String> hostNames = getHosts(resource, clusterName, componentName);
+ if (hostNames == null || hostNames.isEmpty()) {
LOG.warn("Unable to get JMX metrics. No host name for " + componentName);
return resource;
}
String protocol = getJMXProtocol(clusterName, componentName);
- try {
- InputStream in = streamProvider.readFrom(getSpec(protocol, hostName, port, componentName));
+ InputStream in = null;
+ try {
try {
-
- if (null == componentName || !componentName.equals(STORM_REST_API)) {
- getHadoopMetricValue(in, ids, resource, request);
- } else {
- getStormMetricValue(in, ids, resource);
+ for (String hostName : hostNames) {
+ try {
+ in = streamProvider.readFrom(getSpec(protocol, hostName, port, componentName));
+ if (null == componentName || !componentName.equals(STORM_REST_API)) {
+ getHadoopMetricValue(in, ids, resource, request);
+ } else {
+ getStormMetricValue(in, ids, resource);
+ }
+ } catch (IOException e) {
+ logException(e);
+ }
}
-
} finally {
- in.close();
+ if (in != null) {
+ in.close();
+ }
}
} catch (IOException e) {
logException(e);
@@ -507,6 +515,12 @@ public class JMXPropertyProvider extends AbstractPropertyProvider {
(String) resource.getPropertyValue(hostNamePropertyId);
}
+ private Set<String> getHosts(Resource resource, String clusterName, String componentName) {
+ return hostNamePropertyId == null ?
+ jmxHostProvider.getHostNames(clusterName, componentName) :
+ Collections.singleton((String) resource.getPropertyValue(hostNamePropertyId));
+ }
+
private String getCategory(Map<String, Object> bean) {
if (bean.containsKey(NAME_KEY)) {
String name = (String) bean.get(NAME_KEY);
http://git-wip-us.apache.org/repos/asf/ambari/blob/4897ab83/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
index a66233d..94bd0c2 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
@@ -46,6 +46,9 @@ import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
+import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.ServiceComponent;
+import org.apache.ambari.server.state.ServiceComponentHost;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
@@ -348,6 +351,35 @@ public class JMXHostProviderTest {
}
@Test
+ public void testGetHostNames() throws AmbariException {
+ JMXHostProviderModule providerModule = new JMXHostProviderModule();
+
+
+ AmbariManagementController managementControllerMock = createNiceMock(AmbariManagementController.class);
+ Clusters clustersMock = createNiceMock(Clusters.class);
+ Cluster clusterMock = createNiceMock(Cluster.class);
+ Service serviceMock = createNiceMock(Service.class);
+ ServiceComponent serviceComponentMock = createNiceMock(ServiceComponent.class);
+
+ Map<String, ServiceComponentHost> hostComponents = new HashMap<String, ServiceComponentHost>();
+ hostComponents.put("host1", null);
+
+ expect(managementControllerMock.getClusters()).andReturn(clustersMock).anyTimes();
+ expect(managementControllerMock.findServiceName(clusterMock, "DATANODE")).andReturn("HDFS");
+ expect(clustersMock.getCluster("c1")).andReturn(clusterMock).anyTimes();
+ expect(clusterMock.getService("HDFS")).andReturn(serviceMock).anyTimes();
+ expect(serviceMock.getServiceComponent("DATANODE")).andReturn(serviceComponentMock).anyTimes();
+ expect(serviceComponentMock.getServiceComponentHosts()).andReturn(hostComponents).anyTimes();
+
+ replay(managementControllerMock, clustersMock, clusterMock, serviceMock, serviceComponentMock);
+ providerModule.managementController = managementControllerMock;
+
+ Set<String> result = providerModule.getHostNames("c1", "DATANODE");
+ Assert.assertTrue(result.iterator().next().toString().equals("host1"));
+
+ }
+
+ @Test
public void testJMXPortMapUpdate() throws
NoSuchParentResourceException,
ResourceAlreadyExistsException, UnsupportedPropertyException,
http://git-wip-us.apache.org/repos/asf/ambari/blob/4897ab83/ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/JMXPropertyProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/JMXPropertyProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/JMXPropertyProviderTest.java
index ac7314e..b4c3c6a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/JMXPropertyProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/JMXPropertyProviderTest.java
@@ -431,6 +431,11 @@ public class JMXPropertyProviderTest {
}
@Override
+ public Set<String> getHostNames(String clusterName, String componentName) {
+ return null;
+ }
+
+ @Override
public String getPort(String clusterName, String componentName) throws
SystemException {
http://git-wip-us.apache.org/repos/asf/ambari/blob/4897ab83/contrib/ambari-scom/ambari-scom-server/src/main/java/org/apache/ambari/scom/SQLProviderModule.java
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/ambari-scom-server/src/main/java/org/apache/ambari/scom/SQLProviderModule.java b/contrib/ambari-scom/ambari-scom-server/src/main/java/org/apache/ambari/scom/SQLProviderModule.java
index a62f3f7..950935c 100644
--- a/contrib/ambari-scom/ambari-scom-server/src/main/java/org/apache/ambari/scom/SQLProviderModule.java
+++ b/contrib/ambari-scom/ambari-scom-server/src/main/java/org/apache/ambari/scom/SQLProviderModule.java
@@ -42,6 +42,7 @@ import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
* Provider module used to install PropertyProviders required for ambari-scom.
@@ -159,6 +160,11 @@ public class SQLProviderModule extends DefaultProviderModule implements HostInfo
}
@Override
+ public Set<String> getHostNames(String clusterName, String componentName) {
+ return super.getHostNames(clusterName, componentName);
+ }
+
+ @Override
public String getHostName(String id) throws SystemException {
return getClusterNodeName(id);
}