Browse Source

Merge branch 'lts-4.2-fix/cf-cache-tenant-filtering' into lts-4.3-fix/cf-cache-tenant-filtering

pull/15308/head
IrynaMatveieva 6 months ago
parent
commit
663fded846
  1. 8
      application/src/main/java/org/thingsboard/server/service/cf/CalculatedFieldCache.java
  2. 24
      application/src/main/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldCache.java
  3. 10
      application/src/main/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldQueueService.java

8
application/src/main/java/org/thingsboard/server/service/cf/CalculatedFieldCache.java

@ -33,15 +33,15 @@ public interface CalculatedFieldCache {
CalculatedField getCalculatedField(CalculatedFieldId calculatedFieldId); CalculatedField getCalculatedField(CalculatedFieldId calculatedFieldId);
List<CalculatedField> getCalculatedFieldsByEntityId(EntityId entityId); List<CalculatedField> getCalculatedFieldsByEntityId(TenantId tenantId, EntityId entityId);
List<CalculatedFieldLink> getCalculatedFieldLinksByEntityId(EntityId entityId); List<CalculatedFieldLink> getCalculatedFieldLinksByEntityId(TenantId tenantId, EntityId entityId);
CalculatedFieldCtx getCalculatedFieldCtx(CalculatedFieldId calculatedFieldId); CalculatedFieldCtx getCalculatedFieldCtx(CalculatedFieldId calculatedFieldId);
List<CalculatedFieldCtx> getCalculatedFieldCtxsByEntityId(EntityId entityId); List<CalculatedFieldCtx> getCalculatedFieldCtxsByEntityId(TenantId tenantId, EntityId entityId);
Stream<CalculatedFieldCtx> getCalculatedFieldCtxsByType(CalculatedFieldType cfType); Stream<CalculatedFieldCtx> getCalculatedFieldCtxsByType(TenantId tenantId, CalculatedFieldType cfType);
boolean hasCalculatedFields(TenantId tenantId, EntityId entityId, Predicate<CalculatedFieldCtx> filter); boolean hasCalculatedFields(TenantId tenantId, EntityId entityId, Predicate<CalculatedFieldCtx> filter);

24
application/src/main/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldCache.java

@ -108,13 +108,17 @@ public class DefaultCalculatedFieldCache implements CalculatedFieldCache {
} }
@Override @Override
public List<CalculatedField> getCalculatedFieldsByEntityId(EntityId entityId) { public List<CalculatedField> getCalculatedFieldsByEntityId(TenantId tenantId, EntityId entityId) {
return entityIdCalculatedFields.getOrDefault(entityId, Collections.emptyList()); return entityIdCalculatedFields.getOrDefault(entityId, Collections.emptyList()).stream()
.filter(cf -> cf.getTenantId().equals(tenantId))
.toList();
} }
@Override @Override
public List<CalculatedFieldLink> getCalculatedFieldLinksByEntityId(EntityId entityId) { public List<CalculatedFieldLink> getCalculatedFieldLinksByEntityId(TenantId tenantId, EntityId entityId) {
return entityIdCalculatedFieldLinks.getOrDefault(entityId, Collections.emptyList()); return entityIdCalculatedFieldLinks.getOrDefault(entityId, Collections.emptyList()).stream()
.filter(link -> link.tenantId().equals(tenantId))
.toList();
} }
@Override @Override
@ -142,25 +146,25 @@ public class DefaultCalculatedFieldCache implements CalculatedFieldCache {
} }
@Override @Override
public List<CalculatedFieldCtx> getCalculatedFieldCtxsByEntityId(EntityId entityId) { public List<CalculatedFieldCtx> getCalculatedFieldCtxsByEntityId(TenantId tenantId, EntityId entityId) {
if (entityId == null) { if (entityId == null) {
return Collections.emptyList(); return Collections.emptyList();
} }
return getCalculatedFieldsByEntityId(entityId).stream() return getCalculatedFieldsByEntityId(tenantId, entityId).stream()
.map(cf -> getCalculatedFieldCtx(cf.getId())) .map(cf -> getCalculatedFieldCtx(cf.getId()))
.toList(); .toList();
} }
@Override @Override
public Stream<CalculatedFieldCtx> getCalculatedFieldCtxsByType(CalculatedFieldType cfType) { public Stream<CalculatedFieldCtx> getCalculatedFieldCtxsByType(TenantId tenantId, CalculatedFieldType cfType) {
return calculatedFields.values().stream() return calculatedFields.values().stream()
.filter(cf -> cfType.equals(cf.getType())) .filter(cf -> cf.getTenantId().equals(tenantId) && cfType.equals(cf.getType()))
.map(cf -> getCalculatedFieldCtx(cf.getId())); .map(cf -> getCalculatedFieldCtx(cf.getId()));
} }
@Override @Override
public boolean hasCalculatedFields(TenantId tenantId, EntityId entityId, Predicate<CalculatedFieldCtx> filter) { public boolean hasCalculatedFields(TenantId tenantId, EntityId entityId, Predicate<CalculatedFieldCtx> filter) {
List<CalculatedFieldCtx> entityCfs = getCalculatedFieldCtxsByEntityId(entityId); List<CalculatedFieldCtx> entityCfs = getCalculatedFieldCtxsByEntityId(tenantId, entityId);
for (CalculatedFieldCtx ctx : entityCfs) { for (CalculatedFieldCtx ctx : entityCfs) {
if (filter.test(ctx)) { if (filter.test(ctx)) {
return true; return true;
@ -173,7 +177,7 @@ public class DefaultCalculatedFieldCache implements CalculatedFieldCache {
public boolean hasCalculatedFieldsByProfile(TenantId tenantId, EntityId entityId, Predicate<CalculatedFieldCtx> filter) { public boolean hasCalculatedFieldsByProfile(TenantId tenantId, EntityId entityId, Predicate<CalculatedFieldCtx> filter) {
EntityId profileId = getProfileId(tenantId, entityId); EntityId profileId = getProfileId(tenantId, entityId);
if (profileId != null) { if (profileId != null) {
List<CalculatedFieldCtx> profileCfs = getCalculatedFieldCtxsByEntityId(profileId); List<CalculatedFieldCtx> profileCfs = getCalculatedFieldCtxsByEntityId(tenantId, profileId);
for (CalculatedFieldCtx ctx : profileCfs) { for (CalculatedFieldCtx ctx : profileCfs) {
if (filter.test(ctx)) { if (filter.test(ctx)) {
return true; return true;

10
application/src/main/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldQueueService.java

@ -171,7 +171,7 @@ public class DefaultCalculatedFieldQueueService implements CalculatedFieldQueueS
return true; return true;
} }
List<CalculatedFieldLink> links = calculatedFieldCache.getCalculatedFieldLinksByEntityId(entityId); List<CalculatedFieldLink> links = calculatedFieldCache.getCalculatedFieldLinksByEntityId(tenantId, entityId);
for (CalculatedFieldLink link : links) { for (CalculatedFieldLink link : links) {
CalculatedFieldCtx ctx = calculatedFieldCache.getCalculatedFieldCtx(link.calculatedFieldId()); CalculatedFieldCtx ctx = calculatedFieldCache.getCalculatedFieldCtx(link.calculatedFieldId());
if (ctx != null && linkedEntityFilter.test(ctx)) { if (ctx != null && linkedEntityFilter.test(ctx)) {
@ -180,21 +180,21 @@ public class DefaultCalculatedFieldQueueService implements CalculatedFieldQueueS
} }
for (EntityId dynamicEntity : calculatedFieldCache.getDynamicEntities(tenantId, entityId)) { for (EntityId dynamicEntity : calculatedFieldCache.getDynamicEntities(tenantId, entityId)) {
if (calculatedFieldCache.getCalculatedFieldCtxsByEntityId(dynamicEntity).stream().anyMatch(dynamicSourceFilter)) { if (calculatedFieldCache.getCalculatedFieldCtxsByEntityId(tenantId, dynamicEntity).stream().anyMatch(dynamicSourceFilter)) {
return true; return true;
} }
EntityId dynamicEntityProfileId = calculatedFieldCache.getProfileId(tenantId, dynamicEntity); EntityId dynamicEntityProfileId = calculatedFieldCache.getProfileId(tenantId, dynamicEntity);
if (calculatedFieldCache.getCalculatedFieldCtxsByEntityId(dynamicEntityProfileId).stream().anyMatch(dynamicSourceFilter)) { if (calculatedFieldCache.getCalculatedFieldCtxsByEntityId(tenantId, dynamicEntityProfileId).stream().anyMatch(dynamicSourceFilter)) {
return true; return true;
} }
} }
boolean hasMatchesEntityAggCfs = calculatedFieldCache.getCalculatedFieldCtxsByType(CalculatedFieldType.ENTITY_AGGREGATION).anyMatch(filter); boolean hasMatchesEntityAggCfs = calculatedFieldCache.getCalculatedFieldCtxsByType(tenantId, CalculatedFieldType.ENTITY_AGGREGATION).anyMatch(filter);
if (hasMatchesEntityAggCfs) { if (hasMatchesEntityAggCfs) {
return true; return true;
} }
List<CalculatedFieldCtx> relatedEntitiesAggregationCfs = calculatedFieldCache.getCalculatedFieldCtxsByType(CalculatedFieldType.RELATED_ENTITIES_AGGREGATION) List<CalculatedFieldCtx> relatedEntitiesAggregationCfs = calculatedFieldCache.getCalculatedFieldCtxsByType(tenantId, CalculatedFieldType.RELATED_ENTITIES_AGGREGATION)
.filter(relatedEntityFilter) .filter(relatedEntityFilter)
.toList(); .toList();
for (CalculatedFieldCtx cfCtx : relatedEntitiesAggregationCfs) { for (CalculatedFieldCtx cfCtx : relatedEntitiesAggregationCfs) {

Loading…
Cancel
Save