-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/28394/
-----------------------------------------------------------

(Updated Nov. 25, 2014, 12:33 a.m.)


Review request for Ambari, Nate Cole and Tom Beerbower.


Changes
-------

During further testing of dealing with alert management, I discovered a race 
condition and figured now was a good time to try to cleanup some of the hash 
invalidation code as well. I'm sorry for extending this review, and I 
appreciate any further feedback on the 2nd round of changes.

- There is now a new event that is triggered when a hash invalidation occurs. 
This event will cause the ActionQueue to include AlertDefinitionCommand 
instances to instruct the agent to reschedule some or all of its alert jobs. 
Using an event helps to centralize where this extra code is called from. 
Essentially, anytime that a hash invalidation occurs, the ActionQueue needs to 
have the latest AlertDefinitionCommands.

- The agent alert collector was storing the alerts in memory, even after 
sending a heartbeat. This caused problems when disabling/deleting alerts since 
cancelled jobs were always present in the heartbeat. The simplest solution was 
to clear out the alerts after creating the heartbeat. I needed to use locks 
here to ensure that a running job didn't write to the collector while it was 
filling up the heartbeat.


Bugs: AMBARI-8430
    https://issues.apache.org/jira/browse/AMBARI-8430


Repository: ambari


Description
-------

When an active alert definition is disabled, instances of that alert definition 
should not show up when query the cluster/service/host for alerts. 

STR:
1) Cause an alert to trigger (shut something down)
2) Disable the alert definition for that alert
3) CRITICAL alert stays in the list of current cluster alerts

Expected: The API should prevent disabled alerts from being returned.

Beyond this, the API should also clean up current alerts that are no longer 
valid. This includes:
1) Alerts that are for hosts which no longer exist
2) Alerts that are for a component that is no longer installed on a host
3) Alerts for services that are no longer part of the cluster (including the 
default group for that service)

Alerts that are being received should also be verified for validity so that an 
invalid alert that was cached by the agent doesn't re-appear.


Diffs (updated)
-----

  ambari-agent/src/main/python/ambari_agent/Heartbeat.py a6ecee1 
  ambari-agent/src/main/python/ambari_agent/HostInfo_linux.py d172443 
  ambari-agent/src/main/python/ambari_agent/HostInfo_win.py 6ac987f 
  ambari-agent/src/main/python/ambari_agent/alerts/collector.py ffb0179 
  ambari-agent/src/test/python/ambari_agent/TestAlerts.py d3e4583 
  ambari-agent/src/test/python/ambari_agent/TestHeartbeat.py bdc6c6b 
  ambari-agent/src/test/python/ambari_agent/TestHostInfo.py afacf38 
  
ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
 844b8cb 
  
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java
 ffffb60 
  
ambari-server/src/main/java/org/apache/ambari/server/events/AlertDefinitionDisabledEvent.java
 PRE-CREATION 
  
ambari-server/src/main/java/org/apache/ambari/server/events/AlertHashInvalidationEvent.java
 PRE-CREATION 
  ambari-server/src/main/java/org/apache/ambari/server/events/AmbariEvent.java 
5f2517e 
  ambari-server/src/main/java/org/apache/ambari/server/events/HostEvent.java 
PRE-CREATION 
  
ambari-server/src/main/java/org/apache/ambari/server/events/HostRemovedEvent.java
 PRE-CREATION 
  
ambari-server/src/main/java/org/apache/ambari/server/events/ServiceComponentInstalledEvent.java
 PRE-CREATION 
  
ambari-server/src/main/java/org/apache/ambari/server/events/ServiceComponentUninstalledEvent.java
 PRE-CREATION 
  
ambari-server/src/main/java/org/apache/ambari/server/events/ServiceRemovedEvent.java
 PRE-CREATION 
  
ambari-server/src/main/java/org/apache/ambari/server/events/listeners/AlertAggregateListener.java
 5e9dea2 
  
ambari-server/src/main/java/org/apache/ambari/server/events/listeners/AlertLifecycleListener.java
 22932ee 
  
ambari-server/src/main/java/org/apache/ambari/server/events/listeners/AlertMaintenanceModeListener.java
 af008be 
  
ambari-server/src/main/java/org/apache/ambari/server/events/listeners/AlertReceivedListener.java
 494ab78 
  
ambari-server/src/main/java/org/apache/ambari/server/events/listeners/AlertServiceStateListener.java
 9a1a68b 
  
ambari-server/src/main/java/org/apache/ambari/server/events/listeners/AlertStateChangedListener.java
 6924fc0 
  
ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertAggregateListener.java
 PRE-CREATION 
  
ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertDefinitionDisabledListener.java
 PRE-CREATION 
  
ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertHashInvalidationListener.java
 PRE-CREATION 
  
ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertHostListener.java
 PRE-CREATION 
  
ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertLifecycleListener.java
 PRE-CREATION 
  
ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertMaintenanceModeListener.java
 PRE-CREATION 
  
ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertReceivedListener.java
 PRE-CREATION 
  
ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertServiceComponentHostListener.java
 PRE-CREATION 
  
ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertServiceStateListener.java
 PRE-CREATION 
  
ambari-server/src/main/java/org/apache/ambari/server/events/listeners/alerts/AlertStateChangedListener.java
 PRE-CREATION 
  ambari-server/src/main/java/org/apache/ambari/server/orm/dao/AlertsDAO.java 
8a8dfe6 
  
ambari-server/src/main/java/org/apache/ambari/server/orm/entities/AlertCurrentEntity.java
 8ca297b 
  ambari-server/src/main/java/org/apache/ambari/server/state/Alert.java 3675f87 
  ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java 
7fa5afe 
  
ambari-server/src/main/java/org/apache/ambari/server/state/alert/AlertDefinitionHash.java
 da3a572 
  
ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java
 9cdb498 
  
ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
 a3fec84 
  ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java 
f681481 
  
ambari-server/src/test/java/org/apache/ambari/server/events/MockEventListener.java
 bf0d535 
  
ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOTest.java 
a42dbe7 
  
ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertDefinitionHashTest.java
 9ab1214 
  
ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertEventPublisherTest.java
 d78e38f 
  
ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertReceivedListenerTest.java
 PRE-CREATION 
  
ambari-server/src/test/java/org/apache/ambari/server/state/alerts/AlertStateChangedEventTest.java
 ad31fff 
  
ambari-server/src/test/java/org/apache/ambari/server/state/cluster/AlertDataManagerTest.java
 9ab18a0 

Diff: https://reviews.apache.org/r/28394/diff/


Testing
-------

New tests added for events and receivers. Manually verified that the alert 
behavior is correct in the following cases:

1) Disabling alerts remove existing alerts for that definition.
2) Removing a host removes all alerts for that host
3) Removing a service removes all alerts for the service and the default group.


Thanks,

Jonathan Hurley

Reply via email to