Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ public interface RootNetworkRepository extends JpaRepository<RootNetworkEntity,
@EntityGraph(attributePaths = {"rootNetworkNodeInfos"}, type = EntityGraph.EntityGraphType.LOAD)
Optional<RootNetworkEntity> findWithRootNetworkNodeInfosById(UUID rootNetworkUuid);

@EntityGraph(attributePaths = {"rootNetworkNodeInfos.modificationReports", "rootNetworkNodeInfos.computationReports"}, type = EntityGraph.EntityGraphType.LOAD)
Optional<RootNetworkEntity> findWithRootNetworkNodeInfosAndReportsById(UUID rootNetworkUuid);

boolean existsByIdAndStudyId(UUID rootNetworkUuid, UUID studyUuid);

int countAllByStudyId(UUID studyUuid);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -640,20 +640,6 @@ public void deleteRootNetworkNodeRemoteInfos(List<RootNetworkNodeInfo> rootNetwo
CompletableFuture.allOf(getRemoteDeletions(getRemoteDeletionInfos(rootNetworkNodeInfos)).toArray(CompletableFuture[]::new));
}

// New method specifically for the supervision/invalidate path
@Transactional(readOnly = true)
public void deleteRootNetworkNodeRemoteInfosByUuids(List<UUID> rootNetworkUuids) {
if (rootNetworkUuids == null || rootNetworkUuids.isEmpty()) {
return;
}
List<RootNetworkNodeInfo> rootNetworkNodeInfos = rootNetworkUuids.stream()
.flatMap(rnUuid -> rootNetworkNodeInfoRepository.findAllByRootNetworkId(rnUuid).stream())
.map(RootNetworkNodeInfoEntity::toDto)
.toList();
// Do not wait completion and do not throw exception
CompletableFuture.allOf(getRemoteDeletions(getRemoteDeletionInfos(rootNetworkNodeInfos)).toArray(CompletableFuture[]::new));
}

@Transactional
public ModificationApplicationContext getNetworkModificationApplicationContext(UUID rootNetworkUuid, UUID nodeUuid, UUID networkUuid) {
RootNetworkNodeInfoEntity rootNetworkNodeInfoEntity = rootNetworkNodeInfoRepository.findWithModificationsToExcludeByNodeInfoIdAndRootNetworkId(nodeUuid, rootNetworkUuid).orElseThrow(() -> new StudyException(NOT_FOUND, "Root network not found"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -239,36 +239,25 @@ public void deleteRootNetworks(StudyEntity studyEntity, Stream<UUID> rootNetwork
}

public void deleteRootNetworks(StudyEntity studyEntity, List<RootNetworkInfos> rootNetworksInfos) {
deleteRootNetworkRemoteInfos(rootNetworksInfos);
invalidateRootNetworkRemoteInfos(rootNetworksInfos, false, true);

studyEntity.deleteRootNetworks(rootNetworksInfos.stream().map(RootNetworkInfos::getId).collect(Collectors.toSet()));
}

public void deleteRootNetworkRemoteInfos(List<RootNetworkInfos> rootNetworkInfos) {
CompletableFuture.allOf(
// delete remote data ids set in root network
studyServerExecutionService.runAsync(() -> reportService.deleteReports(rootNetworkInfos.stream().map(RootNetworkInfos::getReportUuid).toList())),
studyServerExecutionService.runAsync(() -> rootNetworkInfos.stream().map(rni -> rni.getNetworkInfos().getNetworkUuid()).filter(Objects::nonNull).forEach(equipmentInfosService::deleteEquipmentIndexes)),
studyServerExecutionService.runAsync(() -> rootNetworkInfos.stream().map(rni -> rni.getNetworkInfos().getNetworkUuid()).filter(Objects::nonNull).forEach(networkStoreService::deleteNetwork)),
studyServerExecutionService.runAsync(() -> rootNetworkInfos.stream().map(rni -> rni.getCaseInfos().getCaseUuid()).filter(Objects::nonNull).forEach(caseService::deleteCase))
);
// delete remote data ids set in root network node infos
rootNetworkNodeInfoService.deleteRootNetworkNodeRemoteInfos(rootNetworkInfos.stream().map(RootNetworkInfos::getRootNetworkNodeInfos).filter(Objects::nonNull).flatMap(Collection::stream).toList());
}

public void invalidateRootNetworkRemoteInfos(List<RootNetworkInfos> rootNetworkInfos, boolean blocking) {
public void invalidateRootNetworkRemoteInfos(List<RootNetworkInfos> rootNetworkInfos, boolean blocking, boolean deleteCase) {
ArrayList<CompletableFuture<Void>> futures = new ArrayList<>();
// delete remote data ids set in root network
futures.add(studyServerExecutionService.runAsync(() -> reportService.deleteReports(rootNetworkInfos.stream().map(RootNetworkInfos::getReportUuid).toList())));
futures.add(studyServerExecutionService.runAsync(() -> rootNetworkInfos.stream().map(rni -> rni.getNetworkInfos().getNetworkUuid()).filter(Objects::nonNull).forEach(equipmentInfosService::deleteEquipmentIndexes)));
futures.add(studyServerExecutionService.runAsync(() -> rootNetworkInfos.stream().map(rni -> rni.getNetworkInfos().getNetworkUuid()).filter(Objects::nonNull).forEach(networkStoreService::deleteNetwork)));
if (deleteCase) {
studyServerExecutionService.runAsync(() -> rootNetworkInfos.stream().map(rni -> rni.getCaseInfos().getCaseUuid()).filter(Objects::nonNull).forEach(caseService::deleteCase));
}
if (blocking) {
CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new)).join();
}
// delete remote data ids set in root network node infos
rootNetworkNodeInfoService.deleteRootNetworkNodeRemoteInfosByUuids(
rootNetworkInfos.stream().map(RootNetworkInfos::getId).toList()
);
rootNetworkNodeInfoService.deleteRootNetworkNodeRemoteInfos(rootNetworkInfos.stream().map(RootNetworkInfos::getRootNetworkNodeInfos).filter(Objects::nonNull).flatMap(Collection::stream).toList());
}

public Optional<RootNetworkRequestEntity> getRootNetworkRequest(UUID rootNetworkUuid) {
Expand Down Expand Up @@ -354,12 +343,10 @@ public boolean isRootNetworkTagExistsInStudy(UUID studyUuid, String rootNetworkT
rootNetworkRequestRepository.findByTagAndStudyUuid(rootNetworkTag, studyUuid).isPresent();
}

@Transactional(readOnly = true)
public List<RootNetworkEntity> getStudyRootNetwork(StudyEntity study) {
return study.getRootNetworks();
}

@Transactional(readOnly = true)
public List<UUID> getStudyRootNetworkIds(UUID studyUuid) {
return rootNetworkRepository.findAllByStudyId(studyUuid).stream()
.map(RootNetworkEntity::getId)
Expand All @@ -368,7 +355,7 @@ public List<UUID> getStudyRootNetworkIds(UUID studyUuid) {

@Transactional(readOnly = true)
public RootNetworkInfos getRootNetworkInfos(UUID rootNetworkUuid) {
return getRootNetwork(rootNetworkUuid)
return rootNetworkRepository.findWithRootNetworkNodeInfosAndReportsById(rootNetworkUuid)
.orElseThrow(() -> new StudyException(NOT_FOUND, "Root network not found"))
.toDto();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -611,7 +611,7 @@ public void deleteStudyIfNotCreationInProgress(UUID studyUuid) {
startTime.set(System.nanoTime());

// delete all distant resources linked to rootNetworks
rootNetworkService.deleteRootNetworkRemoteInfos(deleteStudyInfos.getRootNetworkInfosList());
rootNetworkService.invalidateRootNetworkRemoteInfos(deleteStudyInfos.getRootNetworkInfosList(), false, true);

// delete all distant resources linked to nodes
studyServerExecutionService.runAsync(() -> deleteStudyInfos.getModificationGroupUuids().stream().filter(Objects::nonNull).forEach(networkModificationService::deleteModifications));
Expand Down Expand Up @@ -3946,7 +3946,7 @@ public void invalidateStudyRootNetwork(UUID studyUuid, UUID rootNetworkUuid, Str
// First we unbuild all nodes
doUnbuildNodeTree(studyUuid, rootNodeUuid, true, true, userId);
// Then we erase data linked to root node on all root networks
rootNetworkService.invalidateRootNetworkRemoteInfos(List.of(rootNetworkService.getRootNetworkInfos(rootNetworkUuid)), true);
rootNetworkService.invalidateRootNetworkRemoteInfos(List.of(rootNetworkService.getRootNetworkInfos(rootNetworkUuid)), true, false);
rootNetworkService.updateRootNetworkIndexationStatus(studyUuid, rootNetworkUuid, RootNetworkIndexationStatus.NOT_INDEXED);
} finally {
networkModificationTreeService.unblockNodeTree(rootNetworkUuid, rootNodeUuid);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ void testInvalidateStudy() throws Exception {

// Remote root-network data was deleted
Mockito.verify(rootNetworkService, Mockito.times(1))
.invalidateRootNetworkRemoteInfos(any(), eq(true));
.invalidateRootNetworkRemoteInfos(any(), eq(true), eq(false));
Mockito.verify(networkStoreService, Mockito.times(1)).deleteNetwork(NETWORK_UUID);

// Indexation flipped to NOT_INDEXED so the auto-detect path will reimport on reopen
Expand Down
Loading