Browse Source

refactoring

pull/15274/head
dashevchenko 6 months ago
parent
commit
262565a411
  1. 35
      application/src/main/java/org/thingsboard/server/service/cf/DefaultCalculatedFieldCache.java
  2. 21
      application/src/main/java/org/thingsboard/server/service/profile/DefaultTbAssetProfileCache.java
  3. 21
      application/src/main/java/org/thingsboard/server/service/profile/DefaultTbDeviceProfileCache.java

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

@ -40,6 +40,7 @@ import org.thingsboard.server.service.cf.ctx.state.CalculatedFieldCtx;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
@ -196,17 +197,42 @@ public class DefaultCalculatedFieldCache implements CalculatedFieldCache {
case TENANT: case TENANT:
TenantId tenantId = event.getTenantId(); TenantId tenantId = event.getTenantId();
var removedCfIds = new HashSet<CalculatedFieldId>(); var removedCfIds = new HashSet<CalculatedFieldId>();
calculatedFields.forEach((cfId, cf) -> { var removedCfEntityIds = new HashSet<EntityId>();
var removedLinkEntityIds = new HashSet<EntityId>();
for (Map.Entry<CalculatedFieldId, CalculatedField> entry : calculatedFields.entrySet()) {
CalculatedFieldId cfId = entry.getKey();
CalculatedField cf = entry.getValue();
if (cf.getTenantId().equals(tenantId)) { if (cf.getTenantId().equals(tenantId)) {
calculatedFields.remove(cfId); calculatedFields.remove(cfId);
calculatedFieldLinks.remove(cfId); List<CalculatedFieldLink> links = calculatedFieldLinks.remove(cfId);
if (links != null) {
links.forEach(link -> removedLinkEntityIds.add(link.getEntityId()));
}
calculatedFieldsCtx.remove(cfId); calculatedFieldsCtx.remove(cfId);
removedCfIds.add(cfId); removedCfIds.add(cfId);
removedCfEntityIds.add(cf.getEntityId());
log.debug("[{}] evict calculated field from cache on tenant deletion: {}", cfId, cf); log.debug("[{}] evict calculated field from cache on tenant deletion: {}", cfId, cf);
} }
}
removedCfEntityIds.forEach(entityId -> {
List<CalculatedField> cfs = entityIdCalculatedFields.get(entityId);
if (cfs != null) {
cfs.removeIf(cf -> removedCfIds.contains(cf.getId()));
if (cfs.isEmpty()) {
entityIdCalculatedFields.remove(entityId);
}
}
});
removedLinkEntityIds.forEach(entityId -> {
List<CalculatedFieldLink> entityLinks = entityIdCalculatedFieldLinks.get(entityId);
if (entityLinks != null) {
entityLinks.removeIf(link -> removedCfIds.contains(link.getCalculatedFieldId()));
if (entityLinks.isEmpty()) {
entityIdCalculatedFieldLinks.remove(entityId);
}
}
}); });
entityIdCalculatedFields.values().forEach(list -> list.removeIf(cf -> removedCfIds.contains(cf.getId()))); removedCfIds.forEach(calculatedFieldFetchLocks::remove);
entityIdCalculatedFieldLinks.values().forEach(list -> list.removeIf(link -> removedCfIds.contains(link.getCalculatedFieldId())));
break; break;
case DEVICE: case DEVICE:
case ASSET: case ASSET:
@ -224,6 +250,7 @@ public class DefaultCalculatedFieldCache implements CalculatedFieldCache {
log.debug("[{}] evict calculated field from cache on entity deletion: {}", cf.getId(), cf); log.debug("[{}] evict calculated field from cache on entity deletion: {}", cf.getId(), cf);
}); });
entityIdCalculatedFieldLinks.values().forEach(list -> list.removeIf(link -> cfIds.contains(link.getCalculatedFieldId()))); entityIdCalculatedFieldLinks.values().forEach(list -> list.removeIf(link -> cfIds.contains(link.getCalculatedFieldId())));
cfIds.forEach(calculatedFieldFetchLocks::remove);
} }
entityIdCalculatedFieldLinks.remove(entityId); entityIdCalculatedFieldLinks.remove(entityId);
break; break;

21
application/src/main/java/org/thingsboard/server/service/profile/DefaultTbAssetProfileCache.java

@ -30,6 +30,7 @@ import org.thingsboard.server.dao.asset.AssetProfileService;
import org.thingsboard.server.dao.asset.AssetService; import org.thingsboard.server.dao.asset.AssetService;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Lock;
@ -154,18 +155,18 @@ public class DefaultTbAssetProfileCache implements TbAssetProfileCache {
if (event.getEvent() == ComponentLifecycleEvent.DELETED) { if (event.getEvent() == ComponentLifecycleEvent.DELETED) {
TenantId tenantId = event.getTenantId(); TenantId tenantId = event.getTenantId();
var removedProfileIds = new HashSet<AssetProfileId>(); var removedProfileIds = new HashSet<AssetProfileId>();
assetProfilesMap.forEach((assetProfileId, assetProfile) -> { for (Map.Entry<AssetProfileId, AssetProfile> entry : assetProfilesMap.entrySet()) {
if (assetProfile.getTenantId().equals(tenantId)) { if (entry.getValue().getTenantId().equals(tenantId)) {
assetProfilesMap.remove(assetProfileId); assetProfilesMap.remove(entry.getKey());
removedProfileIds.add(assetProfileId); removedProfileIds.add(entry.getKey());
log.debug("[{}] evict asset profile from cache: {}", assetProfileId, assetProfile); log.debug("[{}] evict asset profile from cache: {}", entry.getKey(), entry.getValue());
} }
}); }
assetsMap.forEach((assetId, assetProfileId) -> { for (Map.Entry<AssetId, AssetProfileId> entry : assetsMap.entrySet()) {
if (removedProfileIds.contains(assetProfileId)) { if (removedProfileIds.contains(entry.getValue())) {
assetsMap.remove(assetId); assetsMap.remove(entry.getKey());
} }
}); }
profileListeners.remove(tenantId); profileListeners.remove(tenantId);
assetProfileListeners.remove(tenantId); assetProfileListeners.remove(tenantId);
} }

21
application/src/main/java/org/thingsboard/server/service/profile/DefaultTbDeviceProfileCache.java

@ -30,6 +30,7 @@ import org.thingsboard.server.dao.device.DeviceProfileService;
import org.thingsboard.server.dao.device.DeviceService; import org.thingsboard.server.dao.device.DeviceService;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Lock;
@ -154,18 +155,18 @@ public class DefaultTbDeviceProfileCache implements TbDeviceProfileCache {
if (event.getEvent() == ComponentLifecycleEvent.DELETED) { if (event.getEvent() == ComponentLifecycleEvent.DELETED) {
TenantId tenantId = event.getTenantId(); TenantId tenantId = event.getTenantId();
var removedProfileIds = new HashSet<DeviceProfileId>(); var removedProfileIds = new HashSet<DeviceProfileId>();
deviceProfilesMap.forEach((deviceProfileId, deviceProfile) -> { for (Map.Entry<DeviceProfileId, DeviceProfile> entry : deviceProfilesMap.entrySet()) {
if (deviceProfile.getTenantId().equals(tenantId)) { if (entry.getValue().getTenantId().equals(tenantId)) {
deviceProfilesMap.remove(deviceProfileId); deviceProfilesMap.remove(entry.getKey());
removedProfileIds.add(deviceProfileId); removedProfileIds.add(entry.getKey());
log.debug("[{}] evict device profile from cache: {}", deviceProfileId, deviceProfile); log.debug("[{}] evict device profile from cache: {}", entry.getKey(), entry.getValue());
} }
}); }
devicesMap.forEach((deviceId, deviceProfileId) -> { for (Map.Entry<DeviceId, DeviceProfileId> entry : devicesMap.entrySet()) {
if (removedProfileIds.contains(deviceProfileId)) { if (removedProfileIds.contains(entry.getValue())) {
devicesMap.remove(deviceId); devicesMap.remove(entry.getKey());
} }
}); }
profileListeners.remove(tenantId); profileListeners.remove(tenantId);
deviceProfileListeners.remove(tenantId); deviceProfileListeners.remove(tenantId);
} }

Loading…
Cancel
Save