Browse Source

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

pull/10743/head
Volodymyr Babak 2 years ago
parent
commit
62d9f76c57
  1. 30
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/profile/AlarmState.java

30
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/profile/AlarmState.java

@ -244,27 +244,27 @@ class AlarmState {
return null;
}
} else {
currentAlarm = new Alarm();
currentAlarm.setType(alarmDefinition.getAlarmType());
currentAlarm.setAcknowledged(false);
currentAlarm.setCleared(false);
currentAlarm.setSeverity(severity);
var newAlarm = new Alarm();
newAlarm.setType(alarmDefinition.getAlarmType());
newAlarm.setAcknowledged(false);
newAlarm.setCleared(false);
newAlarm.setSeverity(severity);
long startTs = dataSnapshot.getTs();
if (startTs == 0L) {
startTs = System.currentTimeMillis();
}
currentAlarm.setStartTs(startTs);
currentAlarm.setEndTs(currentAlarm.getStartTs());
currentAlarm.setDetails(createDetails(ruleState));
currentAlarm.setOriginator(originator);
currentAlarm.setTenantId(ctx.getTenantId());
currentAlarm.setPropagate(alarmDefinition.isPropagate());
currentAlarm.setPropagateToOwner(alarmDefinition.isPropagateToOwner());
currentAlarm.setPropagateToTenant(alarmDefinition.isPropagateToTenant());
newAlarm.setStartTs(startTs);
newAlarm.setEndTs(startTs);
newAlarm.setDetails(createDetails(ruleState));
newAlarm.setOriginator(originator);
newAlarm.setTenantId(ctx.getTenantId());
newAlarm.setPropagate(alarmDefinition.isPropagate());
newAlarm.setPropagateToOwner(alarmDefinition.isPropagateToOwner());
newAlarm.setPropagateToTenant(alarmDefinition.isPropagateToTenant());
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();
return TbAlarmResult.fromAlarmResult(result);
}

Loading…
Cancel
Save