Clean up orphaned alarms on alarm definition delete

Change-Id: I8dea800768989b80f1fe810f1c9572ed439d0133
This commit is contained in:
Ryan Brandt 2015-04-30 12:02:00 -06:00
parent 1f0888d6fa
commit c6f025016d
5 changed files with 24 additions and 2 deletions

View File

@ -48,4 +48,7 @@ public interface AlarmDAO {
/** Update SubAlarms when AlarmDefinition changes */
int updateSubAlarmExpressions(final String alarmSubExpressionId, AlarmSubExpression alarmSubExpression);
/** Deletes all alarms for the given AlarmDefinition */
void deleteByDefinitionId(String alarmDefinitionId);
}

View File

@ -294,6 +294,13 @@ public class AlarmDAOImpl implements AlarmDAO {
}
}
@Override
public void deleteByDefinitionId(String alarmDefinitionId){
try (Handle h = db.open()) {
h.execute("delete from alarm where alarm_definition_id = :id", alarmDefinitionId);
}
}
private MetricDefinition createMetricDefinitionFromRow(final Map<String, Object> row) {
final Map<String, String> dimensionMap = new HashMap<>();
final String dimensions = getString(row, "dimensions");

View File

@ -198,6 +198,7 @@ public class AlarmCreationBolt extends BaseRichBolt {
}
alarmCache.remove(alarmDefinitionId);
alarmDefinitionCache.remove(alarmDefinitionId);
alarmDAO.deleteByDefinitionId(alarmDefinitionId);
}
protected void handleNewMetricDefinition(

View File

@ -69,7 +69,7 @@ public class AlarmThresholdingBolt extends BaseRichBolt {
private transient Logger logger;
private DataSourceFactory dbConfig;
private KafkaProducerConfiguration producerConfiguration;
final Map<String, Alarm> alarms = new HashMap<String, Alarm>();
final Map<String, Alarm> alarms = new HashMap<>();
final Map<String, AlarmDefinition> alarmDefinitions = new HashMap<>();
private transient AlarmDAO alarmDAO;
private transient AlarmDefinitionDAO alarmDefinitionDAO;
@ -217,8 +217,16 @@ public class AlarmThresholdingBolt extends BaseRichBolt {
}
private void changeAlarmState(Alarm alarm, AlarmState initialState, String stateChangeReason) {
alarmDAO.updateState(alarm.getId(), alarm.getState());
final AlarmDefinition alarmDefinition = alarmDefinitions.get(alarm.getAlarmDefinitionId());
// If the Alarm Definition id does not exist, ignore updating this alarm
if (alarmDefinition == null) {
logger.warn("Failed to locate alarm definition for id {},"
+ " ignoring state update to alarm with id {}",
alarm.getAlarmDefinitionId(),
alarm.getId());
return;
}
alarmDAO.updateState(alarm.getId(), alarm.getState());
final List<MetricDefinition> alarmedMetrics = new ArrayList<>(alarm.getAlarmedMetrics().size());
for (final MetricDefinitionAndTenantId mdtid : alarm.getAlarmedMetrics()) {
alarmedMetrics.add(mdtid.metricDefinition);

View File

@ -445,5 +445,8 @@ public class ThresholdingEngineAlarmTest extends TopologyTestCase {
}
return false;
}
@Override
public void deleteByDefinitionId(String alarmDefinitionId) {}
}
}