Commit 67de61e6d5094de6a986e8b173f03f141973fbb5

Authored by YevhenBondarenko
1 parent 18e52d2c

fixed OtaPackage data cache

@@ -782,15 +782,15 @@ public class DeviceController extends BaseController { @@ -782,15 +782,15 @@ public class DeviceController extends BaseController {
782 } 782 }
783 783
784 @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") 784 @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')")
785 - @RequestMapping(value = "/devices/count", method = RequestMethod.GET) 785 + @RequestMapping(value = "/devices/count/{otaPackageType}", method = RequestMethod.GET)
786 @ResponseBody 786 @ResponseBody
787 - public Long countDevicesByTenantIdAndDeviceProfileIdAndEmptyOtaPackage(@RequestParam(required = false) String otaPackageType,  
788 - @RequestParam(required = false) String deviceProfileId) throws ThingsboardException { 787 + public Long countDevicesByTenantIdAndDeviceProfileIdAndEmptyOtaPackage(@PathVariable("otaPackageType") String otaPackageType,
  788 + @RequestParam String deviceProfileId) throws ThingsboardException {
789 checkParameter("OtaPackageType", otaPackageType); 789 checkParameter("OtaPackageType", otaPackageType);
790 checkParameter("DeviceProfileId", deviceProfileId); 790 checkParameter("DeviceProfileId", deviceProfileId);
791 try { 791 try {
792 return deviceService.countDevicesByTenantIdAndDeviceProfileIdAndEmptyOtaPackage( 792 return deviceService.countDevicesByTenantIdAndDeviceProfileIdAndEmptyOtaPackage(
793 - getCurrentUser().getTenantId(), new DeviceProfileId(UUID.fromString(deviceProfileId)), OtaPackageType.valueOf(deviceProfileId)); 793 + getCurrentUser().getTenantId(), new DeviceProfileId(UUID.fromString(deviceProfileId)), OtaPackageType.valueOf(otaPackageType));
794 } catch (Exception e) { 794 } catch (Exception e) {
795 throw handleException(e); 795 throw handleException(e);
796 } 796 }
@@ -374,6 +374,9 @@ caffeine: @@ -374,6 +374,9 @@ caffeine:
374 otaPackages: 374 otaPackages:
375 timeToLiveInMinutes: 60 375 timeToLiveInMinutes: 60
376 maxSize: 10 376 maxSize: 10
  377 + otaPackagesData:
  378 + timeToLiveInMinutes: 60
  379 + maxSize: 10
377 edges: 380 edges:
378 timeToLiveInMinutes: 1440 381 timeToLiveInMinutes: 1440
379 maxSize: 0 382 maxSize: 0
@@ -21,6 +21,7 @@ import org.springframework.cache.CacheManager; @@ -21,6 +21,7 @@ import org.springframework.cache.CacheManager;
21 import org.springframework.stereotype.Service; 21 import org.springframework.stereotype.Service;
22 22
23 import static org.thingsboard.server.common.data.CacheConstants.OTA_PACKAGE_CACHE; 23 import static org.thingsboard.server.common.data.CacheConstants.OTA_PACKAGE_CACHE;
  24 +import static org.thingsboard.server.common.data.CacheConstants.OTA_PACKAGE_DATA_CACHE;
24 25
25 @Service 26 @Service
26 @ConditionalOnProperty(prefix = "cache", value = "type", havingValue = "caffeine", matchIfMissing = true) 27 @ConditionalOnProperty(prefix = "cache", value = "type", havingValue = "caffeine", matchIfMissing = true)
@@ -36,7 +37,7 @@ public class CaffeineOtaPackageCache implements OtaPackageDataCache { @@ -36,7 +37,7 @@ public class CaffeineOtaPackageCache implements OtaPackageDataCache {
36 37
37 @Override 38 @Override
38 public byte[] get(String key, int chunkSize, int chunk) { 39 public byte[] get(String key, int chunkSize, int chunk) {
39 - byte[] data = cacheManager.getCache(OTA_PACKAGE_CACHE).get(key, byte[].class); 40 + byte[] data = cacheManager.getCache(OTA_PACKAGE_DATA_CACHE).get(key, byte[].class);
40 41
41 if (chunkSize < 1) { 42 if (chunkSize < 1) {
42 return data; 43 return data;
@@ -58,11 +59,11 @@ public class CaffeineOtaPackageCache implements OtaPackageDataCache { @@ -58,11 +59,11 @@ public class CaffeineOtaPackageCache implements OtaPackageDataCache {
58 59
59 @Override 60 @Override
60 public void put(String key, byte[] value) { 61 public void put(String key, byte[] value) {
61 - cacheManager.getCache(OTA_PACKAGE_CACHE).putIfAbsent(key, value); 62 + cacheManager.getCache(OTA_PACKAGE_DATA_CACHE).putIfAbsent(key, value);
62 } 63 }
63 64
64 @Override 65 @Override
65 public void evict(String key) { 66 public void evict(String key) {
66 - cacheManager.getCache(OTA_PACKAGE_CACHE).evict(key); 67 + cacheManager.getCache(OTA_PACKAGE_DATA_CACHE).evict(key);
67 } 68 }
68 } 69 }
@@ -22,6 +22,7 @@ import org.springframework.data.redis.connection.RedisConnectionFactory; @@ -22,6 +22,7 @@ import org.springframework.data.redis.connection.RedisConnectionFactory;
22 import org.springframework.stereotype.Service; 22 import org.springframework.stereotype.Service;
23 23
24 import static org.thingsboard.server.common.data.CacheConstants.OTA_PACKAGE_CACHE; 24 import static org.thingsboard.server.common.data.CacheConstants.OTA_PACKAGE_CACHE;
  25 +import static org.thingsboard.server.common.data.CacheConstants.OTA_PACKAGE_DATA_CACHE;
25 26
26 @Service 27 @Service
27 @ConditionalOnProperty(prefix = "cache", value = "type", havingValue = "redis") 28 @ConditionalOnProperty(prefix = "cache", value = "type", havingValue = "redis")
@@ -63,6 +64,6 @@ public class RedisOtaPackageDataCache implements OtaPackageDataCache { @@ -63,6 +64,6 @@ public class RedisOtaPackageDataCache implements OtaPackageDataCache {
63 } 64 }
64 65
65 private byte[] toOtaPackageCacheKey(String key) { 66 private byte[] toOtaPackageCacheKey(String key) {
66 - return String.format("%s::%s", OTA_PACKAGE_CACHE, key).getBytes(); 67 + return String.format("%s::%s", OTA_PACKAGE_DATA_CACHE, key).getBytes();
67 } 68 }
68 } 69 }
@@ -30,4 +30,5 @@ public class CacheConstants { @@ -30,4 +30,5 @@ public class CacheConstants {
30 public static final String ATTRIBUTES_CACHE = "attributes"; 30 public static final String ATTRIBUTES_CACHE = "attributes";
31 public static final String TOKEN_OUTDATAGE_TIME_CACHE = "tokensOutdatageTime"; 31 public static final String TOKEN_OUTDATAGE_TIME_CACHE = "tokensOutdatageTime";
32 public static final String OTA_PACKAGE_CACHE = "otaPackages"; 32 public static final String OTA_PACKAGE_CACHE = "otaPackages";
  33 + public static final String OTA_PACKAGE_DATA_CACHE = "otaPackagesData";
33 } 34 }
@@ -221,8 +221,6 @@ public class BaseOtaPackageService implements OtaPackageService { @@ -221,8 +221,6 @@ public class BaseOtaPackageService implements OtaPackageService {
221 @Override 221 @Override
222 protected void validateUpdate(TenantId tenantId, OtaPackageInfo otaPackage) { 222 protected void validateUpdate(TenantId tenantId, OtaPackageInfo otaPackage) {
223 OtaPackageInfo otaPackageOld = otaPackageInfoDao.findById(tenantId, otaPackage.getUuidId()); 223 OtaPackageInfo otaPackageOld = otaPackageInfoDao.findById(tenantId, otaPackage.getUuidId());
224 -  
225 - validateUpdateDeviceProfile(otaPackage, otaPackageOld);  
226 BaseOtaPackageService.validateUpdate(otaPackage, otaPackageOld); 224 BaseOtaPackageService.validateUpdate(otaPackage, otaPackageOld);
227 } 225 }
228 }; 226 };
@@ -261,7 +259,6 @@ public class BaseOtaPackageService implements OtaPackageService { @@ -261,7 +259,6 @@ public class BaseOtaPackageService implements OtaPackageService {
261 protected void validateUpdate(TenantId tenantId, OtaPackage otaPackage) { 259 protected void validateUpdate(TenantId tenantId, OtaPackage otaPackage) {
262 OtaPackage otaPackageOld = otaPackageDao.findById(tenantId, otaPackage.getUuidId()); 260 OtaPackage otaPackageOld = otaPackageDao.findById(tenantId, otaPackage.getUuidId());
263 261
264 - validateUpdateDeviceProfile(otaPackage, otaPackageOld);  
265 BaseOtaPackageService.validateUpdate(otaPackage, otaPackageOld); 262 BaseOtaPackageService.validateUpdate(otaPackage, otaPackageOld);
266 263
267 if (otaPackageOld.getData() != null && !otaPackageOld.getData().equals(otaPackage.getData())) { 264 if (otaPackageOld.getData() != null && !otaPackageOld.getData().equals(otaPackage.getData())) {
@@ -270,14 +267,6 @@ public class BaseOtaPackageService implements OtaPackageService { @@ -270,14 +267,6 @@ public class BaseOtaPackageService implements OtaPackageService {
270 } 267 }
271 }; 268 };
272 269
273 - private void validateUpdateDeviceProfile(OtaPackageInfo otaPackage, OtaPackageInfo otaPackageOld) {  
274 - if (otaPackageOld.getDeviceProfileId() != null && !otaPackageOld.getDeviceProfileId().equals(otaPackage.getDeviceProfileId())) {  
275 - if (otaPackageInfoDao.isOtaPackageUsed(otaPackageOld.getId(), otaPackage.getType(), otaPackageOld.getDeviceProfileId())) {  
276 - throw new DataValidationException("Can`t update deviceProfileId because otaPackage is already in use!");  
277 - }  
278 - }  
279 - }  
280 -  
281 private static void validateUpdate(OtaPackageInfo otaPackage, OtaPackageInfo otaPackageOld) { 270 private static void validateUpdate(OtaPackageInfo otaPackage, OtaPackageInfo otaPackageOld) {
282 if (!otaPackageOld.getType().equals(otaPackage.getType())) { 271 if (!otaPackageOld.getType().equals(otaPackage.getType())) {
283 throw new DataValidationException("Updating type is prohibited!"); 272 throw new DataValidationException("Updating type is prohibited!");
@@ -291,6 +280,10 @@ public class BaseOtaPackageService implements OtaPackageService { @@ -291,6 +280,10 @@ public class BaseOtaPackageService implements OtaPackageService {
291 throw new DataValidationException("Updating otaPackage version is prohibited!"); 280 throw new DataValidationException("Updating otaPackage version is prohibited!");
292 } 281 }
293 282
  283 + if (!otaPackageOld.getDeviceProfileId().equals(otaPackage.getDeviceProfileId())) {
  284 + throw new DataValidationException("Updating otaPackage deviceProfile is prohibited!");
  285 + }
  286 +
294 if (otaPackageOld.getFileName() != null && !otaPackageOld.getFileName().equals(otaPackage.getFileName())) { 287 if (otaPackageOld.getFileName() != null && !otaPackageOld.getFileName().equals(otaPackage.getFileName())) {
295 throw new DataValidationException("Updating otaPackage file name is prohibited!"); 288 throw new DataValidationException("Updating otaPackage file name is prohibited!");
296 } 289 }
@@ -408,7 +408,7 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { @@ -408,7 +408,7 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest {
408 } 408 }
409 409
410 @Test 410 @Test
411 - public void testUpdateDeviceProfileIdWithReferenceByDevice() { 411 + public void testUpdateDeviceProfileId() {
412 OtaPackage firmware = new OtaPackage(); 412 OtaPackage firmware = new OtaPackage();
413 firmware.setTenantId(tenantId); 413 firmware.setTenantId(tenantId);
414 firmware.setDeviceProfileId(deviceProfileId); 414 firmware.setDeviceProfileId(deviceProfileId);
@@ -422,20 +422,12 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { @@ -422,20 +422,12 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest {
422 firmware.setData(DATA); 422 firmware.setData(DATA);
423 OtaPackage savedFirmware = otaPackageService.saveOtaPackage(firmware); 423 OtaPackage savedFirmware = otaPackageService.saveOtaPackage(firmware);
424 424
425 - Device device = new Device();  
426 - device.setTenantId(tenantId);  
427 - device.setName("My device");  
428 - device.setDeviceProfileId(deviceProfileId);  
429 - device.setFirmwareId(savedFirmware.getId());  
430 - Device savedDevice = deviceService.saveDevice(device);  
431 -  
432 try { 425 try {
433 thrown.expect(DataValidationException.class); 426 thrown.expect(DataValidationException.class);
434 - thrown.expectMessage("Can`t update deviceProfileId because otaPackage is already in use!"); 427 + thrown.expectMessage("Updating otaPackage deviceProfile is prohibited!");
435 savedFirmware.setDeviceProfileId(null); 428 savedFirmware.setDeviceProfileId(null);
436 otaPackageService.saveOtaPackage(savedFirmware); 429 otaPackageService.saveOtaPackage(savedFirmware);
437 } finally { 430 } finally {
438 - deviceService.deleteDevice(tenantId, savedDevice.getId());  
439 otaPackageService.deleteOtaPackage(tenantId, savedFirmware.getId()); 431 otaPackageService.deleteOtaPackage(tenantId, savedFirmware.getId());
440 } 432 }
441 } 433 }
@@ -472,38 +464,6 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest { @@ -472,38 +464,6 @@ public abstract class BaseOtaPackageServiceTest extends AbstractServiceTest {
472 } 464 }
473 465
474 @Test 466 @Test
475 - public void testUpdateDeviceProfileIdWithReferenceByDeviceProfile() {  
476 - DeviceProfile deviceProfile = this.createDeviceProfile(tenantId, "Test Device Profile");  
477 - DeviceProfile savedDeviceProfile = deviceProfileService.saveDeviceProfile(deviceProfile);  
478 -  
479 - OtaPackage firmware = new OtaPackage();  
480 - firmware.setTenantId(tenantId);  
481 - firmware.setDeviceProfileId(savedDeviceProfile.getId());  
482 - firmware.setType(FIRMWARE);  
483 - firmware.setTitle(TITLE);  
484 - firmware.setVersion(VERSION);  
485 - firmware.setFileName(FILE_NAME);  
486 - firmware.setContentType(CONTENT_TYPE);  
487 - firmware.setChecksumAlgorithm(CHECKSUM_ALGORITHM);  
488 - firmware.setChecksum(CHECKSUM);  
489 - firmware.setData(DATA);  
490 - OtaPackage savedFirmware = otaPackageService.saveOtaPackage(firmware);  
491 -  
492 - savedDeviceProfile.setFirmwareId(savedFirmware.getId());  
493 - deviceProfileService.saveDeviceProfile(savedDeviceProfile);  
494 -  
495 - try {  
496 - thrown.expect(DataValidationException.class);  
497 - thrown.expectMessage("Can`t update deviceProfileId because otaPackage is already in use!");  
498 - savedFirmware.setDeviceProfileId(null);  
499 - otaPackageService.saveOtaPackage(savedFirmware);  
500 - } finally {  
501 - deviceProfileService.deleteDeviceProfile(tenantId, savedDeviceProfile.getId());  
502 - otaPackageService.deleteOtaPackage(tenantId, savedFirmware.getId());  
503 - }  
504 - }  
505 -  
506 - @Test  
507 public void testFindFirmwareById() { 467 public void testFindFirmwareById() {
508 OtaPackage firmware = new OtaPackage(); 468 OtaPackage firmware = new OtaPackage();
509 firmware.setTenantId(tenantId); 469 firmware.setTenantId(tenantId);
@@ -39,6 +39,9 @@ caffeine.specs.deviceProfiles.maxSize=100000 @@ -39,6 +39,9 @@ caffeine.specs.deviceProfiles.maxSize=100000
39 caffeine.specs.otaPackages.timeToLiveInMinutes=1440 39 caffeine.specs.otaPackages.timeToLiveInMinutes=1440
40 caffeine.specs.otaPackages.maxSize=100000 40 caffeine.specs.otaPackages.maxSize=100000
41 41
  42 +caffeine.specs.otaPackagesData.timeToLiveInMinutes=1440
  43 +caffeine.specs.otaPackagesData.maxSize=100000
  44 +
42 caffeine.specs.edges.timeToLiveInMinutes=1440 45 caffeine.specs.edges.timeToLiveInMinutes=1440
43 caffeine.specs.edges.maxSize=100000 46 caffeine.specs.edges.maxSize=100000
44 47