Repository: ambari Updated Branches: refs/heads/trunk b0bc550c1 -> 7593acfda
AMBARI-17036 - Getting JMX Protocol Values On Large Cluster Takes Too Long (jonathanhurley) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/7593acfd Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/7593acfd Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/7593acfd Branch: refs/heads/trunk Commit: 7593acfdacf9ace292b1adb607eebbb15080469f Parents: b0bc550 Author: Jonathan Hurley <[email protected]> Authored: Fri Jun 3 16:05:15 2016 -0400 Committer: Jonathan Hurley <[email protected]> Committed: Mon Jun 6 11:52:53 2016 -0400 ---------------------------------------------------------------------- .../controller/AmbariManagementController.java | 10 ++ .../AmbariManagementControllerImpl.java | 11 +++ .../internal/AbstractProviderModule.java | 98 ++++++++++++-------- .../controller/jmx/JMXPropertyProvider.java | 5 +- .../events/ClusterConfigChangedEvent.java | 2 +- .../ambari/server/state/ConfigHelper.java | 33 ++----- .../apache/ambari/server/state/ConfigImpl.java | 9 +- .../internal/JMXHostProviderTest.java | 39 ++++---- 8 files changed, 115 insertions(+), 92 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/7593acfd/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 9f221d5..b488af3 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 @@ -31,6 +31,8 @@ import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.controller.internal.RequestStageContainer; import org.apache.ambari.server.controller.metrics.MetricPropertyProviderFactory; import org.apache.ambari.server.controller.metrics.timeline.cache.TimelineMetricCacheProvider; +import org.apache.ambari.server.events.AmbariEvent; +import org.apache.ambari.server.events.publishers.AmbariEventPublisher; import org.apache.ambari.server.metadata.RoleCommandOrder; import org.apache.ambari.server.scheduler.ExecutionScheduleManager; import org.apache.ambari.server.security.authorization.AuthorizationException; @@ -825,5 +827,13 @@ public interface AmbariManagementController { */ CredentialStoreService getCredentialStoreService(); + /** + * Gets an {@link AmbariEventPublisher} which can be used to send and receive + * {@link AmbariEvent}s. + * + * @return + */ + AmbariEventPublisher getAmbariEventPublisher(); + } http://git-wip-us.apache.org/repos/asf/ambari/blob/7593acfd/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 fe9204d..ba93d25 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 @@ -97,6 +97,7 @@ import org.apache.ambari.server.controller.metrics.MetricPropertyProviderFactory import org.apache.ambari.server.controller.metrics.timeline.cache.TimelineMetricCacheProvider; import org.apache.ambari.server.controller.spi.Resource; import org.apache.ambari.server.customactions.ActionDefinition; +import org.apache.ambari.server.events.publishers.AmbariEventPublisher; import org.apache.ambari.server.metadata.ActionMetadata; import org.apache.ambari.server.metadata.RoleCommandOrder; import org.apache.ambari.server.orm.dao.ClusterDAO; @@ -265,6 +266,8 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle private CredentialStoreService credentialStoreService; @Inject private ClusterVersionDAO clusterVersionDAO; + @Inject + private AmbariEventPublisher ambariEventPublisher; private MaintenanceStateHelper maintenanceStateHelper; @@ -4729,6 +4732,14 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle return injector.getInstance(MetricPropertyProviderFactory.class); } + /** + * {@inheritDoc} + */ + @Override + public AmbariEventPublisher getAmbariEventPublisher() { + return injector.getInstance(AmbariEventPublisher.class); + } + @Override public KerberosHelper getKerberosHelper() { return kerberosHelper; http://git-wip-us.apache.org/repos/asf/ambari/blob/7593acfd/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 591441b..5ac66d8 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 @@ -63,7 +63,11 @@ import org.apache.ambari.server.controller.spi.UnsupportedPropertyException; import org.apache.ambari.server.controller.utilities.PredicateBuilder; import org.apache.ambari.server.controller.utilities.PropertyHelper; import org.apache.ambari.server.controller.utilities.StreamProvider; +import org.apache.ambari.server.events.ClusterConfigChangedEvent; +import org.apache.ambari.server.events.publishers.AmbariEventPublisher; import org.apache.ambari.server.state.Cluster; +import org.apache.ambari.server.state.Clusters; +import org.apache.ambari.server.state.ConfigHelper; import org.apache.ambari.server.state.DesiredConfig; import org.apache.ambari.server.state.HostState; import org.apache.ambari.server.state.Service; @@ -72,6 +76,7 @@ import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.eventbus.Subscribe; import com.google.inject.Inject; /** @@ -107,7 +112,7 @@ public abstract class AbstractProviderModule implements ProviderModule, private static final Map<String, Map<String, String[]>> jmxDesiredRpcSuffixProperties = new ConcurrentHashMap<>(); private volatile Map<String, Map<String, Map<String, String>>> jmxDesiredRpcSuffixes = new HashMap<String, Map<String, Map<String,String>>>(); private volatile Map<String, String> clusterHdfsSiteConfigVersionMap = new HashMap<String, String>(); - private volatile Map<String, String> clusterJmxProtocolMap = new HashMap<String, String>(); + private volatile Map<String, String> clusterJmxProtocolMap = new ConcurrentHashMap<>(); private volatile Set<String> metricServerHosts = new HashSet<String>(); private volatile String clusterMetricServerPort = null; private volatile String clusterMetricServerVipPort = null; @@ -225,6 +230,14 @@ public abstract class AbstractProviderModule implements ProviderModule, private MetricPropertyProviderFactory metricPropertyProviderFactory; /** + * Used to respond to the following events: + * <ul> + * <li>{@link ClusterConfigChangedEvent} + */ + @Inject + protected AmbariEventPublisher eventPublisher; + + /** * The map of host components. */ private Map<String, Map<String, String>> clusterHostComponentMap; @@ -268,6 +281,11 @@ public abstract class AbstractProviderModule implements ProviderModule, if (metricPropertyProviderFactory == null && managementController != null) { metricPropertyProviderFactory = managementController.getMetricPropertyProviderFactory(); } + + if (null == eventPublisher && null != managementController) { + eventPublisher = managementController.getAmbariEventPublisher(); + eventPublisher.register(this); + } } @@ -964,48 +982,36 @@ public abstract class AbstractProviderModule implements ProviderModule, value.substring(value.lastIndexOf(":") + 1, value.length()) : value; } + /** + * Gets the desired configuration version tag for the given cluster and config + * type. + * + * @param clusterName + * the cluster name + * @param configType + * the configuration type (for example {@value hdfs-site}). + * @return + */ private String getDesiredConfigVersion(String clusterName, - String configType) throws - NoSuchParentResourceException, UnsupportedPropertyException, - SystemException { + String configType) { - // Get config version tag - ResourceProvider clusterResourceProvider = getResourceProvider(Resource.Type.Cluster); - Predicate basePredicate = new PredicateBuilder() - .property(ClusterResourceProvider.CLUSTER_NAME_PROPERTY_ID).equals(clusterName) - .toPredicate(); + String versionTag = ConfigHelper.FIRST_VERSION_TAG; - Set<Resource> clusterResource = null; try { + Clusters clusters = managementController.getClusters(); + Cluster cluster = clusters.getCluster(clusterName); + Map<String, DesiredConfig> desiredConfigs = cluster.getDesiredConfigs(); - Set<String> propertyIds = new HashSet<String>(); - propertyIds.add(ClusterResourceProvider.CLUSTER_NAME_PROPERTY_ID); - propertyIds.add(ClusterResourceProvider.CLUSTER_DESIRED_CONFIGS_PROPERTY_ID); - - Map<String, String> requestInfoProperties = new HashMap<String, String>(); - requestInfoProperties.put(ClusterResourceProvider.GET_IGNORE_PERMISSIONS_PROPERTY_ID, "true"); - - Request readRequest = PropertyHelper.getReadRequest(propertyIds, - requestInfoProperties, null, null, null); - - clusterResource = clusterResourceProvider.getResources(readRequest, basePredicate); - } catch (NoSuchResourceException e) { - LOG.error("Resource for the desired config not found. " + e); - } - - String versionTag = "version1"; - if (clusterResource != null) { - for (Resource resource : clusterResource) { - Map<String, Object> configs = - resource.getPropertiesMap().get(ClusterResourceProvider.CLUSTER_DESIRED_CONFIGS_PROPERTY_ID); - if (configs != null) { - DesiredConfig config = (DesiredConfig) configs.get(configType); - if (config != null) { - versionTag = config.getTag(); - } - } + DesiredConfig config = desiredConfigs.get(configType); + if (config != null) { + versionTag = config.getTag(); } + } catch (AmbariException ambariException) { + LOG.error( + "Unable to lookup the desired configuration tag for {} on cluster {}, defaulting to {}", + configType, clusterName, versionTag, ambariException); } + return versionTag; } @@ -1182,7 +1188,11 @@ public abstract class AbstractProviderModule implements ProviderModule, @Override public String getJMXProtocol(String clusterName, String componentName) { - String jmxProtocolString = clusterJmxProtocolMap.get(clusterName); + String mapKey = String.format("%s-%s", clusterName, componentName); + String jmxProtocolString = clusterJmxProtocolMap.get(mapKey); + if (null != jmxProtocolString) { + return jmxProtocolString; + } try { if (componentName.equals("NAMENODE") || componentName.equals("DATANODE") || componentName.equals("RESOURCEMANAGER") || componentName.equals("NODEMANAGER") || componentName.equals("JOURNALNODE") || componentName.equals("HISTORYSERVER")) { @@ -1196,7 +1206,6 @@ public abstract class AbstractProviderModule implements ProviderModule, newSiteConfigVersion, config, jmxDesiredProperties.get(componentName)); jmxProtocolString = getJMXProtocolString(protocolMap.get(componentName)); - clusterJmxProtocolMap.put(clusterName, jmxProtocolString); } } else { jmxProtocolString = "http"; @@ -1220,6 +1229,7 @@ public abstract class AbstractProviderModule implements ProviderModule, LOG.debug("JMXProtocol = " + jmxProtocolString + ", for clusterName=" + clusterName + ", componentName = " + componentName); } + clusterJmxProtocolMap.put(mapKey, jmxProtocolString); return jmxProtocolString; } @@ -1289,4 +1299,16 @@ public abstract class AbstractProviderModule implements ProviderModule, } } + /** + * Handles {@link ClusterConfigChangedEvent} which means that some caches + * should invalidate. + * + * @param event + * the change event. + */ + @Subscribe + public void onConfigurationChangedEvent(ClusterConfigChangedEvent event) { + clusterJmxProtocolMap.clear(); + } + } http://git-wip-us.apache.org/repos/asf/ambari/blob/7593acfd/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 e1a5e22..a315e5c 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 @@ -218,7 +218,7 @@ public class JMXPropertyProvider extends ThreadPoolEnabledPropertyProvider { String clusterName = (String) resource.getPropertyValue(clusterNamePropertyId); - String protocol = getJMXProtocol(clusterName, componentName); + String protocol = jmxHostProvider.getJMXProtocol(clusterName, componentName); boolean httpsEnabled = false; @@ -398,9 +398,6 @@ public class JMXPropertyProvider extends ThreadPoolEnabledPropertyProvider { return port; } - private String getJMXProtocol(String clusterName, String componentName) { - return jmxHostProvider.getJMXProtocol(clusterName, componentName); - } private Set<String> getHosts(Resource resource, String clusterName, String componentName) { return hostNamePropertyId == null ? http://git-wip-us.apache.org/repos/asf/ambari/blob/7593acfd/ambari-server/src/main/java/org/apache/ambari/server/events/ClusterConfigChangedEvent.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/ClusterConfigChangedEvent.java b/ambari-server/src/main/java/org/apache/ambari/server/events/ClusterConfigChangedEvent.java index dd37ff9..3ca4900 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/events/ClusterConfigChangedEvent.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/events/ClusterConfigChangedEvent.java @@ -77,7 +77,7 @@ public class ClusterConfigChangedEvent extends AmbariEvent { */ @Override public String toString() { - StringBuilder buffer = new StringBuilder("ClusterEnvConfigChangedEvent{"); + StringBuilder buffer = new StringBuilder("ClusterConfigChangedEvent{"); buffer.append("clusterName=").append(getClusterName()); buffer.append(", configType=").append(getConfigType()); buffer.append(", versionTag=").append(getVersionTag()); http://git-wip-us.apache.org/repos/asf/ambari/blob/7593acfd/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java index a3a2bda..1bd0ba9 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java @@ -38,32 +38,12 @@ import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.configuration.Configuration; import org.apache.ambari.server.controller.AmbariManagementController; -import org.apache.ambari.server.controller.ConfigurationRequest; import org.apache.ambari.server.orm.TransactionalLocks; import org.apache.ambari.server.orm.dao.ClusterDAO; import org.apache.ambari.server.orm.entities.ClusterConfigEntity; import org.apache.ambari.server.state.PropertyInfo.PropertyType; import org.apache.ambari.server.state.configgroup.ConfigGroup; import org.apache.ambari.server.upgrade.UpgradeCatalog170; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import com.google.common.collect.Maps; -import com.google.inject.Inject; -import com.google.inject.Singleton; -import com.google.inject.persist.Transactional; - -import org.apache.ambari.server.AmbariException; -import org.apache.ambari.server.api.services.AmbariMetaInfo; -import org.apache.ambari.server.configuration.Configuration; -import org.apache.ambari.server.controller.AmbariManagementController; -import org.apache.ambari.server.orm.dao.ClusterDAO; -import org.apache.ambari.server.orm.entities.ClusterConfigEntity; -import org.apache.ambari.server.state.PropertyInfo.PropertyType; -import org.apache.ambari.server.state.configgroup.ConfigGroup; -import org.apache.ambari.server.upgrade.UpgradeCatalog170; import org.apache.ambari.server.utils.SecretReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -112,6 +92,11 @@ public class ConfigHelper { public static final String HTTPS_ONLY = "HTTPS_ONLY"; /** + * The tag given to newly created versions. + */ + public static final String FIRST_VERSION_TAG = "version1"; + + /** * Used to ensure that methods which rely on the completion of * {@link Transactional} can detect when they are able to run. * @@ -831,10 +816,9 @@ public class ConfigHelper { String authenticatedUserName, String serviceVersionNote) throws AmbariException { - String tag = "version1"; - // create the configuration history entry - Config baseConfig = createConfig(cluster, controller, configType, tag, properties, propertyAttributes); + Config baseConfig = createConfig(cluster, controller, configType, FIRST_VERSION_TAG, properties, + propertyAttributes); if (baseConfig != null) { cluster.addDesiredConfig(authenticatedUserName, @@ -888,10 +872,9 @@ public class ConfigHelper { for (Map.Entry<String, Map<String, String>> entry : batchProperties.entrySet()) { String type = entry.getKey(); - String tag = "version1"; Map<String, String> properties = entry.getValue(); - Config baseConfig = createConfig(cluster, controller, type, tag, properties, + Config baseConfig = createConfig(cluster, controller, type, FIRST_VERSION_TAG, properties, Collections.<String, Map<String,String>>emptyMap()); if (null != baseConfig) { http://git-wip-us.apache.org/repos/asf/ambari/blob/7593acfd/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java index 726e49f..b590c56 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java @@ -33,7 +33,6 @@ import org.apache.ambari.server.orm.dao.ClusterDAO; import org.apache.ambari.server.orm.dao.ServiceConfigDAO; import org.apache.ambari.server.orm.entities.ClusterConfigEntity; import org.apache.ambari.server.orm.entities.ClusterEntity; -import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -423,12 +422,10 @@ public class ConfigImpl implements Config { cluster.getClusterGlobalLock().writeLock().unlock(); } - // broadcast the change event for cluster-env config type - if (StringUtils.equals(getType(), ConfigHelper.CLUSTER_ENV)) { - ClusterConfigChangedEvent event = new ClusterConfigChangedEvent(cluster.getClusterName(), - getType(), getTag(), getVersion()); + // broadcast the change event for the configuration + ClusterConfigChangedEvent event = new ClusterConfigChangedEvent(cluster.getClusterName(), + getType(), getTag(), getVersion()); eventPublisher.publish(event); - } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/7593acfd/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 58975f7..9f610f9 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 @@ -58,11 +58,11 @@ import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.springframework.security.core.context.SecurityContextHolder; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.persist.PersistService; -import org.springframework.security.core.context.SecurityContextHolder; public class JMXHostProviderTest { private Injector injector; @@ -228,7 +228,7 @@ public class JMXHostProviderTest { String serviceName = "HDFS"; String serviceName2 = "YARN"; String serviceName3 = "MAPREDUCE2"; - + createService(clusterName, serviceName, null); createService(clusterName, serviceName2, null); createService(clusterName, serviceName3, null); @@ -309,7 +309,7 @@ public class JMXHostProviderTest { yarnConfigs.put(RESOURCEMANAGER_HTTPS_PORT, "8090"); yarnConfigs.put(NODEMANAGER_HTTPS_PORT, "8044"); yarnConfigs.put(YARN_HTTPS_POLICY, "HTTPS_ONLY"); - + Map<String, String> mapreduceConfigs = new HashMap<String, String>(); mapreduceConfigs.put(MAPREDUCE_HTTPS_PORT, "19889"); mapreduceConfigs.put(MAPREDUCE_HTTPS_POLICY, "HTTPS_ONLY"); @@ -328,7 +328,7 @@ public class JMXHostProviderTest { "yarn-site", "versionN", yarnConfigs, null); crReq.setDesiredConfig(Collections.singletonList(cr2)); controller.updateClusters(Collections.singleton(crReq), null); - + ConfigurationRequest cr3 = new ConfigurationRequest(clusterName, "mapred-site", "versionN", mapreduceConfigs, null); crReq.setDesiredConfig(Collections.singletonList(cr3)); @@ -418,7 +418,7 @@ public class JMXHostProviderTest { createHDFSServiceConfigs(true); - JMXHostProviderModule providerModule = new JMXHostProviderModule(); + JMXHostProviderModule providerModule = new JMXHostProviderModule(controller); providerModule.registerResourceProvider(Resource.Type.Service); providerModule.registerResourceProvider(Resource.Type.Configuration); // Non default port addresses @@ -438,7 +438,7 @@ public class JMXHostProviderTest { createHDFSServiceConfigs(false); - JMXHostProviderModule providerModule = new JMXHostProviderModule(); + JMXHostProviderModule providerModule = new JMXHostProviderModule(controller); providerModule.registerResourceProvider(Resource.Type.Service); providerModule.registerResourceProvider(Resource.Type.Configuration); // Non default port addresses @@ -458,7 +458,7 @@ public class JMXHostProviderTest { createConfigsNameNodeHa(); - JMXHostProviderModule providerModule = new JMXHostProviderModule(); + JMXHostProviderModule providerModule = new JMXHostProviderModule(controller); providerModule.registerResourceProvider(Resource.Type.Service); providerModule.registerResourceProvider(Resource.Type.Configuration); @@ -475,7 +475,7 @@ public class JMXHostProviderTest { createConfigs(); - JMXHostProviderModule providerModule = new JMXHostProviderModule(); + JMXHostProviderModule providerModule = new JMXHostProviderModule(controller); providerModule.registerResourceProvider(Resource.Type.Cluster); providerModule.registerResourceProvider(Resource.Type.Configuration); // Non default port addresses @@ -489,10 +489,9 @@ public class JMXHostProviderTest { @Test public void testGetHostNames() throws AmbariException { - JMXHostProviderModule providerModule = new JMXHostProviderModule(); - - AmbariManagementController managementControllerMock = createNiceMock(AmbariManagementController.class); + JMXHostProviderModule providerModule = new JMXHostProviderModule(managementControllerMock); + Clusters clustersMock = createNiceMock(Clusters.class); Cluster clusterMock = createNiceMock(Cluster.class); Service serviceMock = createNiceMock(Service.class); @@ -509,7 +508,6 @@ public class JMXHostProviderTest { 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().equals("host1")); @@ -522,7 +520,7 @@ public class JMXHostProviderTest { ResourceAlreadyExistsException, UnsupportedPropertyException, SystemException, AmbariException, NoSuchResourceException { createConfigs(); - JMXHostProviderModule providerModule = new JMXHostProviderModule(); + JMXHostProviderModule providerModule = new JMXHostProviderModule(controller); providerModule.registerResourceProvider(Resource.Type.Cluster); providerModule.registerResourceProvider(Resource.Type.Configuration); Assert.assertEquals("https", providerModule.getJMXProtocol("c1", "RESOURCEMANAGER")); @@ -530,14 +528,14 @@ public class JMXHostProviderTest { Assert.assertEquals("https", providerModule.getJMXProtocol("c1", "NODEMANAGER")); Assert.assertEquals("8044", providerModule.getPort("c1", "NODEMANAGER", "localhost", true)); } - + @Test public void testJMXHistoryServerHttpsPort() throws NoSuchParentResourceException, ResourceAlreadyExistsException, UnsupportedPropertyException, SystemException, AmbariException, NoSuchResourceException { createConfigs(); - JMXHostProviderModule providerModule = new JMXHostProviderModule(); + JMXHostProviderModule providerModule = new JMXHostProviderModule(controller); providerModule.registerResourceProvider(Resource.Type.Cluster); providerModule.registerResourceProvider(Resource.Type.Configuration); Assert.assertEquals("https", providerModule.getJMXProtocol("c1", "HISTORYSERVER")); @@ -551,7 +549,7 @@ public class JMXHostProviderTest { ResourceAlreadyExistsException, UnsupportedPropertyException, SystemException, AmbariException, NoSuchResourceException { createConfigs(); - JMXHostProviderModule providerModule = new JMXHostProviderModule(); + JMXHostProviderModule providerModule = new JMXHostProviderModule(controller); providerModule.registerResourceProvider(Resource.Type.Cluster); providerModule.registerResourceProvider(Resource.Type.Configuration); Assert.assertEquals("https", providerModule.getJMXProtocol("c1", "JOURNALNODE")); @@ -564,7 +562,7 @@ public class JMXHostProviderTest { ResourceAlreadyExistsException, UnsupportedPropertyException, SystemException, AmbariException, NoSuchResourceException { createConfigs(); - JMXHostProviderModule providerModule = new JMXHostProviderModule(); + JMXHostProviderModule providerModule = new JMXHostProviderModule(controller); providerModule.registerResourceProvider(Resource.Type.Cluster); providerModule.registerResourceProvider(Resource.Type.Configuration); Assert.assertEquals("https", providerModule.getJMXProtocol("c1", "DATANODE")); @@ -579,7 +577,7 @@ public class JMXHostProviderTest { createConfigs(); - JMXHostProviderModule providerModule = new JMXHostProviderModule(); + JMXHostProviderModule providerModule = new JMXHostProviderModule(controller); providerModule.registerResourceProvider(Resource.Type.Cluster); providerModule.registerResourceProvider(Resource.Type.Configuration); // Non default port addresses @@ -630,6 +628,11 @@ public class JMXHostProviderTest { ResourceProvider configResourceProvider = new ConfigurationResourceProvider( controller); + JMXHostProviderModule(AmbariManagementController ambariManagementController) { + super(); + managementController = ambariManagementController; + } + @Override protected ResourceProvider createResourceProvider(Resource.Type type) { if (type == Resource.Type.Cluster) {
