From 562924a58651447efdfc6bd71269f7d256f3e8b1 Mon Sep 17 00:00:00 2001 From: Nikita Mazurenko Date: Thu, 15 Jan 2026 18:20:20 +0200 Subject: [PATCH 1/2] Reduce CF error noise for on old edges --- .../cf/CalculatedFieldEdgeProcessor.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/cf/CalculatedFieldEdgeProcessor.java b/application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/cf/CalculatedFieldEdgeProcessor.java index f0581ba2d1..f90d031084 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/cf/CalculatedFieldEdgeProcessor.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/cf/CalculatedFieldEdgeProcessor.java @@ -25,6 +25,7 @@ import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.EdgeUtils; import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.cf.CalculatedField; +import org.thingsboard.server.common.data.cf.CalculatedFieldType; import org.thingsboard.server.common.data.edge.Edge; import org.thingsboard.server.common.data.edge.EdgeEvent; import org.thingsboard.server.common.data.edge.EdgeEventActionType; @@ -45,13 +46,25 @@ import org.thingsboard.server.gen.transport.TransportProtos; import org.thingsboard.server.queue.util.TbCoreComponent; import org.thingsboard.server.service.edge.EdgeMsgConstructorUtils; +import java.util.Map; +import java.util.Set; import java.util.UUID; +import static org.thingsboard.server.common.data.cf.CalculatedFieldType.ALARM; +import static org.thingsboard.server.common.data.cf.CalculatedFieldType.ENTITY_AGGREGATION; +import static org.thingsboard.server.common.data.cf.CalculatedFieldType.GEOFENCING; +import static org.thingsboard.server.common.data.cf.CalculatedFieldType.PROPAGATION; +import static org.thingsboard.server.common.data.cf.CalculatedFieldType.RELATED_ENTITIES_AGGREGATION; + @Slf4j @Component @TbCoreComponent public class CalculatedFieldEdgeProcessor extends BaseCalculatedFieldProcessor implements CalculatedFieldProcessor { + private static final Map> NEW_CF_TYPES_PER_EDGE_VERSION = Map.of( + EdgeVersion.V_4_3_0, Set.of(GEOFENCING, ALARM, PROPAGATION, RELATED_ENTITIES_AGGREGATION, ENTITY_AGGREGATION) + ); + @Override public ListenableFuture processCalculatedFieldMsgFromEdge(TenantId tenantId, Edge edge, CalculatedFieldUpdateMsg calculatedFieldUpdateMsg) { CalculatedFieldId calculatedFieldId = new CalculatedFieldId(new UUID(calculatedFieldUpdateMsg.getIdMSB(), calculatedFieldUpdateMsg.getIdLSB())); @@ -91,7 +104,7 @@ public class CalculatedFieldEdgeProcessor extends BaseCalculatedFieldProcessor i switch (edgeEvent.getAction()) { case ADDED, UPDATED -> { CalculatedField calculatedField = edgeCtx.getCalculatedFieldService().findById(edgeEvent.getTenantId(), calculatedFieldId); - if (calculatedField != null) { + if (calculatedField != null && isValidCfToSend(calculatedField.getType(), edgeVersion)) { UpdateMsgType msgType = getUpdateMsgType(edgeEvent.getAction()); CalculatedFieldUpdateMsg calculatedFieldUpdateMsg = EdgeMsgConstructorUtils.constructCalculatedFieldUpdatedMsg(msgType, calculatedField); return DownlinkMsg.newBuilder() @@ -111,6 +124,14 @@ public class CalculatedFieldEdgeProcessor extends BaseCalculatedFieldProcessor i return null; } + private boolean isValidCfToSend(CalculatedFieldType type, EdgeVersion edgeVersion) { + return NEW_CF_TYPES_PER_EDGE_VERSION.entrySet().stream().noneMatch(entry -> { + EdgeVersion v = entry.getKey(); + Set newCfTypes = entry.getValue(); + return edgeVersion.getNumber() < v.getNumber() && newCfTypes.contains(type); + }); + } + @Override public EdgeEventType getEdgeEventType() { return EdgeEventType.CALCULATED_FIELD; From 30f12f8bd34c2db7511636c3a7fc35bff29804e0 Mon Sep 17 00:00:00 2001 From: Nikita Mazurenko Date: Fri, 16 Jan 2026 13:05:04 +0200 Subject: [PATCH 2/2] Refactor isValidCfToSend --- .../cf/CalculatedFieldEdgeProcessor.java | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/cf/CalculatedFieldEdgeProcessor.java b/application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/cf/CalculatedFieldEdgeProcessor.java index f90d031084..5f11abb478 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/cf/CalculatedFieldEdgeProcessor.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/cf/CalculatedFieldEdgeProcessor.java @@ -46,25 +46,16 @@ import org.thingsboard.server.gen.transport.TransportProtos; import org.thingsboard.server.queue.util.TbCoreComponent; import org.thingsboard.server.service.edge.EdgeMsgConstructorUtils; -import java.util.Map; -import java.util.Set; import java.util.UUID; -import static org.thingsboard.server.common.data.cf.CalculatedFieldType.ALARM; -import static org.thingsboard.server.common.data.cf.CalculatedFieldType.ENTITY_AGGREGATION; -import static org.thingsboard.server.common.data.cf.CalculatedFieldType.GEOFENCING; -import static org.thingsboard.server.common.data.cf.CalculatedFieldType.PROPAGATION; -import static org.thingsboard.server.common.data.cf.CalculatedFieldType.RELATED_ENTITIES_AGGREGATION; +import static org.thingsboard.server.common.data.cf.CalculatedFieldType.SCRIPT; +import static org.thingsboard.server.common.data.cf.CalculatedFieldType.SIMPLE; @Slf4j @Component @TbCoreComponent public class CalculatedFieldEdgeProcessor extends BaseCalculatedFieldProcessor implements CalculatedFieldProcessor { - private static final Map> NEW_CF_TYPES_PER_EDGE_VERSION = Map.of( - EdgeVersion.V_4_3_0, Set.of(GEOFENCING, ALARM, PROPAGATION, RELATED_ENTITIES_AGGREGATION, ENTITY_AGGREGATION) - ); - @Override public ListenableFuture processCalculatedFieldMsgFromEdge(TenantId tenantId, Edge edge, CalculatedFieldUpdateMsg calculatedFieldUpdateMsg) { CalculatedFieldId calculatedFieldId = new CalculatedFieldId(new UUID(calculatedFieldUpdateMsg.getIdMSB(), calculatedFieldUpdateMsg.getIdLSB())); @@ -125,11 +116,7 @@ public class CalculatedFieldEdgeProcessor extends BaseCalculatedFieldProcessor i } private boolean isValidCfToSend(CalculatedFieldType type, EdgeVersion edgeVersion) { - return NEW_CF_TYPES_PER_EDGE_VERSION.entrySet().stream().noneMatch(entry -> { - EdgeVersion v = entry.getKey(); - Set newCfTypes = entry.getValue(); - return edgeVersion.getNumber() < v.getNumber() && newCfTypes.contains(type); - }); + return edgeVersion.getNumber() >= EdgeVersion.V_4_3_0.getNumber() || (type == SIMPLE || type == SCRIPT); } @Override