Browse Source

Fix cache key for device cache

pull/9569/head
Andrii Shvaika 3 years ago
parent
commit
33abe0ebe5
  1. 6
      common/cache/src/main/java/org/thingsboard/server/cache/device/DeviceCacheKey.java
  2. 4
      dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java

6
common/cache/src/main/java/org/thingsboard/server/cache/device/DeviceCacheKey.java

@ -34,8 +34,8 @@ public class DeviceCacheKey implements Serializable {
private final DeviceId deviceId; private final DeviceId deviceId;
private final String deviceName; private final String deviceName;
public DeviceCacheKey(TenantId tenantId, DeviceId deviceId) { public DeviceCacheKey(DeviceId deviceId) {
this(tenantId, deviceId, null); this(null, deviceId, null);
} }
public DeviceCacheKey(TenantId tenantId, String deviceName) { public DeviceCacheKey(TenantId tenantId, String deviceName) {
@ -45,7 +45,7 @@ public class DeviceCacheKey implements Serializable {
@Override @Override
public String toString() { public String toString() {
if (deviceId != null) { if (deviceId != null) {
return tenantId + "_" + deviceId; return deviceId.toString();
} else { } else {
return tenantId + "_n_" + deviceName; return tenantId + "_n_" + deviceName;
} }

4
dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java

@ -130,7 +130,7 @@ public class DeviceServiceImpl extends AbstractCachedEntityService<DeviceCacheKe
public Device findDeviceById(TenantId tenantId, DeviceId deviceId) { public Device findDeviceById(TenantId tenantId, DeviceId deviceId) {
log.trace("Executing findDeviceById [{}]", deviceId); log.trace("Executing findDeviceById [{}]", deviceId);
validateId(deviceId, INCORRECT_DEVICE_ID + deviceId); validateId(deviceId, INCORRECT_DEVICE_ID + deviceId);
return cache.getAndPutInTransaction(new DeviceCacheKey(tenantId, deviceId), return cache.getAndPutInTransaction(new DeviceCacheKey(deviceId),
() -> { () -> {
//TODO: possible bug source since sometimes we need to clear cache by tenant id and sometimes by sys tenant id? //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)) { if (TenantId.SYS_TENANT_ID.equals(tenantId)) {
@ -258,7 +258,7 @@ public class DeviceServiceImpl extends AbstractCachedEntityService<DeviceCacheKe
List<DeviceCacheKey> keys = new ArrayList<>(3); List<DeviceCacheKey> keys = new ArrayList<>(3);
keys.add(new DeviceCacheKey(event.getTenantId(), event.getNewName())); keys.add(new DeviceCacheKey(event.getTenantId(), event.getNewName()));
if (event.getDeviceId() != null) { if (event.getDeviceId() != null) {
keys.add(new DeviceCacheKey(event.getTenantId(), event.getDeviceId())); keys.add(new DeviceCacheKey(event.getDeviceId()));
} }
if (StringUtils.isNotEmpty(event.getOldName()) && !event.getOldName().equals(event.getNewName())) { if (StringUtils.isNotEmpty(event.getOldName()) && !event.getOldName().equals(event.getNewName())) {
keys.add(new DeviceCacheKey(event.getTenantId(), event.getOldName())); keys.add(new DeviceCacheKey(event.getTenantId(), event.getOldName()));

Loading…
Cancel
Save