Clean up orphaned alarms on alarm definition delete
Change-Id: I8dea800768989b80f1fe810f1c9572ed439d0133
This commit is contained in:
parent
1f0888d6fa
commit
c6f025016d
@ -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);
|
||||
}
|
||||
|
@ -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");
|
||||
|
@ -198,6 +198,7 @@ public class AlarmCreationBolt extends BaseRichBolt {
|
||||
}
|
||||
alarmCache.remove(alarmDefinitionId);
|
||||
alarmDefinitionCache.remove(alarmDefinitionId);
|
||||
alarmDAO.deleteByDefinitionId(alarmDefinitionId);
|
||||
}
|
||||
|
||||
protected void handleNewMetricDefinition(
|
||||
|
@ -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);
|
||||
|
@ -445,5 +445,8 @@ public class ThresholdingEngineAlarmTest extends TopologyTestCase {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteByDefinitionId(String alarmDefinitionId) {}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user