From 00238968e9dd62a5a3504f75c97ba52e774d0fc0 Mon Sep 17 00:00:00 2001 From: Dmytro Skarzhynets Date: Tue, 24 Feb 2026 20:34:31 +0200 Subject: [PATCH] fix: preserve rule node execution counter when copying messages in delay and deduplication nodes Delay and deduplication rule nodes were creating brand new TbMsg objects instead of copying the original, which reset the ruleNodeExecCounter to 0. This allowed bypassing the maxRuleNodeExecutionsPerMessage limit. Co-Authored-By: Claude Opus 4.6 --- .../RuleNodeActorMessageProcessor.java | 4 +- .../thingsboard/server/common/msg/TbMsg.java | 5 +- .../deduplication/TbMsgDeduplicationNode.java | 15 +-- .../rule/engine/delay/TbMsgDelayNode.java | 14 +-- .../external/TbAbstractExternalNode.java | 8 +- .../rule/engine/delay/TbMsgDelayNodeTest.java | 106 ++++++++++++++++++ .../transform/TbMsgDeduplicationNodeTest.java | 13 +++ 7 files changed, 136 insertions(+), 29 deletions(-) create mode 100644 rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/delay/TbMsgDelayNodeTest.java diff --git a/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeActorMessageProcessor.java b/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeActorMessageProcessor.java index 3eecae7f7a..cc74d248d2 100644 --- a/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeActorMessageProcessor.java +++ b/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeActorMessageProcessor.java @@ -137,7 +137,7 @@ public class RuleNodeActorMessageProcessor extends ComponentMsgProcessor