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 -> {
|
||||
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);
|
||||
}
|
||||
case RULE_CHAIN -> {
|
||||
@ -164,7 +164,7 @@ public class EntityStateSourcingListener {
|
||||
Asset asset = (Asset) event.getEntity();
|
||||
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);
|
||||
}
|
||||
case NOTIFICATION_REQUEST -> {
|
||||
|
||||
@ -589,7 +589,6 @@ public class DefaultTbClusterService implements TbClusterService {
|
||||
EntityType.ENTITY_VIEW,
|
||||
EntityType.NOTIFICATION_RULE,
|
||||
EntityType.CALCULATED_FIELD,
|
||||
EntityType.AI_MODEL_SETTINGS,
|
||||
EntityType.TENANT_PROFILE,
|
||||
EntityType.DEVICE_PROFILE,
|
||||
EntityType.ASSET_PROFILE,
|
||||
|
||||
@ -22,6 +22,7 @@ import org.thingsboard.server.dao.ExportableEntityDao;
|
||||
import org.thingsboard.server.dao.TenantEntityDao;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
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);
|
||||
|
||||
int deleteByTenantId(TenantId tenantId);
|
||||
Set<AiModelSettingsId> deleteByTenantId(TenantId tenantId);
|
||||
|
||||
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.PageLink;
|
||||
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.service.DataValidator;
|
||||
import org.thingsboard.server.dao.sql.JpaExecutorService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.thingsboard.server.dao.service.Validator.validatePageLink;
|
||||
|
||||
@ -65,7 +63,7 @@ class AiModelSettingsServiceImpl extends CachedVersionedEntityService<AiModelSet
|
||||
@Override
|
||||
@Transactional
|
||||
public AiModelSettings save(AiModelSettings settings) {
|
||||
AiModelSettings oldSettings = aiModelSettingsValidator.validate(settings, AiModelSettings::getTenantId);
|
||||
aiModelSettingsValidator.validate(settings, AiModelSettings::getTenantId);
|
||||
|
||||
AiModelSettings savedSettings;
|
||||
try {
|
||||
@ -77,15 +75,6 @@ class AiModelSettingsServiceImpl extends CachedVersionedEntityService<AiModelSet
|
||||
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());
|
||||
publishEvictEvent(new AiModelSettingsCacheEvictEvent.Saved(cacheKey, savedSettings));
|
||||
|
||||
@ -138,13 +127,8 @@ class AiModelSettingsServiceImpl extends CachedVersionedEntityService<AiModelSet
|
||||
}
|
||||
|
||||
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);
|
||||
if (deleted) {
|
||||
publishDeleteEvent(toDeleteOpt.get());
|
||||
publishEvictEvent(new AiModelSettingsCacheEvictEvent.Deleted(AiModelSettingsCacheKey.of(tenantId, settingsId)));
|
||||
}
|
||||
return deleted;
|
||||
@ -153,25 +137,8 @@ class AiModelSettingsServiceImpl extends CachedVersionedEntityService<AiModelSet
|
||||
@Override
|
||||
@Transactional
|
||||
public void deleteByTenantId(TenantId tenantId) {
|
||||
List<AiModelSettings> toDelete = aiModelSettingsDao.findAllByTenantId(tenantId, new PageLink(Integer.MAX_VALUE)).getData();
|
||||
if (toDelete.isEmpty()) {
|
||||
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());
|
||||
Set<AiModelSettingsId> deleted = aiModelSettingsDao.deleteByTenantId(tenantId);
|
||||
deleted.forEach(id -> publishEvictEvent(new AiModelSettingsCacheEvictEvent.Deleted(AiModelSettingsCacheKey.of(tenantId, id))));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -73,8 +73,13 @@ interface AiModelSettingsRepository extends JpaRepository<AiModelSettingsEntity,
|
||||
|
||||
@Transactional
|
||||
@Modifying
|
||||
@Query("DELETE FROM AiModelSettingsEntity ai_model WHERE ai_model.tenantId = :tenantId")
|
||||
int deleteByTenantId(@Param("tenantId") UUID tenantId);
|
||||
@Query(value = """
|
||||
DELETE FROM ai_model_settings
|
||||
WHERE tenant_id = :tenantId
|
||||
RETURNING id
|
||||
""", nativeQuery = true
|
||||
)
|
||||
Set<UUID> deleteByTenantId(@Param("tenantId") UUID tenantId);
|
||||
|
||||
@Transactional
|
||||
@Modifying
|
||||
|
||||
@ -39,6 +39,8 @@ import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import static java.util.stream.Collectors.toSet;
|
||||
|
||||
@SqlDao
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
@ -108,8 +110,10 @@ class JpaAiModelSettingsDao extends JpaAbstractDao<AiModelSettingsEntity, AiMode
|
||||
}
|
||||
|
||||
@Override
|
||||
public int deleteByTenantId(TenantId tenantId) {
|
||||
return aiModelSettingsRepository.deleteByTenantId(tenantId.getId());
|
||||
public Set<AiModelSettingsId> deleteByTenantId(TenantId tenantId) {
|
||||
return aiModelSettingsRepository.deleteByTenantId(tenantId.getId()).stream()
|
||||
.map(AiModelSettingsId::new)
|
||||
.collect(toSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user