Updated Branches: refs/heads/trunk 2adbf8310 -> 73d493991
AMBARI-3099. Cannot change JMX ports using Ambari configuration API. (swagle) Project: http://git-wip-us.apache.org/repos/asf/incubator-ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ambari/commit/73d49399 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/73d49399 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/73d49399 Branch: refs/heads/trunk Commit: 73d4939911c6dc73474a61bd155b7110d60be869 Parents: 2adbf83 Author: Siddharth Wagle <[email protected]> Authored: Wed Sep 4 15:31:53 2013 -0700 Committer: Siddharth Wagle <[email protected]> Committed: Wed Sep 4 15:55:35 2013 -0700 ---------------------------------------------------------------------- .../internal/AbstractProviderModule.java | 49 +++++----- .../internal/JMXHostProviderTest.java | 97 +++++++++++++++++++- 2 files changed, 123 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/73d49399/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 77556f0..90261fc 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 @@ -33,6 +33,7 @@ import org.apache.ambari.server.controller.utilities.PropertyHelper; import org.apache.ambari.server.controller.AmbariManagementController; import com.google.inject.Inject; import org.apache.ambari.server.controller.utilities.StreamProvider; +import org.apache.ambari.server.state.DesiredConfig; import org.apache.ambari.server.state.Service; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -200,7 +201,7 @@ public abstract class AbstractProviderModule implements ProviderModule, Resource Service.Type service = componentServiceMap.get(componentName); if (service != null) { try { - String currVersion = getDesiredConfigVersion(clusterName, service.name(), + String currVersion = getDesiredConfigVersion(clusterName, serviceConfigTypes.get(service)); String oldVersion = serviceConfigVersions.get(service); @@ -447,33 +448,37 @@ public abstract class AbstractProviderModule implements ProviderModule, Resource } private String getDesiredConfigVersion(String clusterName, - String serviceName, String configType) throws + String configType) throws NoSuchParentResourceException, UnsupportedPropertyException, SystemException { // Get config version tag - ResourceProvider serviceResourceProvider = getResourceProvider(Resource.Type.Service); + ResourceProvider clusterResourceProvider = getResourceProvider(Resource + .Type.Cluster); Predicate basePredicate = new PredicateBuilder().property - (ServiceResourceProvider.SERVICE_CLUSTER_NAME_PROPERTY_ID).equals(clusterName).and() - .property(ServiceResourceProvider.SERVICE_SERVICE_NAME_PROPERTY_ID).equals(serviceName).toPredicate(); + (ClusterResourceProvider.CLUSTER_NAME_PROPERTY_ID).equals(clusterName) + .toPredicate(); - Set<Resource> serviceResource = null; + Set<Resource> clusterResource = null; try { - serviceResource = serviceResourceProvider.getResources( - PropertyHelper.getReadRequest(ServiceResourceProvider.SERVICE_CLUSTER_NAME_PROPERTY_ID, - ServiceResourceProvider.SERVICE_SERVICE_NAME_PROPERTY_ID, - ServiceResourceProvider.SERVICE_DESIRED_CONFIGS_PROPERTY_ID), basePredicate); + clusterResource = clusterResourceProvider.getResources( + PropertyHelper.getReadRequest(ClusterResourceProvider.CLUSTER_NAME_PROPERTY_ID, + ClusterResourceProvider.CLUSTER_DESIRED_CONFIGS_PROPERTY_ID), basePredicate); } catch (NoSuchResourceException e) { LOG.error("Resource for the desired config not found. " + e); } String versionTag = "version1"; - if (serviceResource != null) { - for (Resource res : serviceResource) { - Map<String, String> configs = (Map<String, String>) - res.getPropertyValue(ServiceResourceProvider.SERVICE_DESIRED_CONFIGS_PROPERTY_ID); + if (clusterResource != null) { + for (Resource resource : clusterResource) { + Map<String, Object> configs = + resource.getPropertiesMap().get(ClusterResourceProvider + .CLUSTER_DESIRED_CONFIGS_PROPERTY_ID); if (configs != null) { - versionTag = configs.get(configType); + DesiredConfig config = (DesiredConfig) configs.get(configType); + if (config != null) { + versionTag = config.getVersion(); + } } } } @@ -519,13 +524,13 @@ public abstract class AbstractProviderModule implements ProviderModule, Resource /** * Create the JMX property provider for the given type. */ - private PropertyProvider createJMXPropertyProvider( Resource.Type type, StreamProvider streamProvider, - JMXHostProvider jmxHostProvider, - String clusterNamePropertyId, - String hostNamePropertyId, - String componentNamePropertyId, - String statePropertyId, - Set<String> healthyStates) { + private PropertyProvider createJMXPropertyProvider(Resource.Type type, StreamProvider streamProvider, + JMXHostProvider jmxHostProvider, + String clusterNamePropertyId, + String hostNamePropertyId, + String componentNamePropertyId, + String statePropertyId, + Set<String> healthyStates) { updateClusterVersion(); Map<PropertyHelper.MetricsVersion, AbstractPropertyProvider> providers = http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/73d49399/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 cf9f504..527ccb5 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 @@ -19,6 +19,7 @@ package org.apache.ambari.server.controller.internal; import com.google.inject.Guice; import com.google.inject.Injector; +import com.google.inject.persist.PersistService; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.controller.*; @@ -26,12 +27,16 @@ import org.apache.ambari.server.controller.spi.*; import org.apache.ambari.server.controller.utilities.PropertyHelper; import org.apache.ambari.server.orm.GuiceJpaInitializer; import org.apache.ambari.server.orm.InMemoryDefaultTestModule; +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.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; + +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -55,6 +60,11 @@ public class JMXHostProviderTest { ambariMetaInfo.init(); } + @After + public void teardown() { + injector.getInstance(PersistService.class).stop(); + } + private void createService(String clusterName, String serviceName, State desiredState) throws AmbariException { String dStateStr = null; @@ -157,9 +167,74 @@ public class JMXHostProviderTest { controller.updateServices(sReqs, mapRequestProps, true, false); } + private void createConfigs() throws AmbariException { + String clusterName = "c1"; + ClusterRequest r = new ClusterRequest(null, clusterName, "HDP-0.1", null); + controller.createCluster(r); + clusters.getCluster(clusterName).setDesiredStackVersion(new StackId("HDP-0.1")); + String serviceName = "HDFS"; + createService(clusterName, serviceName, null); + String componentName1 = "NAMENODE"; + String componentName2 = "DATANODE"; + String componentName3 = "HDFS_CLIENT"; + + Map<String, String> mapRequestProps = new HashMap<String, String>(); + mapRequestProps.put("context", "Called from a test"); + + createServiceComponent(clusterName, serviceName, componentName1, + State.INIT); + createServiceComponent(clusterName, serviceName, componentName2, + State.INIT); + createServiceComponent(clusterName, serviceName, componentName3, + State.INIT); + + String host1 = "h1"; + clusters.addHost(host1); + clusters.getHost("h1").setOsType("centos5"); + clusters.getHost("h1").persist(); + String host2 = "h2"; + clusters.addHost(host2); + clusters.getHost("h2").setOsType("centos6"); + clusters.getHost("h2").persist(); + clusters.mapHostToCluster(host1, clusterName); + clusters.mapHostToCluster(host2, clusterName); + + createServiceComponentHost(clusterName, null, componentName1, + host1, null); + createServiceComponentHost(clusterName, serviceName, componentName2, + host1, null); + createServiceComponentHost(clusterName, serviceName, componentName2, + host2, null); + createServiceComponentHost(clusterName, serviceName, componentName3, + host1, null); + createServiceComponentHost(clusterName, serviceName, componentName3, + host2, null); + + // Create configs + Map<String, String> configs = new HashMap<String, String>(); + configs.put(NAMENODE_PORT, "localhost:70070"); + configs.put(DATANODE_PORT, "localhost:70075"); + + ConfigurationRequest cr1 = new ConfigurationRequest(clusterName, + "hdfs-site", "versionN", configs); + + ClusterRequest crReq = new ClusterRequest(null, clusterName, null, null); + crReq.setDesiredConfig(cr1); + controller.updateClusters(Collections.singleton(crReq), null); + Cluster cluster = clusters.getCluster(clusterName); + Assert.assertEquals("versionN", cluster.getDesiredConfigByType("hdfs-site") + .getVersionTag()); + Assert.assertEquals("localhost:70070", cluster.getDesiredConfigByType + ("hdfs-site").getProperties().get(NAMENODE_PORT)); + } + @Test - public void testJMXPortMapInit() throws NoSuchParentResourceException, ResourceAlreadyExistsException, UnsupportedPropertyException, SystemException, AmbariException, NoSuchResourceException { + public void testJMXPortMapInitAtServiceLevel() throws + NoSuchParentResourceException, + ResourceAlreadyExistsException, UnsupportedPropertyException, + SystemException, AmbariException, NoSuchResourceException { + createHDFSServiceConfigs(); JMXHostProviderModule providerModule = new JMXHostProviderModule(); @@ -174,6 +249,26 @@ public class JMXHostProviderTest { Assert.assertEquals(null, providerModule.getPort("c1", "HBASE_MASTER")); } + @Test + public void testJMXPortMapInitAtClusterLevel() throws + NoSuchParentResourceException, + ResourceAlreadyExistsException, UnsupportedPropertyException, + SystemException, AmbariException, NoSuchResourceException { + + createConfigs(); + + JMXHostProviderModule providerModule = new JMXHostProviderModule(); + providerModule.registerResourceProvider(Resource.Type.Cluster); + providerModule.registerResourceProvider(Resource.Type.Configuration); + // Non default port addresses + Assert.assertEquals("70070", providerModule.getPort("c1", "NAMENODE")); + Assert.assertEquals("70075", providerModule.getPort("c1", "DATANODE")); + // Default port addresses + Assert.assertEquals(null, providerModule.getPort("c1", "JOBTRACKER")); + Assert.assertEquals(null, providerModule.getPort("c1", "TASKTRACKER")); + Assert.assertEquals(null, providerModule.getPort("c1", "HBASE_MASTER")); + } + private static class JMXHostProviderModule extends AbstractProviderModule {
