Repository: ambari Updated Branches: refs/heads/branch-2.2 db898020a -> dc4c1cfbd
AMBARI-14907 : Metrics not displayed for 'Last 1 year' period. (avijayan) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/dc4c1cfb Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/dc4c1cfb Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/dc4c1cfb Branch: refs/heads/branch-2.2 Commit: dc4c1cfbd92b06c4ed0976b80e33ad5b189784d9 Parents: db89802 Author: Aravindan Vijayan <avija...@hortonworks.com> Authored: Thu Feb 4 10:40:55 2016 -0800 Committer: Aravindan Vijayan <avija...@hortonworks.com> Committed: Thu Feb 4 10:40:55 2016 -0800 ---------------------------------------------------------------------- .../server/upgrade/UpgradeCatalog222.java | 46 ++++++++++++ .../0.1.0/configuration/ams-site.xml | 4 +- .../server/upgrade/UpgradeCatalog222Test.java | 77 ++++++++++++++++++++ 3 files changed, 125 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/dc4c1cfb/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog222.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog222.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog222.java index 22f6a39..7e2683d 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog222.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog222.java @@ -27,6 +27,7 @@ import org.apache.ambari.server.orm.dao.DaoUtils; import org.apache.ambari.server.orm.entities.AlertDefinitionEntity; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; +import org.apache.ambari.server.state.Config; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,6 +47,11 @@ public class UpgradeCatalog222 extends AbstractUpgradeCatalog { * Logger. */ private static final Logger LOG = LoggerFactory.getLogger(UpgradeCatalog222.class); + private static final String AMS_SITE = "ams-site"; + private static final String HOST_AGGREGATOR_DAILY_CHECKPOINTCUTOFFMULTIPIER = + "timeline.metrics.host.aggregator.daily.checkpointCutOffMultiplier"; + private static final String CLUSTER_AGGREGATOR_DAILY_CHECKPOINTCUTOFFMULTIPIER = + "timeline.metrics.cluster.aggregator.daily.checkpointCutOffMultiplier"; @@ -99,6 +105,7 @@ public class UpgradeCatalog222 extends AbstractUpgradeCatalog { addNewConfigurationsFromXml(); updateAlerts(); updateStormConfigs(); + updateAMSConfigs(); } protected void updateStormConfigs() throws AmbariException { @@ -137,4 +144,43 @@ public class UpgradeCatalog222 extends AbstractUpgradeCatalog { } + protected void updateAMSConfigs() throws AmbariException { + AmbariManagementController ambariManagementController = injector.getInstance(AmbariManagementController.class); + Clusters clusters = ambariManagementController.getClusters(); + + if (clusters != null) { + Map<String, Cluster> clusterMap = clusters.getClusters(); + + if (clusterMap != null && !clusterMap.isEmpty()) { + for (final Cluster cluster : clusterMap.values()) { + + Config amsSite = cluster.getDesiredConfigByType(AMS_SITE); + if (amsSite != null) { + Map<String, String> amsSiteProperties = amsSite.getProperties(); + Map<String, String> newProperties = new HashMap<>(); + + if (amsSiteProperties.containsKey(HOST_AGGREGATOR_DAILY_CHECKPOINTCUTOFFMULTIPIER) && + amsSiteProperties.get(HOST_AGGREGATOR_DAILY_CHECKPOINTCUTOFFMULTIPIER).equals("1")) { + + LOG.info("Setting value of " + HOST_AGGREGATOR_DAILY_CHECKPOINTCUTOFFMULTIPIER + " : 2"); + newProperties.put(HOST_AGGREGATOR_DAILY_CHECKPOINTCUTOFFMULTIPIER, String.valueOf(2)); + + } + + if (amsSiteProperties.containsKey(CLUSTER_AGGREGATOR_DAILY_CHECKPOINTCUTOFFMULTIPIER) && + amsSiteProperties.get(CLUSTER_AGGREGATOR_DAILY_CHECKPOINTCUTOFFMULTIPIER).equals("1")) { + + LOG.info("Setting value of " + CLUSTER_AGGREGATOR_DAILY_CHECKPOINTCUTOFFMULTIPIER + " : 2"); + newProperties.put(CLUSTER_AGGREGATOR_DAILY_CHECKPOINTCUTOFFMULTIPIER, String.valueOf(2)); + + } + + updateConfigurationPropertiesForCluster(cluster, AMS_SITE, newProperties, true, true); + } + + } + } + } + } + } http://git-wip-us.apache.org/repos/asf/ambari/blob/dc4c1cfb/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-site.xml ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-site.xml b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-site.xml index 8173743..3391943 100644 --- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-site.xml +++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/ams-site.xml @@ -135,7 +135,7 @@ </property> <property> <name>timeline.metrics.host.aggregator.daily.checkpointCutOffMultiplier</name> - <value>1</value> + <value>2</value> <description> Multiplier value * interval = Max allowed checkpoint lag. Effectively if aggregator checkpoint is greater than max allowed checkpoint delay, @@ -209,7 +209,7 @@ </property> <property> <name>timeline.metrics.cluster.aggregator.daily.checkpointCutOffMultiplier</name> - <value>1</value> + <value>2</value> <description> Multiplier value * interval = Max allowed checkpoint lag. Effectively if aggregator checkpoint is greater than max allowed checkpoint delay, http://git-wip-us.apache.org/repos/asf/ambari/blob/dc4c1cfb/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java index d6d51a9..fb05b70 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java @@ -19,22 +19,40 @@ package org.apache.ambari.server.upgrade; +import com.google.common.collect.Maps; +import com.google.gson.Gson; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Provider; import com.google.inject.persist.PersistService; +import org.apache.ambari.server.actionmanager.ActionManager; import org.apache.ambari.server.api.services.AmbariMetaInfo; +import org.apache.ambari.server.controller.AmbariManagementController; +import org.apache.ambari.server.controller.AmbariManagementControllerImpl; +import org.apache.ambari.server.controller.ConfigurationRequest; +import org.apache.ambari.server.controller.ConfigurationResponse; +import org.apache.ambari.server.controller.KerberosHelper; +import org.apache.ambari.server.controller.MaintenanceStateHelper; import org.apache.ambari.server.orm.GuiceJpaInitializer; import org.apache.ambari.server.orm.InMemoryDefaultTestModule; import org.apache.ambari.server.orm.dao.StackDAO; import org.apache.ambari.server.orm.entities.StackEntity; +import org.apache.ambari.server.state.Cluster; +import org.apache.ambari.server.state.Clusters; +import org.apache.ambari.server.state.Config; +import org.easymock.Capture; +import org.easymock.EasyMock; +import org.easymock.EasyMockSupport; import org.junit.After; import org.junit.Before; import org.junit.Test; import javax.persistence.EntityManager; import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; +import static org.easymock.EasyMock.capture; import static org.easymock.EasyMock.createMockBuilder; import static org.easymock.EasyMock.createNiceMock; import static org.easymock.EasyMock.createStrictMock; @@ -43,6 +61,7 @@ import static org.easymock.EasyMock.expectLastCall; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.reset; import static org.easymock.EasyMock.verify; +import static org.junit.Assert.assertTrue; public class UpgradeCatalog222Test { private Injector injector; @@ -93,6 +112,8 @@ public class UpgradeCatalog222Test { expectLastCall().once(); upgradeCatalog222.updateStormConfigs(); expectLastCall().once(); + upgradeCatalog222.updateAMSConfigs(); + expectLastCall().once(); replay(upgradeCatalog222); @@ -101,6 +122,62 @@ public class UpgradeCatalog222Test { verify(upgradeCatalog222); } + @Test + public void testAmsSiteUpdateConfigs() throws Exception{ + + Map<String, String> oldPropertiesAmsSite = new HashMap<String, String>() { + { + put("timeline.metrics.host.aggregator.daily.checkpointCutOffMultiplier", String.valueOf(1)); + put("timeline.metrics.cluster.aggregator.daily.checkpointCutOffMultiplier", String.valueOf(1)); + } + }; + Map<String, String> newPropertiesAmsSite = new HashMap<String, String>() { + { + put("timeline.metrics.host.aggregator.daily.checkpointCutOffMultiplier", String.valueOf(2)); + put("timeline.metrics.cluster.aggregator.daily.checkpointCutOffMultiplier", String.valueOf(2)); + } + }; + EasyMockSupport easyMockSupport = new EasyMockSupport(); + + Clusters clusters = easyMockSupport.createNiceMock(Clusters.class); + final Cluster cluster = easyMockSupport.createNiceMock(Cluster.class); + Config mockAmsSite = easyMockSupport.createNiceMock(Config.class); + + expect(clusters.getClusters()).andReturn(new HashMap<String, Cluster>() {{ + put("normal", cluster); + }}).once(); + expect(cluster.getDesiredConfigByType("ams-site")).andReturn(mockAmsSite).atLeastOnce(); + expect(mockAmsSite.getProperties()).andReturn(oldPropertiesAmsSite).times(2); + + Injector injector = easyMockSupport.createNiceMock(Injector.class); + expect(injector.getInstance(Gson.class)).andReturn(null).anyTimes(); + expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null).anyTimes(); + expect(injector.getInstance(KerberosHelper.class)).andReturn(createNiceMock(KerberosHelper.class)).anyTimes(); + + replay(injector, clusters, mockAmsSite, cluster); + + AmbariManagementControllerImpl controller = createMockBuilder(AmbariManagementControllerImpl.class) + .addMockedMethod("createConfiguration") + .addMockedMethod("getClusters", new Class[] { }) + .withConstructor(createNiceMock(ActionManager.class), clusters, injector) + .createNiceMock(); + + Injector injector2 = easyMockSupport.createNiceMock(Injector.class); + Capture<ConfigurationRequest> configurationRequestCapture = EasyMock.newCapture(); + ConfigurationResponse configurationResponseMock = easyMockSupport.createMock(ConfigurationResponse.class); + + expect(injector2.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes(); + expect(controller.getClusters()).andReturn(clusters).anyTimes(); + expect(controller.createConfiguration(capture(configurationRequestCapture))).andReturn(configurationResponseMock).once(); + + replay(controller, injector2, configurationResponseMock); + new UpgradeCatalog222(injector2).updateAMSConfigs(); + easyMockSupport.verifyAll(); + + ConfigurationRequest configurationRequest = configurationRequestCapture.getValue(); + Map<String, String> updatedProperties = configurationRequest.getProperties(); + assertTrue(Maps.difference(newPropertiesAmsSite, updatedProperties).areEqual()); + } }