Details
diff --git a/application/src/main/java/org/thingsboard/server/actors/app/AppActor.java b/application/src/main/java/org/thingsboard/server/actors/app/AppActor.java
index bb2107b..2b28d39 100644
--- a/application/src/main/java/org/thingsboard/server/actors/app/AppActor.java
+++ b/application/src/main/java/org/thingsboard/server/actors/app/AppActor.java
@@ -78,11 +78,13 @@ public class AppActor extends ContextAwareActor {
ruleManager.init(this.context());
pluginManager.init(this.context());
- PageDataIterable<Tenant> tenantIterator = new PageDataIterable<>(link -> tenantService.findTenants(link), ENTITY_PACK_LIMIT);
- for (Tenant tenant : tenantIterator) {
- logger.debug("[{}] Creating tenant actor", tenant.getId());
- getOrCreateTenantActor(tenant.getId());
- logger.debug("Tenant actor created.");
+ if (systemContext.isTenantComponentsInitEnabled()) {
+ PageDataIterable<Tenant> tenantIterator = new PageDataIterable<>(tenantService::findTenants, ENTITY_PACK_LIMIT);
+ for (Tenant tenant : tenantIterator) {
+ logger.debug("[{}] Creating tenant actor", tenant.getId());
+ getOrCreateTenantActor(tenant.getId());
+ logger.debug("Tenant actor created.");
+ }
}
logger.info("Main system actor started.");
@@ -181,13 +183,8 @@ public class AppActor extends ContextAwareActor {
}
private ActorRef getOrCreateTenantActor(TenantId tenantId) {
- ActorRef tenantActor = tenantActors.get(tenantId);
- if (tenantActor == null) {
- tenantActor = context().actorOf(Props.create(new TenantActor.ActorCreator(systemContext, tenantId))
- .withDispatcher(DefaultActorService.CORE_DISPATCHER_NAME), tenantId.toString());
- tenantActors.put(tenantId, tenantActor);
- }
- return tenantActor;
+ return tenantActors.computeIfAbsent(tenantId, k -> context().actorOf(Props.create(new TenantActor.ActorCreator(systemContext, tenantId))
+ .withDispatcher(DefaultActorService.CORE_DISPATCHER_NAME), tenantId.toString()));
}
private void processTermination(Terminated message) {
diff --git a/application/src/main/java/org/thingsboard/server/actors/shared/rule/RuleManager.java b/application/src/main/java/org/thingsboard/server/actors/shared/rule/RuleManager.java
index c2fc24a..e7e7a63 100644
--- a/application/src/main/java/org/thingsboard/server/actors/shared/rule/RuleManager.java
+++ b/application/src/main/java/org/thingsboard/server/actors/shared/rule/RuleManager.java
@@ -44,7 +44,7 @@ public abstract class RuleManager {
protected final Map<RuleId, ActorRef> ruleActors;
protected final TenantId tenantId;
- Map<RuleMetaData, RuleActorMetaData> ruleMap = new HashMap<>();
+ private Map<RuleMetaData, RuleActorMetaData> ruleMap;
private RuleActorChain ruleChain;
public RuleManager(ActorSystemContext systemContext, TenantId tenantId) {
@@ -55,6 +55,10 @@ public abstract class RuleManager {
}
public void init(ActorContext context) {
+ doInit(context);
+ }
+
+ private void doInit(ActorContext context) {
PageDataIterable<RuleMetaData> ruleIterator = new PageDataIterable<>(getFetchRulesFunction(),
ContextAwareActor.ENTITY_PACK_LIMIT);
ruleMap = new HashMap<>();
@@ -62,8 +66,7 @@ public abstract class RuleManager {
for (RuleMetaData rule : ruleIterator) {
log.debug("[{}] Creating rule actor {}", rule.getId(), rule);
ActorRef ref = getOrCreateRuleActor(context, rule.getId());
- RuleActorMetaData actorMd = RuleActorMetaData.systemRule(rule.getId(), rule.getWeight(), ref);
- ruleMap.put(rule, actorMd);
+ ruleMap.put(rule, RuleActorMetaData.systemRule(rule.getId(), rule.getWeight(), ref));
log.debug("[{}] Rule actor created.", rule.getId());
}
@@ -72,7 +75,7 @@ public abstract class RuleManager {
public Optional<ActorRef> update(ActorContext context, RuleId ruleId, ComponentLifecycleEvent event) {
if (ruleMap == null) {
- init(context);
+ doInit(context);
}
RuleMetaData rule;
if (event != ComponentLifecycleEvent.DELETED) {
@@ -114,8 +117,8 @@ public abstract class RuleManager {
}
public RuleActorChain getRuleChain(ActorContext context) {
- if (ruleMap == null) {
- init(context);
+ if (ruleChain == null) {
+ doInit(context);
}
return ruleChain;
}
diff --git a/application/src/main/java/org/thingsboard/server/actors/shared/rule/TenantRuleManager.java b/application/src/main/java/org/thingsboard/server/actors/shared/rule/TenantRuleManager.java
index 12278bb..913d8c6 100644
--- a/application/src/main/java/org/thingsboard/server/actors/shared/rule/TenantRuleManager.java
+++ b/application/src/main/java/org/thingsboard/server/actors/shared/rule/TenantRuleManager.java
@@ -28,6 +28,7 @@ public class TenantRuleManager extends RuleManager {
super(systemContext, tenantId);
}
+ @Override
public void init(ActorContext context) {
if (systemContext.isTenantComponentsInitEnabled()) {
super.init(context);
diff --git a/application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java b/application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java
index 2fbe1ac..e6f3d09 100644
--- a/application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java
+++ b/application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java
@@ -151,7 +151,8 @@ public class TenantActor extends ContextAwareActor {
private void process(RuleChainDeviceMsg msg) {
ToDeviceActorMsg toDeviceActorMsg = msg.getToDeviceActorMsg();
ActorRef deviceActor = getOrCreateDeviceActor(toDeviceActorMsg.getDeviceId());
- RuleActorChain chain = new ComplexRuleActorChain(msg.getRuleChain(), ruleManager.getRuleChain(this.context()));
+ RuleActorChain tenantChain = ruleManager.getRuleChain(this.context());
+ RuleActorChain chain = new ComplexRuleActorChain(msg.getRuleChain(), tenantChain);
deviceActor.tell(new RuleChainDeviceMsg(toDeviceActorMsg, chain), context().self());
}