Do not send delete notification if related edges empty. Minor code refactoring
This commit is contained in:
		
							parent
							
								
									366583cc0a
								
							
						
					
					
						commit
						dd1effafc4
					
				@ -38,8 +38,6 @@ import org.thingsboard.server.common.data.id.EntityIdFactory;
 | 
			
		||||
import org.thingsboard.server.common.data.id.EntityViewId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.TenantId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.UserId;
 | 
			
		||||
import org.thingsboard.server.common.data.page.PageData;
 | 
			
		||||
import org.thingsboard.server.common.data.page.PageLink;
 | 
			
		||||
import org.thingsboard.server.common.data.relation.EntityRelation;
 | 
			
		||||
import org.thingsboard.server.common.data.relation.RelationTypeGroup;
 | 
			
		||||
import org.thingsboard.server.gen.edge.v1.DownlinkMsg;
 | 
			
		||||
@ -136,8 +134,8 @@ public class RelationEdgeProcessor extends BaseEdgeProcessor {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Set<EdgeId> uniqueEdgeIds = new HashSet<>();
 | 
			
		||||
        uniqueEdgeIds.addAll(findRelatedEdgeIds(tenantId, relation.getTo()));
 | 
			
		||||
        uniqueEdgeIds.addAll(findRelatedEdgeIds(tenantId, relation.getFrom()));
 | 
			
		||||
        uniqueEdgeIds.addAll(edgeService.findAllRelatedEdgeIds(tenantId, relation.getTo()));
 | 
			
		||||
        uniqueEdgeIds.addAll(edgeService.findAllRelatedEdgeIds(tenantId, relation.getFrom()));
 | 
			
		||||
        if (uniqueEdgeIds.isEmpty()) {
 | 
			
		||||
            return Futures.immediateFuture(null);
 | 
			
		||||
        }
 | 
			
		||||
@ -152,20 +150,4 @@ public class RelationEdgeProcessor extends BaseEdgeProcessor {
 | 
			
		||||
        }
 | 
			
		||||
        return Futures.transform(Futures.allAsList(futures), voids -> null, dbCallbackExecutorService);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private List<EdgeId> findRelatedEdgeIds(TenantId tenantId, EntityId entityId) {
 | 
			
		||||
        List<EdgeId> result = new ArrayList<>();
 | 
			
		||||
        PageLink pageLink = new PageLink(DEFAULT_PAGE_SIZE);
 | 
			
		||||
        PageData<EdgeId> pageData;
 | 
			
		||||
        do {
 | 
			
		||||
            pageData = edgeService.findRelatedEdgeIdsByEntityId(tenantId, entityId, pageLink);
 | 
			
		||||
            if (pageData != null && pageData.getData() != null && !pageData.getData().isEmpty()) {
 | 
			
		||||
                result.addAll(pageData.getData());
 | 
			
		||||
                if (pageData.hasNext()) {
 | 
			
		||||
                    pageLink = pageLink.nextPageLink();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } while (pageData != null && pageData.hasNext());
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -29,12 +29,10 @@ import org.thingsboard.server.common.data.alarm.AlarmQuery;
 | 
			
		||||
import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
 | 
			
		||||
import org.thingsboard.server.common.data.exception.ThingsboardException;
 | 
			
		||||
import org.thingsboard.server.common.data.id.AlarmId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.EdgeId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.EntityId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.EntityIdFactory;
 | 
			
		||||
import org.thingsboard.server.common.data.id.TenantId;
 | 
			
		||||
import org.thingsboard.server.common.data.page.PageData;
 | 
			
		||||
import org.thingsboard.server.common.data.page.PageDataIterableByTenantIdEntityId;
 | 
			
		||||
import org.thingsboard.server.common.data.page.TimePageLink;
 | 
			
		||||
import org.thingsboard.server.dao.alarm.AlarmService;
 | 
			
		||||
import org.thingsboard.server.dao.customer.CustomerService;
 | 
			
		||||
@ -43,8 +41,6 @@ import org.thingsboard.server.dao.model.ModelConstants;
 | 
			
		||||
import org.thingsboard.server.service.executors.DbCallbackExecutorService;
 | 
			
		||||
import org.thingsboard.server.service.sync.vc.EntitiesVersionControlService;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
@ -53,14 +49,9 @@ import java.util.stream.Collectors;
 | 
			
		||||
@Slf4j
 | 
			
		||||
public abstract class AbstractTbEntityService {
 | 
			
		||||
 | 
			
		||||
    protected static final int DEFAULT_PAGE_SIZE = 1000;
 | 
			
		||||
 | 
			
		||||
    @Value("${server.log_controller_error_stack_trace}")
 | 
			
		||||
    @Getter
 | 
			
		||||
    private boolean logControllerErrorStackTrace;
 | 
			
		||||
    @Value("${edges.enabled}")
 | 
			
		||||
    @Getter
 | 
			
		||||
    protected boolean edgesEnabled;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    protected DbCallbackExecutorService dbExecutor;
 | 
			
		||||
@ -113,22 +104,6 @@ public abstract class AbstractTbEntityService {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected List<EdgeId> findRelatedEdgeIds(TenantId tenantId, EntityId entityId) {
 | 
			
		||||
        if (!edgesEnabled) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        if (EntityType.EDGE.equals(entityId.getEntityType())) {
 | 
			
		||||
            return Collections.singletonList(new EdgeId(entityId.getId()));
 | 
			
		||||
        }
 | 
			
		||||
        PageDataIterableByTenantIdEntityId<EdgeId> relatedEdgeIdsIterator =
 | 
			
		||||
                new PageDataIterableByTenantIdEntityId<>(edgeService::findRelatedEdgeIdsByEntityId, tenantId, entityId, DEFAULT_PAGE_SIZE);
 | 
			
		||||
        List<EdgeId> result = new ArrayList<>();
 | 
			
		||||
        for (EdgeId edgeId : relatedEdgeIdsIterator) {
 | 
			
		||||
            result.add(edgeId);
 | 
			
		||||
        }
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected <I extends EntityId> I emptyId(EntityType entityType) {
 | 
			
		||||
        return (I) EntityIdFactory.getByTypeAndUuid(entityType, ModelConstants.NULL_UUID);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -280,8 +280,6 @@ public class DefaultTbNotificationEntityService implements TbNotificationEntityS
 | 
			
		||||
            for (EdgeId edgeId : edgeIds) {
 | 
			
		||||
                sendNotificationMsgToEdge(tenantId, edgeId, entityId, body, null, EdgeEventActionType.DELETED);
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            sendNotificationMsgToEdge(tenantId, null, entityId, body, null, EdgeEventActionType.DELETED);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -79,7 +79,7 @@ public class DefaultTbAlarmService extends AbstractTbEntityService implements Tb
 | 
			
		||||
    @Override
 | 
			
		||||
    public Boolean delete(Alarm alarm, User user) {
 | 
			
		||||
        TenantId tenantId = alarm.getTenantId();
 | 
			
		||||
        List<EdgeId> relatedEdgeIds = findRelatedEdgeIds(tenantId, alarm.getOriginator());
 | 
			
		||||
        List<EdgeId> relatedEdgeIds = edgeService.findAllRelatedEdgeIds(tenantId, alarm.getOriginator());
 | 
			
		||||
        notificationEntityService.notifyDeleteAlarm(tenantId, alarm, alarm.getOriginator(), alarm.getCustomerId(),
 | 
			
		||||
                relatedEdgeIds, user, JacksonUtil.toString(alarm));
 | 
			
		||||
        return alarmService.deleteAlarm(tenantId, alarm.getId()).isSuccessful();
 | 
			
		||||
 | 
			
		||||
@ -61,7 +61,7 @@ public class DefaultTbAssetService extends AbstractTbEntityService implements Tb
 | 
			
		||||
        TenantId tenantId = asset.getTenantId();
 | 
			
		||||
        AssetId assetId = asset.getId();
 | 
			
		||||
        try {
 | 
			
		||||
            List<EdgeId> relatedEdgeIds = findRelatedEdgeIds(tenantId, assetId);
 | 
			
		||||
            List<EdgeId> relatedEdgeIds = edgeService.findAllRelatedEdgeIds(tenantId, assetId);
 | 
			
		||||
            assetService.deleteAsset(tenantId, assetId);
 | 
			
		||||
            notificationEntityService.notifyDeleteEntity(tenantId, assetId, asset, asset.getCustomerId(),
 | 
			
		||||
                    ActionType.DELETED, relatedEdgeIds, user, assetId.toString());
 | 
			
		||||
 | 
			
		||||
@ -65,7 +65,7 @@ public class DefaultTbDashboardService extends AbstractTbEntityService implement
 | 
			
		||||
        DashboardId dashboardId = dashboard.getId();
 | 
			
		||||
        TenantId tenantId = dashboard.getTenantId();
 | 
			
		||||
        try {
 | 
			
		||||
            List<EdgeId> relatedEdgeIds = findRelatedEdgeIds(tenantId, dashboardId);
 | 
			
		||||
            List<EdgeId> relatedEdgeIds = edgeService.findAllRelatedEdgeIds(tenantId, dashboardId);
 | 
			
		||||
            dashboardService.deleteDashboard(tenantId, dashboardId);
 | 
			
		||||
            notificationEntityService.notifyDeleteEntity(tenantId, dashboardId, dashboard, null,
 | 
			
		||||
                    ActionType.DELETED, relatedEdgeIds, user, dashboardId.toString());
 | 
			
		||||
 | 
			
		||||
@ -96,7 +96,7 @@ public class DefaultTbDeviceService extends AbstractTbEntityService implements T
 | 
			
		||||
        TenantId tenantId = device.getTenantId();
 | 
			
		||||
        DeviceId deviceId = device.getId();
 | 
			
		||||
        try {
 | 
			
		||||
            List<EdgeId> relatedEdgeIds = findRelatedEdgeIds(tenantId, deviceId);
 | 
			
		||||
            List<EdgeId> relatedEdgeIds = edgeService.findAllRelatedEdgeIds(tenantId, deviceId);
 | 
			
		||||
            deviceService.deleteDevice(tenantId, deviceId);
 | 
			
		||||
            notificationEntityService.notifyDeleteDevice(tenantId, deviceId, device.getCustomerId(), device,
 | 
			
		||||
                    relatedEdgeIds, user, deviceId.toString());
 | 
			
		||||
 | 
			
		||||
@ -129,7 +129,7 @@ public class DefaultTbEntityViewService extends AbstractTbEntityService implemen
 | 
			
		||||
        TenantId tenantId = entityView.getTenantId();
 | 
			
		||||
        EntityViewId entityViewId = entityView.getId();
 | 
			
		||||
        try {
 | 
			
		||||
            List<EdgeId> relatedEdgeIds = findRelatedEdgeIds(tenantId, entityViewId);
 | 
			
		||||
            List<EdgeId> relatedEdgeIds = edgeService.findAllRelatedEdgeIds(tenantId, entityViewId);
 | 
			
		||||
            entityViewService.deleteEntityView(tenantId, entityViewId);
 | 
			
		||||
            notificationEntityService.notifyDeleteEntity(tenantId, entityViewId, entityView, entityView.getCustomerId(), ActionType.DELETED,
 | 
			
		||||
                    relatedEdgeIds, user, entityViewId.toString());
 | 
			
		||||
 | 
			
		||||
@ -203,7 +203,7 @@ public class DefaultTbRuleChainService extends AbstractTbEntityService implement
 | 
			
		||||
 | 
			
		||||
            List<EdgeId> relatedEdgeIds = null;
 | 
			
		||||
            if (RuleChainType.EDGE.equals(ruleChain.getType())) {
 | 
			
		||||
                relatedEdgeIds = findRelatedEdgeIds(tenantId, ruleChainId);
 | 
			
		||||
                relatedEdgeIds = edgeService.findAllRelatedEdgeIds(tenantId, ruleChainId);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            ruleChainService.deleteRuleChainById(tenantId, ruleChainId);
 | 
			
		||||
 | 
			
		||||
@ -37,6 +37,7 @@ import org.thingsboard.server.common.data.User;
 | 
			
		||||
import org.thingsboard.server.common.data.audit.ActionType;
 | 
			
		||||
import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
 | 
			
		||||
import org.thingsboard.server.common.data.exception.ThingsboardException;
 | 
			
		||||
import org.thingsboard.server.common.data.id.EdgeId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.EntityId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.EntityIdFactory;
 | 
			
		||||
import org.thingsboard.server.common.data.id.HasId;
 | 
			
		||||
@ -69,6 +70,7 @@ import org.thingsboard.server.common.data.sync.vc.request.load.SingleEntityVersi
 | 
			
		||||
import org.thingsboard.server.common.data.sync.vc.request.load.VersionLoadConfig;
 | 
			
		||||
import org.thingsboard.server.common.data.sync.vc.request.load.VersionLoadRequest;
 | 
			
		||||
import org.thingsboard.server.dao.DaoUtil;
 | 
			
		||||
import org.thingsboard.server.dao.edge.EdgeService;
 | 
			
		||||
import org.thingsboard.server.dao.exception.DeviceCredentialsValidationException;
 | 
			
		||||
import org.thingsboard.server.queue.util.TbCoreComponent;
 | 
			
		||||
import org.thingsboard.server.service.entitiy.TbNotificationEntityService;
 | 
			
		||||
@ -112,6 +114,7 @@ public class DefaultEntitiesVersionControlService implements EntitiesVersionCont
 | 
			
		||||
    private final EntitiesExportImportService exportImportService;
 | 
			
		||||
    private final ExportableEntitiesService exportableEntitiesService;
 | 
			
		||||
    private final TbNotificationEntityService entityNotificationService;
 | 
			
		||||
    private final EdgeService edgeService;
 | 
			
		||||
    private final TransactionTemplate transactionTemplate;
 | 
			
		||||
    private final TbTransactionalCache<UUID, VersionControlTaskCacheEntry> taskCache;
 | 
			
		||||
 | 
			
		||||
@ -427,11 +430,12 @@ public class DefaultEntitiesVersionControlService implements EntitiesVersionCont
 | 
			
		||||
            return exportableEntitiesService.findEntitiesByTenantId(ctx.getTenantId(), entityType, pageLink);
 | 
			
		||||
        }, 100, entity -> {
 | 
			
		||||
            if (ctx.getImportedEntities().get(entityType) == null || !ctx.getImportedEntities().get(entityType).contains(entity.getId())) {
 | 
			
		||||
                List<EdgeId> relatedEdgeIds = edgeService.findAllRelatedEdgeIds(ctx.getTenantId(), entity.getId());
 | 
			
		||||
                exportableEntitiesService.removeById(ctx.getTenantId(), entity.getId());
 | 
			
		||||
 | 
			
		||||
                ctx.addEventCallback(() -> {
 | 
			
		||||
                    entityNotificationService.notifyDeleteEntity(ctx.getTenantId(), entity.getId(),
 | 
			
		||||
                            entity, null, ActionType.DELETED, null, ctx.getUser());
 | 
			
		||||
                            entity, null, ActionType.DELETED, relatedEdgeIds, ctx.getUser());
 | 
			
		||||
                });
 | 
			
		||||
                ctx.registerDeleted(entityType);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -82,6 +82,8 @@ public interface EdgeService {
 | 
			
		||||
 | 
			
		||||
    PageData<Edge> findEdgesByTenantIdAndEntityId(TenantId tenantId, EntityId ruleChainId, PageLink pageLink);
 | 
			
		||||
 | 
			
		||||
    List<EdgeId> findAllRelatedEdgeIds(TenantId tenantId, EntityId entityId);
 | 
			
		||||
 | 
			
		||||
    PageData<EdgeId> findRelatedEdgeIdsByEntityId(TenantId tenantId, EntityId entityId, PageLink pageLink);
 | 
			
		||||
 | 
			
		||||
    String findMissingToRelatedRuleChains(TenantId tenantId, EdgeId edgeId, String tbRuleChainInputNodeClassName);
 | 
			
		||||
 | 
			
		||||
@ -21,9 +21,11 @@ import com.google.common.base.Function;
 | 
			
		||||
import com.google.common.util.concurrent.Futures;
 | 
			
		||||
import com.google.common.util.concurrent.ListenableFuture;
 | 
			
		||||
import com.google.common.util.concurrent.MoreExecutors;
 | 
			
		||||
import lombok.Getter;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.hibernate.exception.ConstraintViolationException;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Value;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
import org.springframework.transaction.annotation.Transactional;
 | 
			
		||||
import org.springframework.transaction.event.TransactionalEventListener;
 | 
			
		||||
@ -43,6 +45,7 @@ import org.thingsboard.server.common.data.id.RuleChainId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.TenantId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.UserId;
 | 
			
		||||
import org.thingsboard.server.common.data.page.PageData;
 | 
			
		||||
import org.thingsboard.server.common.data.page.PageDataIterableByTenantIdEntityId;
 | 
			
		||||
import org.thingsboard.server.common.data.page.PageLink;
 | 
			
		||||
import org.thingsboard.server.common.data.relation.EntityRelation;
 | 
			
		||||
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
 | 
			
		||||
@ -97,6 +100,10 @@ public class EdgeServiceImpl extends AbstractCachedEntityService<EdgeCacheKey, E
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private DataValidator<Edge> edgeValidator;
 | 
			
		||||
 | 
			
		||||
    @Value("${edges.enabled}")
 | 
			
		||||
    @Getter
 | 
			
		||||
    private boolean edgesEnabled;
 | 
			
		||||
 | 
			
		||||
    @TransactionalEventListener(classes = EdgeCacheEvictEvent.class)
 | 
			
		||||
    @Override
 | 
			
		||||
    public void handleEvictEvent(EdgeCacheEvictEvent event) {
 | 
			
		||||
@ -396,6 +403,23 @@ public class EdgeServiceImpl extends AbstractCachedEntityService<EdgeCacheKey, E
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<EdgeId> findAllRelatedEdgeIds(TenantId tenantId, EntityId entityId) {
 | 
			
		||||
        if (!edgesEnabled) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        if (EntityType.EDGE.equals(entityId.getEntityType())) {
 | 
			
		||||
            return Collections.singletonList(new EdgeId(entityId.getId()));
 | 
			
		||||
        }
 | 
			
		||||
        PageDataIterableByTenantIdEntityId<EdgeId> relatedEdgeIdsIterator =
 | 
			
		||||
                new PageDataIterableByTenantIdEntityId<>(edgeService::findRelatedEdgeIdsByEntityId, tenantId, entityId, DEFAULT_PAGE_SIZE);
 | 
			
		||||
        List<EdgeId> result = new ArrayList<>();
 | 
			
		||||
        for (EdgeId edgeId : relatedEdgeIdsIterator) {
 | 
			
		||||
            result.add(edgeId);
 | 
			
		||||
        }
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public PageData<EdgeId> findRelatedEdgeIdsByEntityId(TenantId tenantId, EntityId entityId, PageLink pageLink) {
 | 
			
		||||
        log.trace("[{}] Executing findRelatedEdgeIdsByEntityId [{}] [{}]", tenantId, entityId, pageLink);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user