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 <[email protected]>
Authored: Mon Aug 11 18:01:40 2014 +0300
Committer: Vitaly Brodetskyi <[email protected]>
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);
   }

Reply via email to