@@ -793,7 +793,7 @@ public void invalidateBuild(UUID nodeUuid, UUID rootNetworkUuid, boolean invalid
793
793
changedNodes .add (nodeUuid );
794
794
UUID studyId = self .getStudyUuidForNodeId (nodeUuid );
795
795
nodesRepository .findById (nodeUuid ).ifPresent (nodeEntity -> {
796
- fillIndexedModificationsInfosToInvalidate (invalidateNodeInfos , nodeUuid , rootNetworkUuid , invalidateOnlyChildrenBuildStatus );
796
+ fillIndexedNodeInfosToInvalidate (invalidateNodeInfos , nodeUuid , rootNetworkUuid , invalidateOnlyChildrenBuildStatus );
797
797
if (rootNetworkService .exists (rootNetworkUuid )) {
798
798
if (nodeEntity .getType ().equals (NodeType .NETWORK_MODIFICATION )) {
799
799
rootNetworkNodeInfoService .invalidateRootNetworkNodeInfoProper (nodeUuid , rootNetworkUuid , invalidateNodeInfos , invalidateOnlyChildrenBuildStatus , changedNodes , deleteVoltageInitResults );
@@ -802,10 +802,10 @@ public void invalidateBuild(UUID nodeUuid, UUID rootNetworkUuid, boolean invalid
802
802
}
803
803
});
804
804
805
- notificationService .emitNodeBuildStatusUpdated (studyId , changedNodes .stream ().distinct ().collect ( Collectors . toList () ), rootNetworkUuid );
805
+ notificationService .emitNodeBuildStatusUpdated (studyId , changedNodes .stream ().distinct ().toList (), rootNetworkUuid );
806
806
}
807
807
808
- private void fillIndexedModificationsInfosToInvalidate (InvalidateNodeInfos invalidateNodeInfos , UUID nodeUuid , UUID rootNetworkUuid , boolean invalidateOnlyChildrenBuildStatus ) {
808
+ private void fillIndexedNodeInfosToInvalidate (InvalidateNodeInfos invalidateNodeInfos , UUID nodeUuid , UUID rootNetworkUuid , boolean invalidateOnlyChildrenBuildStatus ) {
809
809
// when invalidating node
810
810
// we need to invalidate indexed modifications up to it's last built parent, not included
811
811
boolean isNodeBuilt = self .getNodeBuildStatus (nodeUuid , rootNetworkUuid ).isBuilt ();
@@ -814,13 +814,47 @@ private void fillIndexedModificationsInfosToInvalidate(InvalidateNodeInfos inval
814
814
}
815
815
816
816
if (isNodeBuilt && invalidateOnlyChildrenBuildStatus ) {
817
- fillIndexedModificationsInfosToInvalidate (nodeUuid , false , invalidateNodeInfos );
817
+ fillIndexedNodeInfosToInvalidate (nodeUuid , false , invalidateNodeInfos );
818
818
} else {
819
819
NodeEntity closestNodeWithParentHavingBuiltDescendent = getSubTreeToInvalidateIndexedModifications (nodeUuid , rootNetworkUuid );
820
- fillIndexedModificationsInfosToInvalidate (closestNodeWithParentHavingBuiltDescendent .getIdNode (), true , invalidateNodeInfos );
820
+ fillIndexedNodeInfosToInvalidate (closestNodeWithParentHavingBuiltDescendent .getIdNode (), true , invalidateNodeInfos );
821
821
}
822
822
}
823
823
824
+ @ Transactional
825
+ public InvalidateNodeInfos invalidateNode (UUID nodeUuid , UUID rootNetworkUuid ) {
826
+ NodeEntity nodeEntity = getNodeEntity (nodeUuid );
827
+
828
+ InvalidateNodeInfos invalidateNodeInfos = rootNetworkNodeInfoService .invalidateRootNetworkNode (nodeUuid , rootNetworkUuid , true );
829
+
830
+ fillIndexedNodeInfosToInvalidate (nodeEntity , rootNetworkUuid , invalidateNodeInfos );
831
+
832
+ notificationService .emitNodeBuildStatusUpdated (nodeEntity .getStudy ().getId (), List .of (nodeUuid ), rootNetworkUuid );
833
+
834
+ return invalidateNodeInfos ;
835
+ }
836
+
837
+ @ Transactional
838
+ public InvalidateNodeInfos invalidateNodeTree (UUID nodeUuid , UUID rootNetworkUuid , boolean invalidateOnlyChildrenBuildStatus ) {
839
+ NodeEntity nodeEntity = getNodeEntity (nodeUuid );
840
+
841
+ InvalidateNodeInfos invalidateNodeInfos = new InvalidateNodeInfos ();
842
+
843
+ // First node
844
+ if (nodeEntity .getType ().equals (NodeType .NETWORK_MODIFICATION )) {
845
+ invalidateNodeInfos = rootNetworkNodeInfoService .invalidateRootNetworkNode (nodeUuid , rootNetworkUuid , !invalidateOnlyChildrenBuildStatus );
846
+ fillIndexedNodeTreeInfosToInvalidate (nodeEntity , rootNetworkUuid , invalidateNodeInfos );
847
+ }
848
+
849
+ invalidateNodeInfos .add (invalidateChildrenNodes (nodeUuid , rootNetworkUuid ));
850
+
851
+ if (!invalidateNodeInfos .getNodeUuids ().isEmpty ()) {
852
+ notificationService .emitNodeBuildStatusUpdated (nodeEntity .getStudy ().getId (), invalidateNodeInfos .getNodeUuids ().stream ().toList (), rootNetworkUuid );
853
+ }
854
+
855
+ return invalidateNodeInfos ;
856
+ }
857
+
824
858
@ Transactional
825
859
// method used when moving a node to invalidate it without impacting other nodes
826
860
public void invalidateBuildOfNodeOnly (UUID nodeUuid , UUID rootNetworkUuid , boolean invalidateOnlyChildrenBuildStatus , InvalidateNodeInfos invalidateNodeInfos , boolean deleteVoltageInitResults ) {
@@ -840,10 +874,10 @@ public void invalidateBuildOfNodeOnly(UUID nodeUuid, UUID rootNetworkUuid, boole
840
874
if (!hasAnyBuiltChildren (getNodeEntity (nodeUuid ), rootNetworkUuid )) {
841
875
// when invalidating nodes, we need to get last built parent to invalidate all its children modifications in elasticsearch
842
876
NodeEntity closestNodeWithParentHavingBuiltDescendent = getSubTreeToInvalidateIndexedModifications (nodeUuid , rootNetworkUuid );
843
- fillIndexedModificationsInfosToInvalidate (closestNodeWithParentHavingBuiltDescendent .getIdNode (), true , invalidateNodeInfos );
877
+ fillIndexedNodeInfosToInvalidate (closestNodeWithParentHavingBuiltDescendent .getIdNode (), true , invalidateNodeInfos );
844
878
}
845
879
846
- notificationService .emitNodeBuildStatusUpdated (studyId , changedNodes .stream ().distinct ().collect ( Collectors . toList () ), rootNetworkUuid );
880
+ notificationService .emitNodeBuildStatusUpdated (studyId , changedNodes .stream ().distinct ().toList (), rootNetworkUuid );
847
881
}
848
882
849
883
/**
@@ -895,6 +929,46 @@ && hasAnyBuiltChildren(child, rootNetworkUuid, checkedChildren)) {
895
929
return false ;
896
930
}
897
931
932
+ private void fillIndexedNodeInfosToInvalidate (NodeEntity nodeEntity , UUID rootNetworkUuid , InvalidateNodeInfos invalidateNodeInfos ) {
933
+ // when manually invalidating a single node, if this node does not have any built children
934
+ // we need to invalidate indexed modifications up to it's last built parent, not included
935
+ if (hasAnyBuiltChildren (nodeEntity , rootNetworkUuid )) {
936
+ return ;
937
+ }
938
+
939
+ // when invalidating nodes, we need to get last built parent to invalidate all its children modifications in elasticsearch
940
+ NodeEntity closestNodeWithParentHavingBuiltDescendent = getSubTreeToInvalidateIndexedModifications (nodeEntity .getIdNode (), rootNetworkUuid );
941
+ fillIndexedNodeInfosToInvalidate (closestNodeWithParentHavingBuiltDescendent .getIdNode (), true , invalidateNodeInfos );
942
+ }
943
+
944
+ // For subTree
945
+ private void fillIndexedNodeTreeInfosToInvalidate (NodeEntity nodeEntity , UUID rootNetworkUuid , InvalidateNodeInfos invalidateNodeInfos ) {
946
+ // when invalidating node
947
+ // we need to invalidate indexed modifications up to it's last built parent, not included
948
+ boolean isNodeBuilt = self .getNodeBuildStatus (nodeEntity .getIdNode (), rootNetworkUuid ).isBuilt ();
949
+ if (!isNodeBuilt && !hasAnyBuiltChildren (getNodeEntity (nodeEntity .getIdNode ()), rootNetworkUuid )) {
950
+ return ;
951
+ }
952
+
953
+ // TODO check invalidateOnlyChildrenBuildStatus
954
+ if (isNodeBuilt ) {
955
+ fillIndexedNodeInfosToInvalidate (nodeEntity .getIdNode (), false , invalidateNodeInfos );
956
+ } else {
957
+ NodeEntity closestNodeWithParentHavingBuiltDescendent = getSubTreeToInvalidateIndexedModifications (nodeEntity .getIdNode (), rootNetworkUuid );
958
+ fillIndexedNodeInfosToInvalidate (closestNodeWithParentHavingBuiltDescendent .getIdNode (), true , invalidateNodeInfos );
959
+ }
960
+ }
961
+
962
+ private InvalidateNodeInfos invalidateChildrenNodes (UUID nodeUuid , UUID rootNetworkUuid ) {
963
+ InvalidateNodeInfos invalidateNodeInfos = new InvalidateNodeInfos ();
964
+ nodesRepository .findAllByParentNodeIdNode (nodeUuid )
965
+ .forEach (child -> {
966
+ invalidateNodeInfos .add (rootNetworkNodeInfoService .invalidateRootNetworkNode (child .getIdNode (), rootNetworkUuid , true ));
967
+ invalidateNodeInfos .add (invalidateChildrenNodes (child .getIdNode (), rootNetworkUuid ));
968
+ });
969
+ return invalidateNodeInfos ;
970
+ }
971
+
898
972
private void invalidateChildrenBuildStatus (UUID nodeUuid , UUID rootNetworkUuid , List <UUID > changedNodes , InvalidateNodeInfos invalidateNodeInfos ,
899
973
boolean deleteVoltageInitResults ) {
900
974
nodesRepository .findAllByParentNodeIdNode (nodeUuid )
@@ -906,7 +980,6 @@ private void invalidateChildrenBuildStatus(UUID nodeUuid, UUID rootNetworkUuid,
906
980
907
981
@ Transactional
908
982
public void updateNodeBuildStatus (UUID nodeUuid , UUID rootNetworkUuid , NodeBuildStatus nodeBuildStatus ) {
909
- List <UUID > changedNodes = new ArrayList <>();
910
983
UUID studyId = self .getStudyUuidForNodeId (nodeUuid );
911
984
RootNetworkNodeInfoEntity rootNetworkNodeInfoEntity = rootNetworkNodeInfoService .getRootNetworkNodeInfo (nodeUuid , rootNetworkUuid ).orElseThrow (() -> new StudyException (ROOT_NETWORK_NOT_FOUND ));
912
985
NodeEntity nodeEntity = getNodeEntity (nodeUuid );
@@ -932,8 +1005,7 @@ public void updateNodeBuildStatus(UUID nodeUuid, UUID rootNetworkUuid, NodeBuild
932
1005
}
933
1006
934
1007
rootNetworkNodeInfoEntity .setNodeBuildStatus (newNodeStatus );
935
- changedNodes .add (nodeUuid );
936
- notificationService .emitNodeBuildStatusUpdated (studyId , changedNodes , rootNetworkUuid );
1008
+ notificationService .emitNodeBuildStatusUpdated (studyId , List .of (nodeUuid ), rootNetworkUuid );
937
1009
}
938
1010
939
1011
@ Transactional (readOnly = true )
@@ -1034,13 +1106,13 @@ public long countBuiltNodes(UUID studyUuid, UUID rootNetworkUuid) {
1034
1106
return nodes .stream ().filter (n -> self .getNodeBuildStatus (n .getIdNode (), rootNetworkUuid ).isBuilt ()).count ();
1035
1107
}
1036
1108
1037
- private void fillIndexedModificationsInfosToInvalidate (UUID parentNodeUuid , boolean includeParentNode , InvalidateNodeInfos invalidateNodeInfos ) {
1109
+ private void fillIndexedNodeInfosToInvalidate (UUID parentNodeUuid , boolean includeParentNode , InvalidateNodeInfos invalidateNodeInfos ) {
1038
1110
List <UUID > nodesToInvalidate = new ArrayList <>();
1039
1111
if (includeParentNode ) {
1040
1112
nodesToInvalidate .add (parentNodeUuid );
1041
1113
}
1042
1114
nodesToInvalidate .addAll (getChildren (parentNodeUuid ));
1043
- invalidateNodeInfos .addGroupUuid (
1115
+ invalidateNodeInfos .addGroupUuids (
1044
1116
networkModificationNodeInfoRepository .findAllById (nodesToInvalidate ).stream ()
1045
1117
.map (NetworkModificationNodeInfoEntity ::getModificationGroupUuid ).toList ()
1046
1118
);
0 commit comments