From 726b80eb957b5af573a7c01be7a18660a9c8aa0c Mon Sep 17 00:00:00 2001 From: Joris Mancini Date: Thu, 18 Sep 2025 16:13:26 +0200 Subject: [PATCH] performance: use PreloadingStrategy.NONE with low numbers of substations Signed-off-by: Joris Mancini --- .../map/services/NetworkMapService.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/gridsuite/network/map/services/NetworkMapService.java b/src/main/java/org/gridsuite/network/map/services/NetworkMapService.java index 92ba0ac4..95a26f6b 100644 --- a/src/main/java/org/gridsuite/network/map/services/NetworkMapService.java +++ b/src/main/java/org/gridsuite/network/map/services/NetworkMapService.java @@ -26,6 +26,9 @@ import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; +import java.util.stream.StreamSupport; + +import static org.gridsuite.network.map.dto.InfoTypeParameters.QUERY_PARAM_LOAD_NETWORK_COMPONENTS; /** * @author Geoffroy Jamgotchian @@ -62,7 +65,16 @@ private List getSubstationsIds(UUID networkUuid, String variantId, List< } public AllElementsInfos getAllElementsInfos(UUID networkUuid, String variantId, @NonNull List substationsId, Map> additionalParametersByType) { - Network network = getNetwork(networkUuid, PreloadingStrategy.ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW, variantId); + // With network components we have to traverse almost all the network to recompute so we can switch to + // ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW directly + boolean shouldLoadNetworkComponents = Optional.ofNullable(additionalParametersByType.get(ElementType.BUS.toString())) + .map(map -> map.get(QUERY_PARAM_LOAD_NETWORK_COMPONENTS)) + .map(Boolean::valueOf) + .orElse(false); + PreloadingStrategy preloadingStrategy = shouldLoadNetworkComponents || substationsId.size() >= 5 ? + PreloadingStrategy.ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW : + PreloadingStrategy.NONE; + Network network = getNetwork(networkUuid, preloadingStrategy, variantId); return AllElementsInfos.builder() .substations(getSubstationsInfos(network, substationsId, getInfoTypeParameters(additionalParametersByType, ElementType.SUBSTATION), null)) .voltageLevels(getVoltageLevelsInfos(network, substationsId, getInfoTypeParameters(additionalParametersByType, ElementType.VOLTAGE_LEVEL), null)) @@ -253,10 +265,11 @@ private List getTieLinesInfos(Network network, @NonNull List getBusesInfos(Network network, @NonNull List substationsId, InfoTypeParameters infoTypeParameters) { Stream buses = substationsId.isEmpty() ? network.getBusView().getBusStream() : - network.getBusView().getBusStream() - .filter(Objects::nonNull) - .filter(bus -> bus.getVoltageLevel().getSubstation().stream().anyMatch(substation -> substationsId.contains(substation.getId()))) - .distinct(); + substationsId + .stream() + .flatMap(id -> network.getSubstation(id).getVoltageLevelStream()) + .flatMap(vl -> StreamSupport.stream(vl.getBusView().getBuses().spliterator(), false)); + return buses .map(c -> ElementType.BUS.getInfosGetter().apply(c, infoTypeParameters)) .distinct()