Repository: ambari Updated Branches: refs/heads/trunk a2c6ea46f -> dc088141a
AMBARI-15430 - alert_group table has service info after service has been removed (Qin Liu via jonathanhurley) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/dc088141 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/dc088141 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/dc088141 Branch: refs/heads/trunk Commit: dc088141a40511a0bb51173b594826393da46e69 Parents: a2c6ea4 Author: Jonathan Hurley <[email protected]> Authored: Tue Apr 5 13:52:41 2016 -0400 Committer: Jonathan Hurley <[email protected]> Committed: Tue Apr 5 13:52:41 2016 -0400 ---------------------------------------------------------------------- .../alerts/AlertServiceStateListener.java | 18 +-- .../apache/ambari/server/events/EventsTest.java | 116 ++++++++++++++++++- 2 files changed, 125 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/dc088141/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertServiceStateListener.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertServiceStateListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertServiceStateListener.java index 496bb6b..da4cbf5 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertServiceStateListener.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertServiceStateListener.java @@ -188,16 +188,20 @@ public class AlertServiceStateListener { for (AlertDefinitionEntity definition : definitions) { try { m_definitionDao.remove(definition); + } catch (Exception exception) { + LOG.error("Unable to remove alert definition {}", definition.getDefinitionName(), exception); + } + } - // remove the default group for the service - AlertGroupEntity group = m_alertDispatchDao.findGroupByName(event.getClusterId(), - event.getServiceName()); + // remove the default group for the service + AlertGroupEntity group = m_alertDispatchDao.findGroupByName(event.getClusterId(), + event.getServiceName()); - if (null != group && group.isDefault()) { - m_alertDispatchDao.remove(group); - } + if (null != group && group.isDefault()) { + try { + m_alertDispatchDao.remove(group); } catch (Exception exception) { - LOG.error("Unable to remove alert definition {}", definition.getDefinitionName(), exception); + LOG.error("Unable to remove default alert group {}", group.getGroupName(), exception); } } } finally { http://git-wip-us.apache.org/repos/asf/ambari/blob/dc088141/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java b/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java index 785f0fb..a3d05a9 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java @@ -27,7 +27,9 @@ import org.apache.ambari.server.orm.GuiceJpaInitializer; import org.apache.ambari.server.orm.InMemoryDefaultTestModule; import org.apache.ambari.server.orm.OrmTestHelper; import org.apache.ambari.server.orm.dao.AlertDefinitionDAO; +import org.apache.ambari.server.orm.dao.AlertDispatchDAO; import org.apache.ambari.server.orm.entities.AlertDefinitionEntity; +import org.apache.ambari.server.orm.entities.AlertGroupEntity; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.Host; @@ -72,6 +74,7 @@ public class EventsTest { private MockEventListener m_listener; private OrmTestHelper m_helper; private AlertDefinitionDAO m_definitionDao; + private AlertDispatchDAO m_alertDispatchDao; /** * @@ -93,6 +96,7 @@ public class EventsTest { m_componentFactory = m_injector.getInstance(ServiceComponentFactory.class); m_schFactory = m_injector.getInstance(ServiceComponentHostFactory.class); m_definitionDao = m_injector.getInstance(AlertDefinitionDAO.class); + m_alertDispatchDao = m_injector.getInstance(AlertDispatchDAO.class); m_clusterName = "foo"; StackId stackId = new StackId("HDP", "2.0.6"); @@ -156,8 +160,8 @@ public class EventsTest { } /** - * Tests that {@link ServiceRemovedEvent}s are fired correctly and alerts are - * removed. + * Tests that {@link ServiceRemovedEvent}s are fired correctly and alerts and + * the default alert group are removed. * * @throws Exception */ @@ -167,6 +171,106 @@ public class EventsTest { Assert.assertFalse(m_listener.isAmbariEventReceived(eventClass)); installHdfsService(); + // get the default group for HDFS + AlertGroupEntity group = m_alertDispatchDao.findGroupByName(m_cluster.getClusterId(), "HDFS"); + + // verify the default group is there + Assert.assertNotNull(group); + Assert.assertTrue(group.isDefault()); + + // check that there are alert definitions + Assert.assertTrue(m_definitionDao.findAll(m_cluster.getClusterId()).size() > 0); + + // get all definitions for HDFS + List<AlertDefinitionEntity> hdfsDefinitions = m_definitionDao.findByService( + m_cluster.getClusterId(), "HDFS"); + + // make sure there are at least 1 + Assert.assertTrue(hdfsDefinitions.size() > 0); + + AlertDefinitionEntity definition = hdfsDefinitions.get(0); + + // delete HDFS + m_cluster.getService("HDFS").delete(); + + // verify the event was received + Assert.assertTrue(m_listener.isAmbariEventReceived(eventClass)); + + // verify that the definitions were removed + hdfsDefinitions = m_definitionDao.findByService(m_cluster.getClusterId(), "HDFS"); + + Assert.assertEquals(0, hdfsDefinitions.size()); + + // verify that the default group was removed + group = m_alertDispatchDao.findGroupByName(m_cluster.getClusterId(), "HDFS"); + + Assert.assertNull(group); + } + + /** + * Tests that {@link ServiceRemovedEvent}s are fired correctly and the default alert group + * is removed even though alerts were already removed at the time the event is fired. + * + * @throws Exception + */ + @Test + public void testServiceRemovedEventForDefaultAlertGroup() throws Exception { + Class<? extends AmbariEvent> eventClass = ServiceRemovedEvent.class; + Assert.assertFalse(m_listener.isAmbariEventReceived(eventClass)); + installHdfsService(); + + // get the default group for HDFS + AlertGroupEntity group = m_alertDispatchDao.findGroupByName(m_cluster.getClusterId(), "HDFS"); + + // verify the default group is there + Assert.assertNotNull(group); + Assert.assertTrue(group.isDefault()); + + // get all definitions for HDFS + List<AlertDefinitionEntity> hdfsDefinitions = m_definitionDao.findByService( + m_cluster.getClusterId(), "HDFS"); + + // delete the definitions + for (AlertDefinitionEntity definition : hdfsDefinitions) { + m_definitionDao.remove(definition); + } + + // verify that the definitions were removed + hdfsDefinitions = m_definitionDao.findByService(m_cluster.getClusterId(), "HDFS"); + + Assert.assertEquals(0, hdfsDefinitions.size()); + + // delete HDFS + m_cluster.getService("HDFS").delete(); + + // verify the event was received + Assert.assertTrue(m_listener.isAmbariEventReceived(eventClass)); + + // verify that the default group was removed + group = m_alertDispatchDao.findGroupByName(m_cluster.getClusterId(), "HDFS"); + + Assert.assertNull(group); + } + + /** + * Tests that {@link ServiceRemovedEvent}s are fired correctly and alerts are removed + * even though the default alert group was already removed at the time the event is fired . + * + * @throws Exception + */ + @Test + public void testServiceRemovedEventForAlertDefinitions() throws Exception { + Class<? extends AmbariEvent> eventClass = ServiceRemovedEvent.class; + Assert.assertFalse(m_listener.isAmbariEventReceived(eventClass)); + installHdfsService(); + + // get the default group for HDFS + AlertGroupEntity group = m_alertDispatchDao.findGroupByName(m_cluster.getClusterId(), "HDFS"); + + // verify the default group is there + Assert.assertNotNull(group); + Assert.assertTrue(group.isDefault()); + // check that there are alert definitions Assert.assertTrue(m_definitionDao.findAll(m_cluster.getClusterId()).size() > 0); @@ -179,6 +283,14 @@ public class EventsTest { AlertDefinitionEntity definition = hdfsDefinitions.get(0); + // delete the default alert group + m_alertDispatchDao.remove(group); + + // verify that the default group was removed + group = m_alertDispatchDao.findGroupByName(m_cluster.getClusterId(), "HDFS"); + + Assert.assertNull(group); + // delete HDFS m_cluster.getService("HDFS").delete();
