Use local variable to create new alarm instead of field variable - fix inconsistent state of currentAlarm field in case createAlarm is failed

This commit is contained in:
Volodymyr Babak 2024-05-08 16:02:51 +03:00
parent 9e3f3429e8
commit 62d9f76c57

View File

@ -244,27 +244,27 @@ class AlarmState {
return null; return null;
} }
} else { } else {
currentAlarm = new Alarm(); var newAlarm = new Alarm();
currentAlarm.setType(alarmDefinition.getAlarmType()); newAlarm.setType(alarmDefinition.getAlarmType());
currentAlarm.setAcknowledged(false); newAlarm.setAcknowledged(false);
currentAlarm.setCleared(false); newAlarm.setCleared(false);
currentAlarm.setSeverity(severity); newAlarm.setSeverity(severity);
long startTs = dataSnapshot.getTs(); long startTs = dataSnapshot.getTs();
if (startTs == 0L) { if (startTs == 0L) {
startTs = System.currentTimeMillis(); startTs = System.currentTimeMillis();
} }
currentAlarm.setStartTs(startTs); newAlarm.setStartTs(startTs);
currentAlarm.setEndTs(currentAlarm.getStartTs()); newAlarm.setEndTs(startTs);
currentAlarm.setDetails(createDetails(ruleState)); newAlarm.setDetails(createDetails(ruleState));
currentAlarm.setOriginator(originator); newAlarm.setOriginator(originator);
currentAlarm.setTenantId(ctx.getTenantId()); newAlarm.setTenantId(ctx.getTenantId());
currentAlarm.setPropagate(alarmDefinition.isPropagate()); newAlarm.setPropagate(alarmDefinition.isPropagate());
currentAlarm.setPropagateToOwner(alarmDefinition.isPropagateToOwner()); newAlarm.setPropagateToOwner(alarmDefinition.isPropagateToOwner());
currentAlarm.setPropagateToTenant(alarmDefinition.isPropagateToTenant()); newAlarm.setPropagateToTenant(alarmDefinition.isPropagateToTenant());
if (alarmDefinition.getPropagateRelationTypes() != null) { if (alarmDefinition.getPropagateRelationTypes() != null) {
currentAlarm.setPropagateRelationTypes(alarmDefinition.getPropagateRelationTypes()); newAlarm.setPropagateRelationTypes(alarmDefinition.getPropagateRelationTypes());
} }
AlarmApiCallResult result = ctx.getAlarmService().createAlarm(AlarmCreateOrUpdateActiveRequest.fromAlarm(currentAlarm)); AlarmApiCallResult result = ctx.getAlarmService().createAlarm(AlarmCreateOrUpdateActiveRequest.fromAlarm(newAlarm));
currentAlarm = result.getAlarm(); currentAlarm = result.getAlarm();
return TbAlarmResult.fromAlarmResult(result); return TbAlarmResult.fromAlarmResult(result);
} }