Repository: ambari Updated Branches: refs/heads/trunk c530e0090 -> d1e59133f
AMBARI-14801. Alerts: HBase Region servers alert should determine RegionServer liveliness differently.(vbrodetskyi) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/d1e59133 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/d1e59133 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/d1e59133 Branch: refs/heads/trunk Commit: d1e59133f7f867a16d6cb4c7e5cc8508893a29fe Parents: c530e00 Author: Vitaly Brodetskyi <vbrodets...@hortonworks.com> Authored: Wed Jan 27 11:02:22 2016 +0200 Committer: Vitaly Brodetskyi <vbrodets...@hortonworks.com> Committed: Wed Jan 27 11:02:22 2016 +0200 ---------------------------------------------------------------------- .../server/upgrade/SchemaUpgradeHelper.java | 1 + .../server/upgrade/UpgradeCatalog222.java | 125 +++++++++++++++++++ .../server/upgrade/UpgradeCatalog240.java | 26 ++-- .../HBASE/0.96.0.2.0/alerts.json | 37 ------ .../server/upgrade/UpgradeCatalog222Test.java | 104 +++++++++++++++ 5 files changed, 248 insertions(+), 45 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/d1e59133/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java index a07d42d..89e920d 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java @@ -182,6 +182,7 @@ public class SchemaUpgradeHelper { catalogBinder.addBinding().to(UpgradeCatalog2121.class); catalogBinder.addBinding().to(UpgradeCatalog220.class); catalogBinder.addBinding().to(UpgradeCatalog221.class); + catalogBinder.addBinding().to(UpgradeCatalog222.class); catalogBinder.addBinding().to(UpgradeCatalog230.class); catalogBinder.addBinding().to(UpgradeCatalog240.class); catalogBinder.addBinding().to(FinalUpgradeCatalog.class); http://git-wip-us.apache.org/repos/asf/ambari/blob/d1e59133/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 new file mode 100644 index 0000000..bcbbf41 --- /dev/null +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog222.java @@ -0,0 +1,125 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ambari.server.upgrade; + +import com.google.inject.Inject; +import com.google.inject.Injector; +import org.apache.ambari.server.AmbariException; +import org.apache.ambari.server.controller.AmbariManagementController; +import org.apache.ambari.server.orm.dao.AlertDefinitionDAO; +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.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.SQLException; +import java.util.Map; + +/** + * Upgrade catalog for version 2.2.2. + */ +public class UpgradeCatalog222 extends AbstractUpgradeCatalog { + + @Inject + DaoUtils daoUtils; + + /** + * Logger. + */ + private static final Logger LOG = LoggerFactory.getLogger(UpgradeCatalog222.class); + + + + + // ----- Constructors ------------------------------------------------------ + + /** + * Don't forget to register new UpgradeCatalogs in {@link org.apache.ambari.server.upgrade.SchemaUpgradeHelper.UpgradeHelperModule#configure()} + * + * @param injector Guice injector to track dependencies and uses bindings to inject them. + */ + @Inject + public UpgradeCatalog222(Injector injector) { + super(injector); + this.injector = injector; + } + + // ----- UpgradeCatalog ---------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public String getTargetVersion() { + return "2.2.2"; + } + + // ----- AbstractUpgradeCatalog -------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public String getSourceVersion() { + return "2.2.1"; + } + + + @Override + protected void executeDDLUpdates() throws AmbariException, SQLException { + //To change body of implemented methods use File | Settings | File Templates. + } + + @Override + protected void executePreDMLUpdates() throws AmbariException, SQLException { + //To change body of implemented methods use File | Settings | File Templates. + } + + @Override + protected void executeDMLUpdates() throws AmbariException, SQLException { + addNewConfigurationsFromXml(); + updateAlerts(); + + } + + protected void updateAlerts() { + LOG.info("Updating alert definitions."); + AmbariManagementController ambariManagementController = injector.getInstance(AmbariManagementController.class); + AlertDefinitionDAO alertDefinitionDAO = injector.getInstance(AlertDefinitionDAO.class); + Clusters clusters = ambariManagementController.getClusters(); + + Map<String, Cluster> clusterMap = getCheckedClusterMap(clusters); + for (final Cluster cluster : clusterMap.values()) { + long clusterID = cluster.getClusterId(); + + final AlertDefinitionEntity regionserverHealthSummaryDefinitionEntity = alertDefinitionDAO.findByName( + clusterID, "regionservers_health_summary"); + + if (regionserverHealthSummaryDefinitionEntity != null) { + alertDefinitionDAO.remove(regionserverHealthSummaryDefinitionEntity); + } + + } + + + } + +} http://git-wip-us.apache.org/repos/asf/ambari/blob/d1e59133/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java index 1ccea5c..3414388 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog240.java @@ -139,21 +139,21 @@ public class UpgradeCatalog240 extends AbstractUpgradeCatalog { clusterID, "flume_agent_status"); Map<AlertDefinitionEntity, List<String>> alertDefinitionParams = new HashMap<>(); - alertDefinitionParams.put(namenodeLastCheckpointAlertDefinitionEntity, + checkedPutToMap(alertDefinitionParams, namenodeLastCheckpointAlertDefinitionEntity, new ArrayList<String>(Arrays.asList("connection.timeout", "checkpoint.time.warning.threshold", "checkpoint.time.critical.threshold"))); - alertDefinitionParams.put(namenodeHAHealthAlertDefinitionEntity, + checkedPutToMap(alertDefinitionParams, namenodeHAHealthAlertDefinitionEntity, new ArrayList<String>(Arrays.asList("connection.timeout"))); - alertDefinitionParams.put(nodemanagerHealthAlertDefinitionEntity, + checkedPutToMap(alertDefinitionParams, nodemanagerHealthAlertDefinitionEntity, new ArrayList<String>(Arrays.asList("connection.timeout"))); - alertDefinitionParams.put(nodemanagerHealthSummaryAlertDefinitionEntity, + checkedPutToMap(alertDefinitionParams, nodemanagerHealthSummaryAlertDefinitionEntity, new ArrayList<String>(Arrays.asList("connection.timeout"))); - alertDefinitionParams.put(hiveMetastoreProcessAlertDefinitionEntity, + checkedPutToMap(alertDefinitionParams, hiveMetastoreProcessAlertDefinitionEntity, new ArrayList<String>(Arrays.asList("default.smoke.user", "default.smoke.principal", "default.smoke.keytab"))); - alertDefinitionParams.put(hiveServerProcessAlertDefinitionEntity, + checkedPutToMap(alertDefinitionParams, hiveServerProcessAlertDefinitionEntity, new ArrayList<String>(Arrays.asList("default.smoke.user", "default.smoke.principal", "default.smoke.keytab"))); - alertDefinitionParams.put(hiveWebhcatServerStatusAlertDefinitionEntity, + checkedPutToMap(alertDefinitionParams, hiveWebhcatServerStatusAlertDefinitionEntity, new ArrayList<String>(Arrays.asList("default.smoke.user", "connection.timeout"))); - alertDefinitionParams.put(flumeAgentStatusAlertDefinitionEntity, + checkedPutToMap(alertDefinitionParams, flumeAgentStatusAlertDefinitionEntity, new ArrayList<String>(Arrays.asList("run.directory"))); for(Map.Entry<AlertDefinitionEntity, List<String>> entry : alertDefinitionParams.entrySet()){ @@ -169,6 +169,16 @@ public class UpgradeCatalog240 extends AbstractUpgradeCatalog { } } + /* + * Simple put method with check for key is not null + * */ + private void checkedPutToMap(Map<AlertDefinitionEntity, List<String>> alertDefinitionParams, AlertDefinitionEntity alertDefinitionEntity, + List<String> params) { + if (alertDefinitionEntity != null) { + alertDefinitionParams.put(alertDefinitionEntity, params); + } + } + protected String addParam(String source, List<String> params) { JsonObject sourceJson = new JsonParser().parse(source).getAsJsonObject(); JsonArray parametersJson = sourceJson.getAsJsonArray("parameters"); http://git-wip-us.apache.org/repos/asf/ambari/blob/d1e59133/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/alerts.json ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/alerts.json b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/alerts.json index 37e4792..e2dffe3 100644 --- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/alerts.json +++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/alerts.json @@ -89,43 +89,6 @@ "value": "{0} * 100" } } - }, - { - "name": "regionservers_health_summary", - "label": "RegionServers Health Summary", - "description": "This service-level alert is triggered if there are unhealthy RegionServers", - "interval": 1, - "scope": "SERVICE", - "enabled": true, - "source": { - "type": "METRIC", - "uri": { - "http": "{{hbase-site/hbase.master.info.port}}", - "default_port": 60010, - "connection_timeout": 5.0 - }, - "reporting": { - "ok": { - "text": "All {1} RegionServer(s) are alive" - }, - "warning": { - "text": "Dead RegionServer(s): {0} out of {1}", - "value": 1 - }, - "critical": { - "text": "Dead RegionServer(s): {0} out of {1}", - "value": 1 - }, - "units" : "RegionServer(s)" - }, - "jmx": { - "property_list": [ - "Hadoop:service=HBase,name=Master,sub=Server/numDeadRegionServers", - "Hadoop:service=HBase,name=Master,sub=Server/numRegionServers" - ], - "value": "{0}" - } - } } ], "HBASE_REGIONSERVER": [ http://git-wip-us.apache.org/repos/asf/ambari/blob/d1e59133/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 new file mode 100644 index 0000000..f33a31d --- /dev/null +++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog222Test.java @@ -0,0 +1,104 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ambari.server.upgrade; + + +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.api.services.AmbariMetaInfo; +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.junit.After; +import org.junit.Before; +import org.junit.Test; + +import javax.persistence.EntityManager; +import java.lang.reflect.Method; + +import static org.easymock.EasyMock.createMockBuilder; +import static org.easymock.EasyMock.createNiceMock; +import static org.easymock.EasyMock.createStrictMock; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.expectLastCall; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.reset; +import static org.easymock.EasyMock.verify; + +public class UpgradeCatalog222Test { + private Injector injector; + private Provider<EntityManager> entityManagerProvider = createStrictMock(Provider.class); + private EntityManager entityManager = createNiceMock(EntityManager.class); + private UpgradeCatalogHelper upgradeCatalogHelper; + private StackEntity desiredStackEntity; + + + + @Before + public void init() { + reset(entityManagerProvider); + expect(entityManagerProvider.get()).andReturn(entityManager).anyTimes(); + replay(entityManagerProvider); + injector = Guice.createInjector(new InMemoryDefaultTestModule()); + injector.getInstance(GuiceJpaInitializer.class); + + upgradeCatalogHelper = injector.getInstance(UpgradeCatalogHelper.class); + // inject AmbariMetaInfo to ensure that stacks get populated in the DB + injector.getInstance(AmbariMetaInfo.class); + // load the stack entity + StackDAO stackDAO = injector.getInstance(StackDAO.class); + desiredStackEntity = stackDAO.find("HDP", "2.2.0"); + } + + @After + public void tearDown() { + injector.getInstance(PersistService.class).stop(); + } + + @Test + public void testExecuteDMLUpdates() throws Exception { + Method addNewConfigurationsFromXml = AbstractUpgradeCatalog.class.getDeclaredMethod("addNewConfigurationsFromXml"); + Method updateAlerts = UpgradeCatalog222.class.getDeclaredMethod("updateAlerts"); + + + + UpgradeCatalog222 upgradeCatalog222 = createMockBuilder(UpgradeCatalog222.class) + .addMockedMethod(addNewConfigurationsFromXml) + .addMockedMethod(updateAlerts) + .createMock(); + + upgradeCatalog222.addNewConfigurationsFromXml(); + expectLastCall().once(); + upgradeCatalog222.updateAlerts(); + expectLastCall().once(); + + + replay(upgradeCatalog222); + + upgradeCatalog222.executeDMLUpdates(); + + verify(upgradeCatalog222); + } + + + +}