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 */
|
/** Update SubAlarms when AlarmDefinition changes */
|
||||||
int updateSubAlarmExpressions(final String alarmSubExpressionId, AlarmSubExpression alarmSubExpression);
|
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) {
|
private MetricDefinition createMetricDefinitionFromRow(final Map<String, Object> row) {
|
||||||
final Map<String, String> dimensionMap = new HashMap<>();
|
final Map<String, String> dimensionMap = new HashMap<>();
|
||||||
final String dimensions = getString(row, "dimensions");
|
final String dimensions = getString(row, "dimensions");
|
||||||
|
@ -198,6 +198,7 @@ public class AlarmCreationBolt extends BaseRichBolt {
|
|||||||
}
|
}
|
||||||
alarmCache.remove(alarmDefinitionId);
|
alarmCache.remove(alarmDefinitionId);
|
||||||
alarmDefinitionCache.remove(alarmDefinitionId);
|
alarmDefinitionCache.remove(alarmDefinitionId);
|
||||||
|
alarmDAO.deleteByDefinitionId(alarmDefinitionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void handleNewMetricDefinition(
|
protected void handleNewMetricDefinition(
|
||||||
|
@ -69,7 +69,7 @@ public class AlarmThresholdingBolt extends BaseRichBolt {
|
|||||||
private transient Logger logger;
|
private transient Logger logger;
|
||||||
private DataSourceFactory dbConfig;
|
private DataSourceFactory dbConfig;
|
||||||
private KafkaProducerConfiguration producerConfiguration;
|
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<>();
|
final Map<String, AlarmDefinition> alarmDefinitions = new HashMap<>();
|
||||||
private transient AlarmDAO alarmDAO;
|
private transient AlarmDAO alarmDAO;
|
||||||
private transient AlarmDefinitionDAO alarmDefinitionDAO;
|
private transient AlarmDefinitionDAO alarmDefinitionDAO;
|
||||||
@ -217,8 +217,16 @@ public class AlarmThresholdingBolt extends BaseRichBolt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void changeAlarmState(Alarm alarm, AlarmState initialState, String stateChangeReason) {
|
private void changeAlarmState(Alarm alarm, AlarmState initialState, String stateChangeReason) {
|
||||||
alarmDAO.updateState(alarm.getId(), alarm.getState());
|
|
||||||
final AlarmDefinition alarmDefinition = alarmDefinitions.get(alarm.getAlarmDefinitionId());
|
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());
|
final List<MetricDefinition> alarmedMetrics = new ArrayList<>(alarm.getAlarmedMetrics().size());
|
||||||
for (final MetricDefinitionAndTenantId mdtid : alarm.getAlarmedMetrics()) {
|
for (final MetricDefinitionAndTenantId mdtid : alarm.getAlarmedMetrics()) {
|
||||||
alarmedMetrics.add(mdtid.metricDefinition);
|
alarmedMetrics.add(mdtid.metricDefinition);
|
||||||
|
@ -445,5 +445,8 @@ public class ThresholdingEngineAlarmTest extends TopologyTestCase {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteByDefinitionId(String alarmDefinitionId) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user