Updated Branches: refs/heads/trunk ec7f70673 -> bb62d39bc
AMBARI-3591. Fix for JMX not throwing exception when HostComponent is not found. Project: http://git-wip-us.apache.org/repos/asf/incubator-ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ambari/commit/bb62d39b Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/bb62d39b Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/bb62d39b Branch: refs/heads/trunk Commit: bb62d39bc71648f1e4cf559c0ca4364b76626d33 Parents: ec7f706 Author: Nate Cole <[email protected]> Authored: Fri Oct 25 13:04:12 2013 -0400 Committer: Nate Cole <[email protected]> Committed: Fri Oct 25 13:09:15 2013 -0400 ---------------------------------------------------------------------- .../controller/jmx/JMXPropertyProvider.java | 8 ++--- .../controller/jmx/JMXPropertyProviderTest.java | 31 ++++++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/bb62d39b/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 dc1c61e..baa39bd 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 @@ -303,14 +303,14 @@ public class JMXPropertyProvider extends AbstractPropertyProvider { String port = getPort(clusterName, componentName); if (port == null) { - throw new SystemException( - "Unable to get JMX metrics. No port value for " + componentName, null); + LOG.warn("Unable to get JMX metrics. No port value for " + componentName); + return resource; } String hostName = getHost(resource, clusterName, componentName); if (hostName == null) { - throw new SystemException( - "Unable to get JMX metrics. No host name for " + componentName, null); + LOG.warn("Unable to get JMX metrics. No host name for " + componentName); + return resource; } String protocol = getJMXProtocol(clusterName, componentName); http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/bb62d39b/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 6aafd98..38684ab 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 @@ -777,7 +777,38 @@ public class JMXPropertyProviderTest { Assert.assertEquals(0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "currentLagTxns"))); Assert.assertEquals(8444, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/journalnode/cluster/mycluster", "lastWrittenTxId"))); } + + @Test + public void testPopulateResources_NoRegionServer() throws Exception { + TestStreamProvider streamProvider = new TestStreamProvider(); + TestJMXHostProvider hostProvider = new TestJMXHostProvider(false); + + JMXPropertyProvider propertyProvider = new JMXPropertyProvider( + PropertyHelper.getJMXPropertyIds(Resource.Type.HostComponent, PropertyHelper.MetricsVersion.HDP2), + streamProvider, + hostProvider, + PropertyHelper.getPropertyId("HostRoles", "cluster_name"), + null, // force use of the hostProvider, which returns null for this test + PropertyHelper.getPropertyId("HostRoles", "component_name"), + PropertyHelper.getPropertyId("HostRoles", "state"), + Collections.singleton("STARTED")); + Resource resource = new ResourceImpl(Resource.Type.HostComponent); + + resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "domu-12-31-39-0e-34-e1.compute-1.internal"); + resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "HBASE_REGIONSERVER"); + resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED"); + + int preSize = resource.getPropertiesMap().size(); + + // request with an empty set should get all supported properties + Request request = PropertyHelper.getReadRequest(Collections.<String>emptySet()); + + Assert.assertEquals(1, propertyProvider.populateResources(Collections.singleton(resource), request, null).size()); + + Assert.assertEquals(preSize, resource.getPropertiesMap().size()); + } + private static class TestJMXHostProvider implements JMXHostProvider { private final boolean unknownPort;
