asset profile upgrade improvements

This commit is contained in:
YevhenBondarenko 2022-11-09 01:18:01 +01:00
parent 0849aa722f
commit 71d26ba18b
2 changed files with 30 additions and 10 deletions

View File

@ -41,6 +41,7 @@ import org.thingsboard.server.dao.device.DeviceProfileService;
import org.thingsboard.server.dao.device.DeviceService; import org.thingsboard.server.dao.device.DeviceService;
import org.thingsboard.server.dao.model.sql.TbPair; import org.thingsboard.server.dao.model.sql.TbPair;
import org.thingsboard.server.dao.queue.QueueService; import org.thingsboard.server.dao.queue.QueueService;
import org.thingsboard.server.dao.sql.tenant.TenantRepository;
import org.thingsboard.server.dao.tenant.TenantService; import org.thingsboard.server.dao.tenant.TenantService;
import org.thingsboard.server.dao.usagerecord.ApiUsageStateService; import org.thingsboard.server.dao.usagerecord.ApiUsageStateService;
import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration; import org.thingsboard.server.queue.settings.TbRuleEngineQueueConfiguration;
@ -111,6 +112,9 @@ public class SqlDatabaseUpgradeService implements DatabaseEntitiesUpgradeService
@Autowired @Autowired
private TenantService tenantService; private TenantService tenantService;
@Autowired
private TenantRepository tenantRepository;
@Autowired @Autowired
private DeviceService deviceService; private DeviceService deviceService;
@ -628,29 +632,41 @@ public class SqlDatabaseUpgradeService implements DatabaseEntitiesUpgradeService
PageLink pageLink = new PageLink(1000); PageLink pageLink = new PageLink(1000);
PageData<TbPair<UUID, String>> pageData; PageData<TbPair<UUID, String>> pageData;
List<ListenableFuture<?>> futures = new ArrayList<>(); List<ListenableFuture<?>> futures = new ArrayList<>();
Set<TenantId> tenants = new HashSet<>(); Set<UUID> tenants = new HashSet<>();
do { do {
pageData = assetDao.getAllAssetTypes(pageLink); pageData = assetDao.getAllAssetTypes(pageLink);
for (TbPair<UUID, String> pair : pageData.getData()) { for (TbPair<UUID, String> pair : pageData.getData()) {
TenantId tenantId = new TenantId(pair.getFirst()); TenantId tenantId = new TenantId(pair.getFirst());
String assetType = pair.getSecond(); String assetType = pair.getSecond();
if (tenants.add(tenantId)) { if (tenants.add(pair.getFirst())) {
try { futures.add(dbUpgradeExecutor.submit(() -> {
futures.add(dbUpgradeExecutor.submit(() -> try {
assetProfileService.createDefaultAssetProfile(tenantId))); assetProfileService.createDefaultAssetProfile(tenantId);
} catch (Exception e) {} } catch (Exception e) {}
}));
} }
if (!"default".equals(assetType)) { if (!"default".equals(assetType)) {
try { futures.add(dbUpgradeExecutor.submit(() -> {
futures.add(dbUpgradeExecutor.submit(() -> try {
assetProfileService.findOrCreateAssetProfile(tenantId, assetType))); assetProfileService.findOrCreateAssetProfile(tenantId, assetType);
} catch (Exception e) {} } catch (Exception e) {}
}));
} }
} }
pageLink = pageLink.nextPageLink(); pageLink = pageLink.nextPageLink();
} while (pageData.hasNext()); } while (pageData.hasNext());
List<UUID> tenantsWithoutProfiles = tenantRepository.getIdsNotIn(tenants);
tenantsWithoutProfiles.forEach(uuid ->
futures.add(dbUpgradeExecutor.submit(() -> {
try {
assetProfileService.createDefaultAssetProfile(TenantId.fromUUID(uuid));
} catch (Exception e) {}
}))
);
Futures.allAsList(futures).get(); Futures.allAsList(futures).get();
log.info("Updating asset profiles..."); log.info("Updating asset profiles...");

View File

@ -24,6 +24,7 @@ import org.thingsboard.server.dao.model.sql.TenantEntity;
import org.thingsboard.server.dao.model.sql.TenantInfoEntity; import org.thingsboard.server.dao.model.sql.TenantInfoEntity;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
/** /**
@ -54,4 +55,7 @@ public interface TenantRepository extends JpaRepository<TenantEntity, UUID> {
@Query("SELECT t.id FROM TenantEntity t where t.tenantProfileId = :tenantProfileId") @Query("SELECT t.id FROM TenantEntity t where t.tenantProfileId = :tenantProfileId")
List<UUID> findTenantIdsByTenantProfileId(@Param("tenantProfileId") UUID tenantProfileId); List<UUID> findTenantIdsByTenantProfileId(@Param("tenantProfileId") UUID tenantProfileId);
@Query("SELECT t.id FROM TenantEntity t WHERE t.id NOT IN :ids")
List<UUID> getIdsNotIn(@Param("ids")Set<UUID> ids);
} }