diff --git a/common/cache/src/main/java/org/thingsboard/server/cache/device/DeviceCacheKey.java b/common/cache/src/main/java/org/thingsboard/server/cache/device/DeviceCacheKey.java index c9c39c468c..475b268f20 100644 --- a/common/cache/src/main/java/org/thingsboard/server/cache/device/DeviceCacheKey.java +++ b/common/cache/src/main/java/org/thingsboard/server/cache/device/DeviceCacheKey.java @@ -38,17 +38,22 @@ public class DeviceCacheKey implements Serializable { this(null, deviceId, null); } + public DeviceCacheKey(TenantId tenantId, DeviceId deviceId) { + this(tenantId, deviceId, null); + } + public DeviceCacheKey(TenantId tenantId, String deviceName) { this(tenantId, null, deviceName); } @Override public String toString() { - if (deviceId != null) { + if (deviceId == null) { + return tenantId + "_n_" + deviceName; + } else if (tenantId == null) { return deviceId.toString(); } else { - return tenantId + "_n_" + deviceName; + return tenantId + "_" + deviceId; } } - } diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java index 5c21968779..96c05c851f 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java @@ -130,15 +130,13 @@ public class DeviceServiceImpl extends AbstractCachedEntityService { - //TODO: possible bug source since sometimes we need to clear cache by tenant id and sometimes by sys tenant id? - if (TenantId.SYS_TENANT_ID.equals(tenantId)) { - return deviceDao.findById(tenantId, deviceId.getId()); - } else { - return deviceDao.findDeviceByTenantIdAndId(tenantId, deviceId.getId()); - } - }, true); + if (TenantId.SYS_TENANT_ID.equals(tenantId)) { + return cache.getAndPutInTransaction(new DeviceCacheKey(deviceId), + () -> deviceDao.findById(tenantId, deviceId.getId()), true); + } else { + return cache.getAndPutInTransaction(new DeviceCacheKey(tenantId, deviceId), + () -> deviceDao.findDeviceByTenantIdAndId(tenantId, deviceId.getId()), true); + } } @Override @@ -259,6 +257,7 @@ public class DeviceServiceImpl extends AbstractCachedEntityService