AI rule node: optimize bulk deletion by tenant ID; remove application events
This commit is contained in:
parent
cde8bd1c93
commit
41257b6138
@ -99,7 +99,7 @@ public class EntityStateSourcingListener {
|
|||||||
case ASSET -> {
|
case ASSET -> {
|
||||||
onAssetUpdate(event.getEntity(), event.getOldEntity());
|
onAssetUpdate(event.getEntity(), event.getOldEntity());
|
||||||
}
|
}
|
||||||
case ASSET_PROFILE, ENTITY_VIEW, NOTIFICATION_RULE, AI_MODEL_SETTINGS -> {
|
case ASSET_PROFILE, ENTITY_VIEW, NOTIFICATION_RULE -> {
|
||||||
tbClusterService.broadcastEntityStateChangeEvent(tenantId, entityId, lifecycleEvent);
|
tbClusterService.broadcastEntityStateChangeEvent(tenantId, entityId, lifecycleEvent);
|
||||||
}
|
}
|
||||||
case RULE_CHAIN -> {
|
case RULE_CHAIN -> {
|
||||||
@ -164,7 +164,7 @@ public class EntityStateSourcingListener {
|
|||||||
Asset asset = (Asset) event.getEntity();
|
Asset asset = (Asset) event.getEntity();
|
||||||
tbClusterService.onAssetDeleted(tenantId, asset, null);
|
tbClusterService.onAssetDeleted(tenantId, asset, null);
|
||||||
}
|
}
|
||||||
case ASSET_PROFILE, ENTITY_VIEW, CUSTOMER, EDGE, NOTIFICATION_RULE, AI_MODEL_SETTINGS -> {
|
case ASSET_PROFILE, ENTITY_VIEW, CUSTOMER, EDGE, NOTIFICATION_RULE -> {
|
||||||
tbClusterService.broadcastEntityStateChangeEvent(tenantId, entityId, ComponentLifecycleEvent.DELETED);
|
tbClusterService.broadcastEntityStateChangeEvent(tenantId, entityId, ComponentLifecycleEvent.DELETED);
|
||||||
}
|
}
|
||||||
case NOTIFICATION_REQUEST -> {
|
case NOTIFICATION_REQUEST -> {
|
||||||
|
|||||||
@ -589,7 +589,6 @@ public class DefaultTbClusterService implements TbClusterService {
|
|||||||
EntityType.ENTITY_VIEW,
|
EntityType.ENTITY_VIEW,
|
||||||
EntityType.NOTIFICATION_RULE,
|
EntityType.NOTIFICATION_RULE,
|
||||||
EntityType.CALCULATED_FIELD,
|
EntityType.CALCULATED_FIELD,
|
||||||
EntityType.AI_MODEL_SETTINGS,
|
|
||||||
EntityType.TENANT_PROFILE,
|
EntityType.TENANT_PROFILE,
|
||||||
EntityType.DEVICE_PROFILE,
|
EntityType.DEVICE_PROFILE,
|
||||||
EntityType.ASSET_PROFILE,
|
EntityType.ASSET_PROFILE,
|
||||||
|
|||||||
@ -22,6 +22,7 @@ import org.thingsboard.server.dao.ExportableEntityDao;
|
|||||||
import org.thingsboard.server.dao.TenantEntityDao;
|
import org.thingsboard.server.dao.TenantEntityDao;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public interface AiModelSettingsDao extends TenantEntityDao<AiModelSettings>, ExportableEntityDao<AiModelSettingsId, AiModelSettings> {
|
public interface AiModelSettingsDao extends TenantEntityDao<AiModelSettings>, ExportableEntityDao<AiModelSettingsId, AiModelSettings> {
|
||||||
|
|
||||||
@ -29,7 +30,7 @@ public interface AiModelSettingsDao extends TenantEntityDao<AiModelSettings>, Ex
|
|||||||
|
|
||||||
boolean deleteById(TenantId tenantId, AiModelSettingsId settingsId);
|
boolean deleteById(TenantId tenantId, AiModelSettingsId settingsId);
|
||||||
|
|
||||||
int deleteByTenantId(TenantId tenantId);
|
Set<AiModelSettingsId> deleteByTenantId(TenantId tenantId);
|
||||||
|
|
||||||
boolean deleteByTenantIdAndId(TenantId tenantId, AiModelSettingsId settingsId);
|
boolean deleteByTenantIdAndId(TenantId tenantId, AiModelSettingsId settingsId);
|
||||||
|
|
||||||
|
|||||||
@ -29,14 +29,12 @@ import org.thingsboard.server.common.data.id.TenantId;
|
|||||||
import org.thingsboard.server.common.data.page.PageData;
|
import org.thingsboard.server.common.data.page.PageData;
|
||||||
import org.thingsboard.server.common.data.page.PageLink;
|
import org.thingsboard.server.common.data.page.PageLink;
|
||||||
import org.thingsboard.server.dao.entity.CachedVersionedEntityService;
|
import org.thingsboard.server.dao.entity.CachedVersionedEntityService;
|
||||||
import org.thingsboard.server.dao.eventsourcing.DeleteEntityEvent;
|
|
||||||
import org.thingsboard.server.dao.eventsourcing.SaveEntityEvent;
|
|
||||||
import org.thingsboard.server.dao.model.sql.AiModelSettingsEntity;
|
import org.thingsboard.server.dao.model.sql.AiModelSettingsEntity;
|
||||||
import org.thingsboard.server.dao.service.DataValidator;
|
import org.thingsboard.server.dao.service.DataValidator;
|
||||||
import org.thingsboard.server.dao.sql.JpaExecutorService;
|
import org.thingsboard.server.dao.sql.JpaExecutorService;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import static org.thingsboard.server.dao.service.Validator.validatePageLink;
|
import static org.thingsboard.server.dao.service.Validator.validatePageLink;
|
||||||
|
|
||||||
@ -65,7 +63,7 @@ class AiModelSettingsServiceImpl extends CachedVersionedEntityService<AiModelSet
|
|||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public AiModelSettings save(AiModelSettings settings) {
|
public AiModelSettings save(AiModelSettings settings) {
|
||||||
AiModelSettings oldSettings = aiModelSettingsValidator.validate(settings, AiModelSettings::getTenantId);
|
aiModelSettingsValidator.validate(settings, AiModelSettings::getTenantId);
|
||||||
|
|
||||||
AiModelSettings savedSettings;
|
AiModelSettings savedSettings;
|
||||||
try {
|
try {
|
||||||
@ -77,15 +75,6 @@ class AiModelSettingsServiceImpl extends CachedVersionedEntityService<AiModelSet
|
|||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
|
||||||
eventPublisher.publishEvent(SaveEntityEvent.builder()
|
|
||||||
.tenantId(savedSettings.getTenantId())
|
|
||||||
.entity(savedSettings)
|
|
||||||
.oldEntity(oldSettings)
|
|
||||||
.entityId(savedSettings.getId())
|
|
||||||
.created(oldSettings == null)
|
|
||||||
.broadcastEvent(true)
|
|
||||||
.build());
|
|
||||||
|
|
||||||
var cacheKey = AiModelSettingsCacheKey.of(savedSettings.getTenantId(), savedSettings.getId());
|
var cacheKey = AiModelSettingsCacheKey.of(savedSettings.getTenantId(), savedSettings.getId());
|
||||||
publishEvictEvent(new AiModelSettingsCacheEvictEvent.Saved(cacheKey, savedSettings));
|
publishEvictEvent(new AiModelSettingsCacheEvictEvent.Saved(cacheKey, savedSettings));
|
||||||
|
|
||||||
@ -138,13 +127,8 @@ class AiModelSettingsServiceImpl extends CachedVersionedEntityService<AiModelSet
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean deleteByTenantIdAndIdInternal(TenantId tenantId, AiModelSettingsId settingsId) {
|
private boolean deleteByTenantIdAndIdInternal(TenantId tenantId, AiModelSettingsId settingsId) {
|
||||||
Optional<AiModelSettings> toDeleteOpt = aiModelSettingsDao.findByTenantIdAndId(tenantId, settingsId);
|
|
||||||
if (toDeleteOpt.isEmpty()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
boolean deleted = aiModelSettingsDao.deleteByTenantIdAndId(tenantId, settingsId);
|
boolean deleted = aiModelSettingsDao.deleteByTenantIdAndId(tenantId, settingsId);
|
||||||
if (deleted) {
|
if (deleted) {
|
||||||
publishDeleteEvent(toDeleteOpt.get());
|
|
||||||
publishEvictEvent(new AiModelSettingsCacheEvictEvent.Deleted(AiModelSettingsCacheKey.of(tenantId, settingsId)));
|
publishEvictEvent(new AiModelSettingsCacheEvictEvent.Deleted(AiModelSettingsCacheKey.of(tenantId, settingsId)));
|
||||||
}
|
}
|
||||||
return deleted;
|
return deleted;
|
||||||
@ -153,25 +137,8 @@ class AiModelSettingsServiceImpl extends CachedVersionedEntityService<AiModelSet
|
|||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public void deleteByTenantId(TenantId tenantId) {
|
public void deleteByTenantId(TenantId tenantId) {
|
||||||
List<AiModelSettings> toDelete = aiModelSettingsDao.findAllByTenantId(tenantId, new PageLink(Integer.MAX_VALUE)).getData();
|
Set<AiModelSettingsId> deleted = aiModelSettingsDao.deleteByTenantId(tenantId);
|
||||||
if (toDelete.isEmpty()) {
|
deleted.forEach(id -> publishEvictEvent(new AiModelSettingsCacheEvictEvent.Deleted(AiModelSettingsCacheKey.of(tenantId, id))));
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
aiModelSettingsDao.deleteByTenantId(tenantId);
|
|
||||||
|
|
||||||
toDelete.forEach(settings -> {
|
|
||||||
publishDeleteEvent(settings);
|
|
||||||
publishEvictEvent(new AiModelSettingsCacheEvictEvent.Deleted(AiModelSettingsCacheKey.of(settings.getTenantId(), settings.getId())));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void publishDeleteEvent(AiModelSettings settings) {
|
|
||||||
eventPublisher.publishEvent(DeleteEntityEvent.builder()
|
|
||||||
.tenantId(settings.getTenantId())
|
|
||||||
.entityId(settings.getId())
|
|
||||||
.entity(settings)
|
|
||||||
.build());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -73,8 +73,13 @@ interface AiModelSettingsRepository extends JpaRepository<AiModelSettingsEntity,
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@Modifying
|
@Modifying
|
||||||
@Query("DELETE FROM AiModelSettingsEntity ai_model WHERE ai_model.tenantId = :tenantId")
|
@Query(value = """
|
||||||
int deleteByTenantId(@Param("tenantId") UUID tenantId);
|
DELETE FROM ai_model_settings
|
||||||
|
WHERE tenant_id = :tenantId
|
||||||
|
RETURNING id
|
||||||
|
""", nativeQuery = true
|
||||||
|
)
|
||||||
|
Set<UUID> deleteByTenantId(@Param("tenantId") UUID tenantId);
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@Modifying
|
@Modifying
|
||||||
|
|||||||
@ -39,6 +39,8 @@ import java.util.Optional;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import static java.util.stream.Collectors.toSet;
|
||||||
|
|
||||||
@SqlDao
|
@SqlDao
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@ -108,8 +110,10 @@ class JpaAiModelSettingsDao extends JpaAbstractDao<AiModelSettingsEntity, AiMode
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int deleteByTenantId(TenantId tenantId) {
|
public Set<AiModelSettingsId> deleteByTenantId(TenantId tenantId) {
|
||||||
return aiModelSettingsRepository.deleteByTenantId(tenantId.getId());
|
return aiModelSettingsRepository.deleteByTenantId(tenantId.getId()).stream()
|
||||||
|
.map(AiModelSettingsId::new)
|
||||||
|
.collect(toSet());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user