From 7e96edd6ac901ab1020f4fa86371fcbe0b3ba032 Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Wed, 13 Feb 2019 18:32:49 +0200 Subject: [PATCH] Improve TbMsgGeneratorNode to be executed in singleton mode --- .../actors/ruleChain/DefaultTbContext.java | 7 +++ .../RuleNodeActorMessageProcessor.java | 4 +- .../rule/engine/api/TbContext.java | 2 + .../thingsboard/rule/engine/api/TbNode.java | 3 ++ .../rule/engine/debug/TbMsgGeneratorNode.java | 44 +++++++++++++++---- 5 files changed, 50 insertions(+), 10 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java b/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java index 90a9d56e0c..3b89c09367 100644 --- a/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java +++ b/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java @@ -57,6 +57,7 @@ import org.thingsboard.server.service.script.RuleNodeJsScriptEngine; import scala.concurrent.duration.Duration; import java.util.Collections; +import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; @@ -102,6 +103,12 @@ class DefaultTbContext implements TbContext { scheduleMsgWithDelay(new RuleNodeToSelfMsg(msg), delayMs, nodeCtx.getSelfActor()); } + @Override + public boolean isLocalEntity(EntityId entityId) { + Optional address = mainCtx.getRoutingService().resolveById(entityId); + return !address.isPresent(); + } + private void scheduleMsgWithDelay(Object msg, long delayInMs, ActorRef target) { mainCtx.getScheduler().scheduleOnce(Duration.create(delayInMs, TimeUnit.MILLISECONDS), target, msg, mainCtx.getActorSystem().dispatcher(), nodeCtx.getSelfActor()); } 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 98f07f8383..fc8ff3dc0a 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 @@ -83,7 +83,9 @@ public class RuleNodeActorMessageProcessor extends ComponentMsgProcessor { - ctx.tellNext(m, SUCCESS); - scheduleTickMsg(ctx); + if (initialized) { + ctx.tellNext(m, SUCCESS); + scheduleTickMsg(ctx); + } }, t -> { - ctx.tellFailure(msg, t); - scheduleTickMsg(ctx); + if (initialized) { + ctx.tellFailure(msg, t); + scheduleTickMsg(ctx); + } }); } } @@ -102,8 +125,10 @@ public class TbMsgGeneratorNode implements TbNode { if (prevMsg == null) { prevMsg = ctx.newMsg("", originatorId, new TbMsgMetaData(), "{}"); } - TbMsg generated = jsEngine.executeGenerate(prevMsg); - prevMsg = ctx.newMsg(generated.getType(), originatorId, generated.getMetaData(), generated.getData()); + if (initialized) { + TbMsg generated = jsEngine.executeGenerate(prevMsg); + prevMsg = ctx.newMsg(generated.getType(), originatorId, generated.getMetaData(), generated.getData()); + } return prevMsg; }); } @@ -113,6 +138,7 @@ public class TbMsgGeneratorNode implements TbNode { prevMsg = null; if (jsEngine != null) { jsEngine.destroy(); + jsEngine = null; } } }