@ -18,12 +18,15 @@ package org.thingsboard.server.dao.firmware;
import com.google.common.hash.HashFunction ;
import com.google.common.hash.Hashing ;
import com.google.common.util.concurrent.ListenableFuture ;
import lombok.RequiredArgsConstructor ;
import lombok.extern.slf4j.Slf4j ;
import org.apache.commons.lang3.StringUtils ;
import org.hibernate.exception.ConstraintViolationException ;
import org.springframework.cache.Cache ;
import org.springframework.cache.CacheManager ;
import org.springframework.cache.annotation.Cacheable ;
import org.springframework.stereotype.Service ;
import org.thingsboard.server.cache.firmware.FirmwareDataCache ;
import org.thingsboard.server.common.data.Firmware ;
import org.thingsboard.server.common.data.FirmwareInfo ;
import org.thingsboard.server.common.data.Tenant ;
@ -38,6 +41,7 @@ import org.thingsboard.server.dao.tenant.TenantDao;
import java.nio.ByteBuffer ;
import java.util.Collections ;
import java.util.List ;
import java.util.Optional ;
import static org.thingsboard.server.common.data.CacheConstants.FIRMWARE_CACHE ;
@ -46,6 +50,7 @@ import static org.thingsboard.server.dao.service.Validator.validatePageLink;
@Service
@Slf4j
@RequiredArgsConstructor
public class BaseFirmwareService implements FirmwareService {
public static final String INCORRECT_FIRMWARE_ID = "Incorrect firmwareId " ;
public static final String INCORRECT_TENANT_ID = "Incorrect tenantId " ;
@ -54,13 +59,7 @@ public class BaseFirmwareService implements FirmwareService {
private final FirmwareDao firmwareDao ;
private final FirmwareInfoDao firmwareInfoDao ;
private final CacheManager cacheManager ;
public BaseFirmwareService ( TenantDao tenantDao , FirmwareDao firmwareDao , FirmwareInfoDao firmwareInfoDao , CacheManager cacheManager ) {
this . tenantDao = tenantDao ;
this . firmwareDao = firmwareDao ;
this . firmwareInfoDao = firmwareInfoDao ;
this . cacheManager = cacheManager ;
}
private final FirmwareDataCache firmwareDataCache ;
@Override
public FirmwareInfo saveFirmwareInfo ( FirmwareInfo firmwareInfo ) {
@ -69,7 +68,9 @@ public class BaseFirmwareService implements FirmwareService {
try {
FirmwareId firmwareId = firmwareInfo . getId ( ) ;
if ( firmwareId ! = null ) {
cacheManager . getCache ( FIRMWARE_CACHE ) . evict ( firmwareId . toString ( ) ) ;
Cache cache = cacheManager . getCache ( FIRMWARE_CACHE ) ;
cache . evict ( toFirmwareInfoKey ( firmwareId ) ) ;
firmwareDataCache . evict ( firmwareId . toString ( ) ) ;
}
return firmwareInfoDao . save ( firmwareInfo . getTenantId ( ) , firmwareInfo ) ;
} catch ( Exception t ) {
@ -89,7 +90,9 @@ public class BaseFirmwareService implements FirmwareService {
try {
FirmwareId firmwareId = firmware . getId ( ) ;
if ( firmwareId ! = null ) {
cacheManager . getCache ( FIRMWARE_CACHE ) . evict ( firmwareId . toString ( ) ) ;
Cache cache = cacheManager . getCache ( FIRMWARE_CACHE ) ;
cache . evict ( toFirmwareInfoKey ( firmwareId ) ) ;
firmwareDataCache . evict ( firmwareId . toString ( ) ) ;
}
return firmwareDao . save ( firmware . getTenantId ( ) , firmware ) ;
} catch ( Exception t ) {
@ -110,6 +113,7 @@ public class BaseFirmwareService implements FirmwareService {
}
@Override
@Cacheable ( cacheNames = FIRMWARE_CACHE , key = "{#firmwareId}" )
public FirmwareInfo findFirmwareInfoById ( TenantId tenantId , FirmwareId firmwareId ) {
log . trace ( "Executing findFirmwareInfoById [{}]" , firmwareId ) ;
validateId ( firmwareId , INCORRECT_FIRMWARE_ID + firmwareId ) ;
@ -144,7 +148,8 @@ public class BaseFirmwareService implements FirmwareService {
validateId ( firmwareId , INCORRECT_FIRMWARE_ID + firmwareId ) ;
try {
Cache cache = cacheManager . getCache ( FIRMWARE_CACHE ) ;
cache . evict ( Collections . singletonList ( firmwareId ) ) ;
cache . evict ( toFirmwareInfoKey ( firmwareId ) ) ;
firmwareDataCache . evict ( firmwareId . toString ( ) ) ;
firmwareDao . removeById ( tenantId , firmwareId . getId ( ) ) ;
} catch ( Exception t ) {
ConstraintViolationException e = extractConstraintViolationException ( t ) . orElse ( null ) ;
@ -323,4 +328,9 @@ public class BaseFirmwareService implements FirmwareService {
return Optional . empty ( ) ;
}
}
private static List < FirmwareId > toFirmwareInfoKey ( FirmwareId firmwareId ) {
return Collections . singletonList ( firmwareId ) ;
}
}