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