From 14c5cf242cb6f456be019ad5781d7762dba79dd7 Mon Sep 17 00:00:00 2001 From: Andrew Shvayka Date: Fri, 28 Jul 2017 14:44:04 +0300 Subject: [PATCH] Fix to alarm state change during missing originator --- .../server/dao/alarm/BaseAlarmService.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java b/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java index 3486960375..624246a1b5 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java @@ -47,6 +47,7 @@ import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -336,15 +337,11 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ private void updateRelations(Alarm alarm, AlarmStatus oldStatus, AlarmStatus newStatus) { try { - if (alarm.isPropagate()) { - EntityRelationsQuery query = new EntityRelationsQuery(); - query.setParameters(new RelationsSearchParameters(alarm.getOriginator(), EntitySearchDirection.TO, Integer.MAX_VALUE)); - List parentEntities = relationService.findByQuery(query).get().stream().map(r -> r.getFrom()).collect(Collectors.toList()); - for (EntityId parentId : parentEntities) { - updateAlarmRelation(parentId, alarm.getId(), oldStatus, newStatus); - } + List relations = relationService.findByTo(alarm.getId(), RelationTypeGroup.ALARM).get(); + Set parents = relations.stream().map(EntityRelation::getFrom).collect(Collectors.toSet()); + for (EntityId parentId : parents) { + updateAlarmRelation(parentId, alarm.getId(), oldStatus, newStatus); } - updateAlarmRelation(alarm.getOriginator(), alarm.getId(), oldStatus, newStatus); } catch (ExecutionException | InterruptedException e) { log.warn("[{}] Failed to update relations. Old status: [{}], New status: [{}]", alarm.getId(), oldStatus, newStatus); throw new RuntimeException(e);