From 5b94f14096fe9f813cd54278f2dfc51287a0a0c5 Mon Sep 17 00:00:00 2001 From: IrynaMatveieva Date: Thu, 26 Mar 2026 14:14:10 +0200 Subject: [PATCH] Fix calculated field cache to filter by tenant --- .../server/service/cf/CalculatedFieldCache.java | 6 +++--- .../service/cf/DefaultCalculatedFieldCache.java | 16 ++++++++++------ .../cf/DefaultCalculatedFieldQueueService.java | 6 +++--- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/cf/CalculatedFieldCache.java b/application/src/main/java/org/thingsboard/server/service/cf/CalculatedFieldCache.java index 720a1b48b0..0889f0e688 100644 --- a/application/src/main/java/org/thingsboard/server/service/cf/CalculatedFieldCache.java +++ b/application/src/main/java/org/thingsboard/server/service/cf/CalculatedFieldCache.java @@ -28,13 +28,13 @@ public interface CalculatedFieldCache { CalculatedField getCalculatedField(CalculatedFieldId calculatedFieldId); - List getCalculatedFieldsByEntityId(EntityId entityId); + List getCalculatedFieldsByEntityId(TenantId tenantId, EntityId entityId); - List getCalculatedFieldLinksByEntityId(EntityId entityId); + List getCalculatedFieldLinksByEntityId(TenantId tenantId, EntityId entityId); CalculatedFieldCtx getCalculatedFieldCtx(CalculatedFieldId calculatedFieldId); - List getCalculatedFieldCtxsByEntityId(EntityId entityId); + List getCalculatedFieldCtxsByEntityId(TenantId tenantId, EntityId entityId); void addCalculatedField(TenantId tenantId, CalculatedFieldId calculatedFieldId); diff --git a/application/src/main/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldCache.java b/application/src/main/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldCache.java index 1eba2c4549..34e905553e 100644 --- a/application/src/main/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldCache.java +++ b/application/src/main/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldCache.java @@ -91,13 +91,17 @@ public class DefaultCalculatedFieldCache implements CalculatedFieldCache { } @Override - public List getCalculatedFieldsByEntityId(EntityId entityId) { - return entityIdCalculatedFields.getOrDefault(entityId, Collections.emptyList()); + public List getCalculatedFieldsByEntityId(TenantId tenantId, EntityId entityId) { + return entityIdCalculatedFields.getOrDefault(entityId, Collections.emptyList()).stream() + .filter(cf -> cf.getTenantId().equals(tenantId)) + .toList(); } @Override - public List getCalculatedFieldLinksByEntityId(EntityId entityId) { - return entityIdCalculatedFieldLinks.getOrDefault(entityId, Collections.emptyList()); + public List getCalculatedFieldLinksByEntityId(TenantId tenantId, EntityId entityId) { + return entityIdCalculatedFieldLinks.getOrDefault(entityId, Collections.emptyList()).stream() + .filter(link -> link.getTenantId().equals(tenantId)) + .toList(); } @Override @@ -125,11 +129,11 @@ public class DefaultCalculatedFieldCache implements CalculatedFieldCache { } @Override - public List getCalculatedFieldCtxsByEntityId(EntityId entityId) { + public List getCalculatedFieldCtxsByEntityId(TenantId tenantId, EntityId entityId) { if (entityId == null) { return Collections.emptyList(); } - return getCalculatedFieldsByEntityId(entityId).stream() + return getCalculatedFieldsByEntityId(tenantId, entityId).stream() .map(cf -> getCalculatedFieldCtx(cf.getId())) .toList(); } diff --git a/application/src/main/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldQueueService.java b/application/src/main/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldQueueService.java index a816eb104c..13dc16b702 100644 --- a/application/src/main/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldQueueService.java +++ b/application/src/main/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldQueueService.java @@ -158,7 +158,7 @@ public class DefaultCalculatedFieldQueueService implements CalculatedFieldQueueS if (!supportedReferencedEntities.contains(entityId.getEntityType())) { return false; } - List entityCfs = calculatedFieldCache.getCalculatedFieldCtxsByEntityId(entityId); + List entityCfs = calculatedFieldCache.getCalculatedFieldCtxsByEntityId(tenantId, entityId); for (CalculatedFieldCtx ctx : entityCfs) { if (filter.test(ctx)) { return true; @@ -167,7 +167,7 @@ public class DefaultCalculatedFieldQueueService implements CalculatedFieldQueueS EntityId profileId = getProfileId(tenantId, entityId); if (profileId != null) { - List profileCfs = calculatedFieldCache.getCalculatedFieldCtxsByEntityId(profileId); + List profileCfs = calculatedFieldCache.getCalculatedFieldCtxsByEntityId(tenantId, profileId); for (CalculatedFieldCtx ctx : profileCfs) { if (filter.test(ctx)) { return true; @@ -175,7 +175,7 @@ public class DefaultCalculatedFieldQueueService implements CalculatedFieldQueueS } } - List links = calculatedFieldCache.getCalculatedFieldLinksByEntityId(entityId); + List links = calculatedFieldCache.getCalculatedFieldLinksByEntityId(tenantId, entityId); for (CalculatedFieldLink link : links) { CalculatedFieldCtx ctx = calculatedFieldCache.getCalculatedFieldCtx(link.getCalculatedFieldId()); if (ctx != null && linkedEntityFilter.test(ctx)) {