Submit cleanup tasks on DeleteEntityEvent
This commit is contained in:
parent
e5311984bb
commit
1d5b35a5aa
@ -0,0 +1,40 @@
|
|||||||
|
/**
|
||||||
|
* Copyright © 2016-2024 The Thingsboard Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.thingsboard.server.service.housekeeper.processor;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.thingsboard.server.dao.alarm.AlarmService;
|
||||||
|
import org.thingsboard.server.dao.housekeeper.data.HousekeeperTask;
|
||||||
|
import org.thingsboard.server.dao.housekeeper.data.HousekeeperTaskType;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class EntityAlarmsDeletionTaskProcessor implements HousekeeperTaskProcessor {
|
||||||
|
|
||||||
|
private final AlarmService alarmService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void process(HousekeeperTask task) throws Exception {
|
||||||
|
alarmService.deleteEntityAlarmRecords(task.getTenantId(), task.getEntityId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HousekeeperTaskType getTaskType() {
|
||||||
|
return HousekeeperTaskType.DELETE_ENTITY_ALARMS;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -106,7 +106,7 @@ public interface AlarmService extends EntityDaoService {
|
|||||||
|
|
||||||
PageData<AlarmId> findAlarmIdsByAssigneeId(TenantId tenantId, UserId userId, PageLink pageLink);
|
PageData<AlarmId> findAlarmIdsByAssigneeId(TenantId tenantId, UserId userId, PageLink pageLink);
|
||||||
|
|
||||||
void deleteEntityAlarmRelations(TenantId tenantId, EntityId entityId);
|
void deleteEntityAlarmRecords(TenantId tenantId, EntityId entityId);
|
||||||
|
|
||||||
void deleteEntityAlarmRecordsByTenantId(TenantId tenantId);
|
void deleteEntityAlarmRecordsByTenantId(TenantId tenantId);
|
||||||
|
|
||||||
|
|||||||
@ -189,7 +189,6 @@ public class BaseAlarmService extends AbstractCachedEntityService<TenantId, Page
|
|||||||
return AlarmApiCallResult.builder().successful(false).build();
|
return AlarmApiCallResult.builder().successful(false).build();
|
||||||
} else {
|
} else {
|
||||||
var propagationIds = getPropagationEntityIdsList(alarm);
|
var propagationIds = getPropagationEntityIdsList(alarm);
|
||||||
deleteEntityRelations(tenantId, alarm.getId());
|
|
||||||
alarmDao.removeById(tenantId, alarm.getUuidId());
|
alarmDao.removeById(tenantId, alarm.getUuidId());
|
||||||
eventPublisher.publishEvent(DeleteEntityEvent.builder().tenantId(tenantId)
|
eventPublisher.publishEvent(DeleteEntityEvent.builder().tenantId(tenantId)
|
||||||
.entityId(alarmId).entity(alarm).build());
|
.entityId(alarmId).entity(alarm).build());
|
||||||
@ -323,7 +322,7 @@ public class BaseAlarmService extends AbstractCachedEntityService<TenantId, Page
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deleteEntityAlarmRelations(TenantId tenantId, EntityId entityId) {
|
public void deleteEntityAlarmRecords(TenantId tenantId, EntityId entityId) {
|
||||||
log.trace("Executing deleteEntityAlarms [{}]", entityId);
|
log.trace("Executing deleteEntityAlarms [{}]", entityId);
|
||||||
alarmDao.deleteEntityAlarmRecords(tenantId, entityId);
|
alarmDao.deleteEntityAlarmRecords(tenantId, entityId);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -192,7 +192,6 @@ public class AssetProfileServiceImpl extends AbstractCachedEntityService<AssetPr
|
|||||||
private void removeAssetProfile(TenantId tenantId, AssetProfile assetProfile) {
|
private void removeAssetProfile(TenantId tenantId, AssetProfile assetProfile) {
|
||||||
AssetProfileId assetProfileId = assetProfile.getId();
|
AssetProfileId assetProfileId = assetProfile.getId();
|
||||||
try {
|
try {
|
||||||
deleteEntityRelations(tenantId, assetProfileId);
|
|
||||||
assetProfileDao.removeById(tenantId, assetProfileId.getId());
|
assetProfileDao.removeById(tenantId, assetProfileId.getId());
|
||||||
publishEvictEvent(new AssetProfileEvictEvent(assetProfile.getTenantId(), assetProfile.getName(),
|
publishEvictEvent(new AssetProfileEvictEvent(assetProfile.getTenantId(), assetProfile.getName(),
|
||||||
null, assetProfile.getId(), assetProfile.isDefault()));
|
null, assetProfile.getId(), assetProfile.isDefault()));
|
||||||
|
|||||||
@ -209,14 +209,11 @@ public class BaseAssetService extends AbstractCachedEntityService<AssetCacheKey,
|
|||||||
}
|
}
|
||||||
|
|
||||||
Asset asset = assetDao.findById(tenantId, assetId.getId());
|
Asset asset = assetDao.findById(tenantId, assetId.getId());
|
||||||
alarmService.deleteEntityAlarmRelations(tenantId, assetId);
|
|
||||||
deleteAsset(tenantId, asset);
|
deleteAsset(tenantId, asset);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void deleteAsset(TenantId tenantId, Asset asset) {
|
private void deleteAsset(TenantId tenantId, Asset asset) {
|
||||||
log.trace("Executing deleteAsset [{}]", asset.getId());
|
log.trace("Executing deleteAsset [{}]", asset.getId());
|
||||||
relationService.deleteEntityRelations(tenantId, asset.getId());
|
|
||||||
|
|
||||||
assetDao.removeById(tenantId, asset.getUuidId());
|
assetDao.removeById(tenantId, asset.getUuidId());
|
||||||
|
|
||||||
publishEvictEvent(new AssetCacheEvictEvent(asset.getTenantId(), asset.getName(), null));
|
publishEvictEvent(new AssetCacheEvictEvent(asset.getTenantId(), asset.getName(), null));
|
||||||
|
|||||||
@ -137,7 +137,6 @@ public class CustomerServiceImpl extends AbstractEntityService implements Custom
|
|||||||
deviceService.unassignCustomerDevices(customer.getTenantId(), customerId);
|
deviceService.unassignCustomerDevices(customer.getTenantId(), customerId);
|
||||||
edgeService.unassignCustomerEdges(customer.getTenantId(), customerId);
|
edgeService.unassignCustomerEdges(customer.getTenantId(), customerId);
|
||||||
userService.deleteCustomerUsers(customer.getTenantId(), customerId);
|
userService.deleteCustomerUsers(customer.getTenantId(), customerId);
|
||||||
deleteEntityRelations(tenantId, customerId);
|
|
||||||
apiUsageStateService.deleteApiUsageStateByEntityId(customerId);
|
apiUsageStateService.deleteApiUsageStateByEntityId(customerId);
|
||||||
customerDao.removeById(tenantId, customerId.getId());
|
customerDao.removeById(tenantId, customerId.getId());
|
||||||
countService.publishCountEntityEvictEvent(tenantId, EntityType.CUSTOMER);
|
countService.publishCountEntityEvictEvent(tenantId, EntityType.CUSTOMER);
|
||||||
|
|||||||
@ -234,7 +234,6 @@ public class DashboardServiceImpl extends AbstractEntityService implements Dashb
|
|||||||
public void deleteDashboard(TenantId tenantId, DashboardId dashboardId) {
|
public void deleteDashboard(TenantId tenantId, DashboardId dashboardId) {
|
||||||
log.trace("Executing deleteDashboard [{}]", dashboardId);
|
log.trace("Executing deleteDashboard [{}]", dashboardId);
|
||||||
Validator.validateId(dashboardId, INCORRECT_DASHBOARD_ID + dashboardId);
|
Validator.validateId(dashboardId, INCORRECT_DASHBOARD_ID + dashboardId);
|
||||||
deleteEntityRelations(tenantId, dashboardId);
|
|
||||||
try {
|
try {
|
||||||
dashboardDao.removeById(tenantId, dashboardId.getId());
|
dashboardDao.removeById(tenantId, dashboardId.getId());
|
||||||
publishEvictEvent(new DashboardTitleEvictEvent(dashboardId));
|
publishEvictEvent(new DashboardTitleEvictEvent(dashboardId));
|
||||||
|
|||||||
@ -235,7 +235,6 @@ public class DeviceProfileServiceImpl extends AbstractCachedEntityService<Device
|
|||||||
private void removeDeviceProfile(TenantId tenantId, DeviceProfile deviceProfile) {
|
private void removeDeviceProfile(TenantId tenantId, DeviceProfile deviceProfile) {
|
||||||
DeviceProfileId deviceProfileId = deviceProfile.getId();
|
DeviceProfileId deviceProfileId = deviceProfile.getId();
|
||||||
try {
|
try {
|
||||||
deleteEntityRelations(tenantId, deviceProfileId);
|
|
||||||
deviceProfileDao.removeById(tenantId, deviceProfileId.getId());
|
deviceProfileDao.removeById(tenantId, deviceProfileId.getId());
|
||||||
publishEvictEvent(new DeviceProfileEvictEvent(deviceProfile.getTenantId(), deviceProfile.getName(),
|
publishEvictEvent(new DeviceProfileEvictEvent(deviceProfile.getTenantId(), deviceProfile.getName(),
|
||||||
null, deviceProfile.getId(), deviceProfile.isDefault(),
|
null, deviceProfile.getId(), deviceProfile.isDefault(),
|
||||||
|
|||||||
@ -75,7 +75,6 @@ import org.thingsboard.server.dao.eventsourcing.DeleteEntityEvent;
|
|||||||
import org.thingsboard.server.dao.eventsourcing.SaveEntityEvent;
|
import org.thingsboard.server.dao.eventsourcing.SaveEntityEvent;
|
||||||
import org.thingsboard.server.dao.exception.DataValidationException;
|
import org.thingsboard.server.dao.exception.DataValidationException;
|
||||||
import org.thingsboard.server.dao.exception.IncorrectParameterException;
|
import org.thingsboard.server.dao.exception.IncorrectParameterException;
|
||||||
import org.thingsboard.server.dao.housekeeper.data.HousekeeperTask;
|
|
||||||
import org.thingsboard.server.dao.service.DataValidator;
|
import org.thingsboard.server.dao.service.DataValidator;
|
||||||
import org.thingsboard.server.dao.service.PaginatedRemover;
|
import org.thingsboard.server.dao.service.PaginatedRemover;
|
||||||
|
|
||||||
@ -321,19 +320,12 @@ public class DeviceServiceImpl extends AbstractCachedEntityService<DeviceCacheKe
|
|||||||
}
|
}
|
||||||
|
|
||||||
Device device = deviceDao.findById(tenantId, deviceId.getId());
|
Device device = deviceDao.findById(tenantId, deviceId.getId());
|
||||||
alarmService.deleteEntityAlarmRelations(tenantId, deviceId);
|
|
||||||
deleteDevice(tenantId, device);
|
deleteDevice(tenantId, device);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void deleteDevice(TenantId tenantId, Device device) {
|
private void deleteDevice(TenantId tenantId, Device device) {
|
||||||
log.trace("Executing deleteDevice [{}]", device.getId());
|
log.trace("Executing deleteDevice [{}]", device.getId());
|
||||||
deviceCredentialsService.deleteDeviceCredentialsByDeviceId(tenantId, device.getId());
|
deviceCredentialsService.deleteDeviceCredentialsByDeviceId(tenantId, device.getId());
|
||||||
relationService.deleteEntityRelations(tenantId, device.getId());
|
|
||||||
housekeeperService.submitTask(HousekeeperTask.deleteAttributes(tenantId, device.getId()));
|
|
||||||
housekeeperService.submitTask(HousekeeperTask.deleteTelemetry(tenantId, device.getId()));
|
|
||||||
housekeeperService.submitTask(HousekeeperTask.deleteEvents(tenantId, device.getId()));
|
|
||||||
// todo: extract to cleanUpRelatedData
|
|
||||||
|
|
||||||
deviceDao.removeById(tenantId, device.getUuidId());
|
deviceDao.removeById(tenantId, device.getUuidId());
|
||||||
|
|
||||||
DeviceCacheEvictEvent deviceCacheEvictEvent = new DeviceCacheEvictEvent(device.getTenantId(), device.getId(), device.getName(), null);
|
DeviceCacheEvictEvent deviceCacheEvictEvent = new DeviceCacheEvictEvent(device.getTenantId(), device.getId(), device.getName(), null);
|
||||||
|
|||||||
@ -33,7 +33,6 @@ import org.thingsboard.common.util.JacksonUtil;
|
|||||||
import org.thingsboard.server.common.data.EntitySubtype;
|
import org.thingsboard.server.common.data.EntitySubtype;
|
||||||
import org.thingsboard.server.common.data.EntityType;
|
import org.thingsboard.server.common.data.EntityType;
|
||||||
import org.thingsboard.server.common.data.StringUtils;
|
import org.thingsboard.server.common.data.StringUtils;
|
||||||
import org.thingsboard.server.common.data.Tenant;
|
|
||||||
import org.thingsboard.server.common.data.User;
|
import org.thingsboard.server.common.data.User;
|
||||||
import org.thingsboard.server.common.data.audit.ActionType;
|
import org.thingsboard.server.common.data.audit.ActionType;
|
||||||
import org.thingsboard.server.common.data.edge.Edge;
|
import org.thingsboard.server.common.data.edge.Edge;
|
||||||
@ -49,7 +48,6 @@ import org.thingsboard.server.common.data.id.TenantId;
|
|||||||
import org.thingsboard.server.common.data.id.TenantProfileId;
|
import org.thingsboard.server.common.data.id.TenantProfileId;
|
||||||
import org.thingsboard.server.common.data.id.UserId;
|
import org.thingsboard.server.common.data.id.UserId;
|
||||||
import org.thingsboard.server.common.data.page.PageData;
|
import org.thingsboard.server.common.data.page.PageData;
|
||||||
import org.thingsboard.server.common.data.page.PageDataIterable;
|
|
||||||
import org.thingsboard.server.common.data.page.PageDataIterableByTenantIdEntityId;
|
import org.thingsboard.server.common.data.page.PageDataIterableByTenantIdEntityId;
|
||||||
import org.thingsboard.server.common.data.page.PageLink;
|
import org.thingsboard.server.common.data.page.PageLink;
|
||||||
import org.thingsboard.server.common.data.relation.EntityRelation;
|
import org.thingsboard.server.common.data.relation.EntityRelation;
|
||||||
@ -58,6 +56,7 @@ import org.thingsboard.server.common.data.rule.RuleChain;
|
|||||||
import org.thingsboard.server.common.data.rule.RuleNode;
|
import org.thingsboard.server.common.data.rule.RuleNode;
|
||||||
import org.thingsboard.server.dao.entity.AbstractCachedEntityService;
|
import org.thingsboard.server.dao.entity.AbstractCachedEntityService;
|
||||||
import org.thingsboard.server.dao.eventsourcing.ActionEntityEvent;
|
import org.thingsboard.server.dao.eventsourcing.ActionEntityEvent;
|
||||||
|
import org.thingsboard.server.dao.eventsourcing.DeleteEntityEvent;
|
||||||
import org.thingsboard.server.dao.exception.DataValidationException;
|
import org.thingsboard.server.dao.exception.DataValidationException;
|
||||||
import org.thingsboard.server.dao.relation.RelationService;
|
import org.thingsboard.server.dao.relation.RelationService;
|
||||||
import org.thingsboard.server.dao.rule.RuleChainService;
|
import org.thingsboard.server.dao.rule.RuleChainService;
|
||||||
@ -212,12 +211,10 @@ public class EdgeServiceImpl extends AbstractCachedEntityService<EdgeCacheKey, E
|
|||||||
validateId(edgeId, INCORRECT_EDGE_ID + edgeId);
|
validateId(edgeId, INCORRECT_EDGE_ID + edgeId);
|
||||||
|
|
||||||
Edge edge = edgeDao.findById(tenantId, edgeId.getId());
|
Edge edge = edgeDao.findById(tenantId, edgeId.getId());
|
||||||
|
|
||||||
deleteEntityRelations(tenantId, edgeId);
|
|
||||||
|
|
||||||
edgeDao.removeById(tenantId, edgeId.getId());
|
edgeDao.removeById(tenantId, edgeId.getId());
|
||||||
|
|
||||||
publishEvictEvent(new EdgeCacheEvictEvent(edge.getTenantId(), edge.getName(), null));
|
publishEvictEvent(new EdgeCacheEvictEvent(edge.getTenantId(), edge.getName(), null));
|
||||||
|
eventPublisher.publishEvent(DeleteEntityEvent.builder().tenantId(tenantId).entityId(edgeId).build());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -20,6 +20,8 @@ import org.hibernate.exception.ConstraintViolationException;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.ApplicationEventPublisher;
|
import org.springframework.context.ApplicationEventPublisher;
|
||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.context.annotation.Lazy;
|
||||||
|
import org.springframework.transaction.event.TransactionalEventListener;
|
||||||
|
import org.thingsboard.server.common.data.EntityType;
|
||||||
import org.thingsboard.server.common.data.EntityView;
|
import org.thingsboard.server.common.data.EntityView;
|
||||||
import org.thingsboard.server.common.data.StringUtils;
|
import org.thingsboard.server.common.data.StringUtils;
|
||||||
import org.thingsboard.server.common.data.id.EdgeId;
|
import org.thingsboard.server.common.data.id.EdgeId;
|
||||||
@ -30,8 +32,8 @@ import org.thingsboard.server.common.data.relation.RelationTypeGroup;
|
|||||||
import org.thingsboard.server.dao.alarm.AlarmService;
|
import org.thingsboard.server.dao.alarm.AlarmService;
|
||||||
import org.thingsboard.server.dao.edge.EdgeService;
|
import org.thingsboard.server.dao.edge.EdgeService;
|
||||||
import org.thingsboard.server.dao.entityview.EntityViewService;
|
import org.thingsboard.server.dao.entityview.EntityViewService;
|
||||||
|
import org.thingsboard.server.dao.eventsourcing.DeleteEntityEvent;
|
||||||
import org.thingsboard.server.dao.exception.DataValidationException;
|
import org.thingsboard.server.dao.exception.DataValidationException;
|
||||||
import org.thingsboard.server.dao.housekeeper.HouseKeeperService;
|
|
||||||
import org.thingsboard.server.dao.housekeeper.HousekeeperService;
|
import org.thingsboard.server.dao.housekeeper.HousekeeperService;
|
||||||
import org.thingsboard.server.dao.housekeeper.data.HousekeeperTask;
|
import org.thingsboard.server.dao.housekeeper.data.HousekeeperTask;
|
||||||
import org.thingsboard.server.dao.relation.RelationService;
|
import org.thingsboard.server.dao.relation.RelationService;
|
||||||
@ -69,6 +71,28 @@ public abstract class AbstractEntityService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
protected HousekeeperService housekeeperService;
|
protected HousekeeperService housekeeperService;
|
||||||
|
|
||||||
|
@TransactionalEventListener(fallbackExecution = true) // todo: consider moving this to HousekeeperService
|
||||||
|
public void onEntityDeleted(DeleteEntityEvent<?> event) {
|
||||||
|
TenantId tenantId = event.getTenantId();
|
||||||
|
EntityId entityId = event.getEntityId();
|
||||||
|
log.trace("[{}] DeleteEntityEvent handler: {}", tenantId, event);
|
||||||
|
|
||||||
|
cleanUpRelatedData(tenantId, entityId);
|
||||||
|
if (EntityType.USER.equals(entityId.getEntityType())) {
|
||||||
|
// housekeeperService.submitTask(HousekeeperTask.unassignAlarms(tenantId, entityId));
|
||||||
|
// unassignDeletedUserAlarms(tenantId, (User) event.getEntity(), event.getTs());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void cleanUpRelatedData(TenantId tenantId, EntityId entityId) {
|
||||||
|
// todo: skipped entities list
|
||||||
|
relationService.deleteEntityRelations(tenantId, entityId);
|
||||||
|
housekeeperService.submitTask(HousekeeperTask.deleteAttributes(tenantId, entityId));
|
||||||
|
housekeeperService.submitTask(HousekeeperTask.deleteTelemetry(tenantId, entityId));
|
||||||
|
housekeeperService.submitTask(HousekeeperTask.deleteEvents(tenantId, entityId));
|
||||||
|
housekeeperService.submitTask(HousekeeperTask.deleteEntityAlarms(tenantId, entityId));
|
||||||
|
}
|
||||||
|
|
||||||
protected void createRelation(TenantId tenantId, EntityRelation relation) {
|
protected void createRelation(TenantId tenantId, EntityRelation relation) {
|
||||||
log.debug("Creating relation: {}", relation);
|
log.debug("Creating relation: {}", relation);
|
||||||
relationService.saveRelation(tenantId, relation);
|
relationService.saveRelation(tenantId, relation);
|
||||||
@ -79,11 +103,6 @@ public abstract class AbstractEntityService {
|
|||||||
relationService.deleteRelation(tenantId, relation);
|
relationService.deleteRelation(tenantId, relation);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void deleteEntityRelations(TenantId tenantId, EntityId entityId) {
|
|
||||||
relationService.deleteEntityRelations(tenantId, entityId);
|
|
||||||
alarmService.deleteEntityAlarmRelations(tenantId, entityId);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static Optional<ConstraintViolationException> extractConstraintViolationException(Exception t) {
|
protected static Optional<ConstraintViolationException> extractConstraintViolationException(Exception t) {
|
||||||
if (t instanceof ConstraintViolationException) {
|
if (t instanceof ConstraintViolationException) {
|
||||||
return Optional.of((ConstraintViolationException) t);
|
return Optional.of((ConstraintViolationException) t);
|
||||||
|
|||||||
@ -331,7 +331,6 @@ public class EntityViewServiceImpl extends AbstractCachedEntityService<EntityVie
|
|||||||
public void deleteEntityView(TenantId tenantId, EntityViewId entityViewId) {
|
public void deleteEntityView(TenantId tenantId, EntityViewId entityViewId) {
|
||||||
log.trace("Executing deleteEntityView [{}]", entityViewId);
|
log.trace("Executing deleteEntityView [{}]", entityViewId);
|
||||||
validateId(entityViewId, INCORRECT_ENTITY_VIEW_ID + entityViewId);
|
validateId(entityViewId, INCORRECT_ENTITY_VIEW_ID + entityViewId);
|
||||||
deleteEntityRelations(tenantId, entityViewId);
|
|
||||||
EntityView entityView = entityViewDao.findById(tenantId, entityViewId.getId());
|
EntityView entityView = entityViewDao.findById(tenantId, entityViewId.getId());
|
||||||
entityViewDao.removeById(tenantId, entityViewId.getId());
|
entityViewDao.removeById(tenantId, entityViewId.getId());
|
||||||
publishEvictEvent(new EntityViewEvictEvent(entityView.getTenantId(), entityView.getId(), entityView.getEntityId(), null, entityView.getName(), null));
|
publishEvictEvent(new EntityViewEvictEvent(entityView.getTenantId(), entityView.getId(), entityView.getEntityId(), null, entityView.getName(), null));
|
||||||
|
|||||||
@ -18,6 +18,7 @@ package org.thingsboard.server.dao.housekeeper.data;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.thingsboard.server.common.data.id.EntityId;
|
import org.thingsboard.server.common.data.id.EntityId;
|
||||||
import org.thingsboard.server.common.data.id.TenantId;
|
import org.thingsboard.server.common.data.id.TenantId;
|
||||||
|
import org.thingsboard.server.common.data.id.UserId;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
@ -48,4 +49,12 @@ public class HousekeeperTask implements Serializable {
|
|||||||
return new HousekeeperTask(tenantId, entityId, HousekeeperTaskType.DELETE_EVENTS);
|
return new HousekeeperTask(tenantId, entityId, HousekeeperTaskType.DELETE_EVENTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static HousekeeperTask unassignAlarms(TenantId tenantId, UserId userId) {
|
||||||
|
return new HousekeeperTask(tenantId, userId, HousekeeperTaskType.UNASSIGN_ALARMS);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HousekeeperTask deleteEntityAlarms(TenantId tenantId, EntityId entityId) {
|
||||||
|
return new HousekeeperTask(tenantId, entityId, HousekeeperTaskType.DELETE_ENTITY_ALARMS);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,5 +19,7 @@ public enum HousekeeperTaskType {
|
|||||||
DELETE_ENTITY,
|
DELETE_ENTITY,
|
||||||
DELETE_ATTRIBUTES,
|
DELETE_ATTRIBUTES,
|
||||||
DELETE_TELEMETRY, // maybe divide into latest and ts kv history?
|
DELETE_TELEMETRY, // maybe divide into latest and ts kv history?
|
||||||
DELETE_EVENTS
|
DELETE_EVENTS,
|
||||||
|
UNASSIGN_ALARMS,
|
||||||
|
DELETE_ENTITY_ALARMS
|
||||||
}
|
}
|
||||||
|
|||||||
@ -177,7 +177,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
|
|||||||
List<RuleNodeUpdateResult> updatedRuleNodes = new ArrayList<>();
|
List<RuleNodeUpdateResult> updatedRuleNodes = new ArrayList<>();
|
||||||
List<RuleNode> existingRuleNodes = getRuleChainNodes(tenantId, ruleChainMetaData.getRuleChainId());
|
List<RuleNode> existingRuleNodes = getRuleChainNodes(tenantId, ruleChainMetaData.getRuleChainId());
|
||||||
for (RuleNode existingNode : existingRuleNodes) {
|
for (RuleNode existingNode : existingRuleNodes) {
|
||||||
deleteEntityRelations(tenantId, existingNode.getId());
|
cleanUpRelatedData(tenantId, existingNode.getId()); // fixme: for sure?
|
||||||
Integer index = ruleNodeIndexMap.get(existingNode.getId());
|
Integer index = ruleNodeIndexMap.get(existingNode.getId());
|
||||||
RuleNode newRuleNode = null;
|
RuleNode newRuleNode = null;
|
||||||
if (index != null) {
|
if (index != null) {
|
||||||
@ -771,7 +771,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
|
|||||||
private void deleteRuleNodes(TenantId tenantId, List<RuleNode> ruleNodes) {
|
private void deleteRuleNodes(TenantId tenantId, List<RuleNode> ruleNodes) {
|
||||||
List<RuleNodeId> ruleNodeIds = ruleNodes.stream().map(RuleNode::getId).collect(Collectors.toList());
|
List<RuleNodeId> ruleNodeIds = ruleNodes.stream().map(RuleNode::getId).collect(Collectors.toList());
|
||||||
for (var node : ruleNodes) {
|
for (var node : ruleNodes) {
|
||||||
deleteEntityRelations(tenantId, node.getId());
|
cleanUpRelatedData(tenantId, node.getId());
|
||||||
}
|
}
|
||||||
ruleNodeDao.deleteByIdIn(ruleNodeIds);
|
ruleNodeDao.deleteByIdIn(ruleNodeIds);
|
||||||
}
|
}
|
||||||
@ -783,7 +783,6 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
|
|||||||
for (EntityRelation relation : nodeRelations) {
|
for (EntityRelation relation : nodeRelations) {
|
||||||
deleteRuleNode(tenantId, relation.getTo());
|
deleteRuleNode(tenantId, relation.getTo());
|
||||||
}
|
}
|
||||||
deleteEntityRelations(tenantId, ruleChainId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -820,8 +819,8 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void deleteRuleNode(TenantId tenantId, EntityId entityId) {
|
private void deleteRuleNode(TenantId tenantId, EntityId entityId) {
|
||||||
deleteEntityRelations(tenantId, entityId);
|
|
||||||
ruleNodeDao.removeById(tenantId, entityId.getId());
|
ruleNodeDao.removeById(tenantId, entityId.getId());
|
||||||
|
cleanUpRelatedData(tenantId, entityId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final PaginatedRemover<TenantId, RuleChain> tenantRuleChainsRemover =
|
private final PaginatedRemover<TenantId, RuleChain> tenantRuleChainsRemover =
|
||||||
|
|||||||
@ -130,7 +130,6 @@ public class TenantProfileServiceImpl extends AbstractCachedEntityService<Tenant
|
|||||||
throw t;
|
throw t;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
deleteEntityRelations(tenantId, tenantProfileId);
|
|
||||||
publishEvictEvent(new TenantProfileEvictEvent(tenantProfileId, isDefault));
|
publishEvictEvent(new TenantProfileEvictEvent(tenantProfileId, isDefault));
|
||||||
eventPublisher.publishEvent(DeleteEntityEvent.builder().tenantId(tenantId).entityId(tenantProfileId).build());
|
eventPublisher.publishEvent(DeleteEntityEvent.builder().tenantId(tenantId).entityId(tenantProfileId).build());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -245,7 +245,6 @@ public class TenantServiceImpl extends AbstractCachedEntityService<TenantId, Ten
|
|||||||
tenantDao.removeById(tenantId, tenantId.getId());
|
tenantDao.removeById(tenantId, tenantId.getId());
|
||||||
publishEvictEvent(new TenantEvictEvent(tenantId, true));
|
publishEvictEvent(new TenantEvictEvent(tenantId, true));
|
||||||
eventPublisher.publishEvent(DeleteEntityEvent.builder().tenantId(tenantId).entityId(tenantId).build());
|
eventPublisher.publishEvent(DeleteEntityEvent.builder().tenantId(tenantId).entityId(tenantId).build());
|
||||||
relationService.deleteEntityRelations(tenantId, tenantId);
|
|
||||||
alarmService.deleteEntityAlarmRecordsByTenantId(tenantId);
|
alarmService.deleteEntityAlarmRecordsByTenantId(tenantId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -255,7 +255,6 @@ public class UserServiceImpl extends AbstractEntityService implements UserServic
|
|||||||
validateId(userId, INCORRECT_USER_ID + userId);
|
validateId(userId, INCORRECT_USER_ID + userId);
|
||||||
userCredentialsDao.removeByUserId(tenantId, userId);
|
userCredentialsDao.removeByUserId(tenantId, userId);
|
||||||
userAuthSettingsDao.removeByUserId(userId);
|
userAuthSettingsDao.removeByUserId(userId);
|
||||||
deleteEntityRelations(tenantId, userId);
|
|
||||||
|
|
||||||
userDao.removeById(tenantId, userId.getId());
|
userDao.removeById(tenantId, userId.getId());
|
||||||
eventPublisher.publishEvent(new UserCredentialsInvalidationEvent(userId));
|
eventPublisher.publishEvent(new UserCredentialsInvalidationEvent(userId));
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user