From d89ce673ab6eb8d014fd2e56665202a9ad459718 Mon Sep 17 00:00:00 2001 From: IrynaMatveieva Date: Fri, 31 Oct 2025 14:27:09 +0200 Subject: [PATCH] fixed interval removal after expiration --- .../single/EntityAggregationCalculatedFieldState.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/aggregation/single/EntityAggregationCalculatedFieldState.java b/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/aggregation/single/EntityAggregationCalculatedFieldState.java index a5daf36b58..49d17a6a9f 100644 --- a/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/aggregation/single/EntityAggregationCalculatedFieldState.java +++ b/application/src/main/java/org/thingsboard/server/service/cf/ctx/state/aggregation/single/EntityAggregationCalculatedFieldState.java @@ -123,7 +123,7 @@ public class EntityAggregationCalculatedFieldState extends BaseCalculatedFieldSt intervals.forEach((intervalEntry, argIntervalStatuses) -> { processInterval(now, intervalEntry, argIntervalStatuses, expiredIntervals, results); }); - expiredIntervals.forEach(intervals::remove); + removeExpiredIntervals(expiredIntervals); ArrayNode result = toResult(results); if (result.isEmpty()) { @@ -146,6 +146,15 @@ public class EntityAggregationCalculatedFieldState extends BaseCalculatedFieldSt }); } + private void removeExpiredIntervals(List expiredIntervals) { + expiredIntervals.forEach(expiredInterval -> { + arguments.values().stream() + .map(EntityAggregationArgumentEntry.class::cast) + .forEach(arg -> arg.getAggIntervals().remove(expiredInterval)); + intervals.remove(expiredInterval); + }); + } + private void createIntervalIfNotExist() { AggIntervalEntry currentInterval = new AggIntervalEntry(interval.getCurrentIntervalStartTs(), interval.getCurrentIntervalEndTs()); if (intervals.containsKey(currentInterval)) {