Skip to content

Commit afa13f8

Browse files
SlimaneAmarSlimane AMAR
andauthored
Block unbuild when computation (#847)
Co-authored-by: Slimane AMAR <[email protected]>
1 parent d4596ca commit afa13f8

13 files changed

+346
-396
lines changed

src/main/java/org/gridsuite/study/server/service/ConsumerService.java

Lines changed: 22 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -533,9 +533,7 @@ public void consumeCalculationFailed(Message<String> msg, ComputationType comput
533533
LOGGER.error(e.toString());
534534
} finally {
535535
if (receiverObj != null) {
536-
if (computationType == LOAD_FLOW) {
537-
networkModificationTreeService.unblockNodeTree(receiverObj.getRootNetworkUuid(), receiverObj.getNodeUuid());
538-
}
536+
handleUnblockNode(receiverObj, computationType);
539537

540538
// send notification for failed computation
541539
UUID studyUuid = networkModificationTreeService.getStudyUuidForNodeId(receiverObj.getNodeUuid());
@@ -548,7 +546,7 @@ public void consumeCalculationFailed(Message<String> msg, ComputationType comput
548546
public void consumeCalculationStopped(Message<String> msg, ComputationType computationType) {
549547
String receiver = msg.getHeaders().get(HEADER_RECEIVER, String.class);
550548
if (!Strings.isBlank(receiver)) {
551-
NodeReceiver receiverObj;
549+
NodeReceiver receiverObj = null;
552550
try {
553551
receiverObj = objectMapper.readValue(URLDecoder.decode(receiver, StandardCharsets.UTF_8), NodeReceiver.class);
554552

@@ -561,6 +559,10 @@ public void consumeCalculationStopped(Message<String> msg, ComputationType compu
561559
LOGGER.info("{} stopped for node '{}'", computationType.getLabel(), receiverObj.getNodeUuid());
562560
} catch (JsonProcessingException e) {
563561
LOGGER.error(e.toString());
562+
} finally {
563+
if (receiverObj != null) {
564+
handleUnblockNode(receiverObj, computationType);
565+
}
564566
}
565567
}
566568
}
@@ -590,27 +592,12 @@ public void consumeCalculationCancelFailed(Message<String> msg, ComputationType
590592
}
591593
}
592594

593-
private void consumeLoadFlowResult(Message<String> msg, boolean withRatioTapChangers) {
594-
Optional.ofNullable(msg.getHeaders().get(RESULT_UUID, String.class))
595-
.map(UUID::fromString)
596-
.ifPresent(resultUuid -> getNodeReceiver(msg).ifPresent(receiverObj -> {
597-
try {
598-
LOGGER.info("{} result '{}' available for node '{}'",
599-
LOAD_FLOW.getLabel(),
600-
resultUuid,
601-
receiverObj.getNodeUuid());
602-
603-
// update DB
604-
rootNetworkNodeInfoService.updateLoadflowResultUuid(receiverObj.getNodeUuid(), receiverObj.getRootNetworkUuid(), resultUuid, withRatioTapChangers);
605-
} finally {
606-
networkModificationTreeService.unblockNodeTree(receiverObj.getRootNetworkUuid(), receiverObj.getNodeUuid());
607-
608-
// send notifications
609-
UUID studyUuid = networkModificationTreeService.getStudyUuidForNodeId(receiverObj.getNodeUuid());
610-
notificationService.emitStudyChanged(studyUuid, receiverObj.getNodeUuid(), receiverObj.getRootNetworkUuid(), LOAD_FLOW.getUpdateStatusType());
611-
notificationService.emitStudyChanged(studyUuid, receiverObj.getNodeUuid(), receiverObj.getRootNetworkUuid(), LOAD_FLOW.getUpdateResultType());
612-
}
613-
}));
595+
private void handleUnblockNode(NodeReceiver receiverObj, ComputationType computationType) {
596+
if (computationType == ComputationType.LOAD_FLOW && networkModificationTreeService.isSecurityNode(receiverObj.getNodeUuid())) {
597+
networkModificationTreeService.unblockNodeTree(receiverObj.getRootNetworkUuid(), receiverObj.getNodeUuid());
598+
} else {
599+
networkModificationTreeService.unblockNode(receiverObj.getRootNetworkUuid(), receiverObj.getNodeUuid());
600+
}
614601
}
615602

616603
public void consumeCalculationDebug(Message<String> msg, ComputationType computationType) {
@@ -635,11 +622,18 @@ public void consumeCalculationResult(Message<String> msg, ComputationType comput
635622
receiverObj.getNodeUuid());
636623

637624
// update DB
638-
rootNetworkNodeInfoService.updateComputationResultUuid(receiverObj.getNodeUuid(), receiverObj.getRootNetworkUuid(), resultUuid, computationType);
625+
if (computationType == ComputationType.LOAD_FLOW) {
626+
Boolean withRatioTapChangers = msg.getHeaders().get(HEADER_WITH_RATIO_TAP_CHANGERS, Boolean.class);
627+
rootNetworkNodeInfoService.updateLoadflowResultUuid(receiverObj.getNodeUuid(), receiverObj.getRootNetworkUuid(), resultUuid, withRatioTapChangers);
628+
} else {
629+
rootNetworkNodeInfoService.updateComputationResultUuid(receiverObj.getNodeUuid(), receiverObj.getRootNetworkUuid(), resultUuid, computationType);
630+
}
639631

640-
UUID studyUuid = networkModificationTreeService.getStudyUuidForNodeId(receiverObj.getNodeUuid());
632+
// unblock node
633+
handleUnblockNode(receiverObj, computationType);
641634

642635
// send notifications
636+
UUID studyUuid = networkModificationTreeService.getStudyUuidForNodeId(receiverObj.getNodeUuid());
643637
notificationService.emitStudyChanged(studyUuid, receiverObj.getNodeUuid(), receiverObj.getRootNetworkUuid(), computationType.getUpdateStatusType());
644638
notificationService.emitStudyChanged(studyUuid, receiverObj.getNodeUuid(), receiverObj.getRootNetworkUuid(), computationType.getUpdateResultType());
645639
}));
@@ -750,10 +744,7 @@ public Consumer<Message<String>> consumeSensitivityAnalysisFailed() {
750744

751745
@Bean
752746
public Consumer<Message<String>> consumeLoadFlowResult() {
753-
return message -> {
754-
Boolean withRatioTapChangers = message.getHeaders().get(HEADER_WITH_RATIO_TAP_CHANGERS, Boolean.class);
755-
consumeLoadFlowResult(message, Boolean.TRUE.equals(withRatioTapChangers));
756-
};
747+
return message -> consumeCalculationResult(message, LOAD_FLOW);
757748
}
758749

759750
@Bean

src/main/java/org/gridsuite/study/server/service/NetworkModificationTreeService.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -948,6 +948,16 @@ public void unblockNodeTree(UUID rootNetworkUuid, UUID nodeUuid) {
948948
rootNetworkNodeInfoService.unblockNodes(rootNetworkUuid, getNodeTreeUuids(nodeUuid));
949949
}
950950

951+
@Transactional
952+
public void unblockNode(UUID rootNetworkUuid, UUID nodeUuid) {
953+
rootNetworkNodeInfoService.unblockNodes(rootNetworkUuid, List.of(nodeUuid));
954+
}
955+
956+
@Transactional
957+
public void blockNode(UUID rootNetworkUuid, UUID nodeUuid) {
958+
rootNetworkNodeInfoService.blockNodes(rootNetworkUuid, List.of(nodeUuid));
959+
}
960+
951961
/**
952962
* Recursively iterate through *nodeUuid* parents until one of them match one of the following conditions :<br>
953963
* - it is of type ROOT<br>

src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,8 +406,12 @@ public void assertNoBlockedNode(UUID rootNetworkUuid, List<UUID> nodesUuids) {
406406
}
407407
}
408408

409+
public void blockNodes(UUID rootNetworkUuid, List<UUID> nodesUuids) {
410+
getRootNetworkNodes(rootNetworkUuid, nodesUuids).forEach(rnn -> rnn.setBlockedNode(true));
411+
}
412+
409413
public void unblockNodes(UUID rootNetworkUuid, List<UUID> nodesUuids) {
410-
getRootNetworkNodes(rootNetworkUuid, nodesUuids).stream().forEach(rnn -> rnn.setBlockedNode(false));
414+
getRootNetworkNodes(rootNetworkUuid, nodesUuids).forEach(rnn -> rnn.setBlockedNode(false));
411415
}
412416

413417
private void addLink(NetworkModificationNodeInfoEntity nodeInfoEntity, RootNetworkEntity rootNetworkEntity, RootNetworkNodeInfoEntity rootNetworkNodeInfoEntity) {

0 commit comments

Comments
 (0)