From: Jonas MÃ¥rtensson Date: Fri, 4 Feb 2022 10:28:20 +0000 (+0100) Subject: Keep AvailFreqMaps when netconf session restores X-Git-Tag: 4.3.0~56 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=transportpce.git;a=commitdiff_plain;h=80ef252ab7e7152dde093a2dad240180be409861 Keep AvailFreqMaps when netconf session restores When the netconf session with a ROADM went down and then it came up again, the node was re-created in the openroadm topology, resetting the available frequencies bitmaps for both degrees and SRGs. This meant that the PCE could allocate already used spectrum for new services, disrupting existing services. When creating a new node, first check if it already exists in the portmapping, and if so, don't initialize available frequencies. JIRA: TRNSPRTPCE-594 Signed-off-by: Jonas MÃ¥rtensson Change-Id: I62f581ed4247b594b14f7c3769e4053b5f23116b --- diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelServiceImpl.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelServiceImpl.java index 6bfdb0397..81276557c 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelServiceImpl.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelServiceImpl.java @@ -108,6 +108,14 @@ public class NetworkModelServiceImpl implements NetworkModelService { try { LOG.info("createOpenROADMNode: {} ", nodeId); + boolean firstMount; + if (portMapping.getNode(nodeId) == null) { + firstMount = true; + } else { + LOG.info("{} already exists in portmapping but was reconnected", nodeId); + firstMount = false; + } + if (!portMapping.createMappingData(nodeId, openRoadmVersion)) { LOG.warn("Could not generate port mapping for {} skipping network model creation", nodeId); return; @@ -133,7 +141,8 @@ public class NetworkModelServiceImpl implements NetworkModelService { openroadmNetworkNode); // nodes/links creation in openroadm-topology - TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(portMapping.getNode(nodeId)); + TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(portMapping.getNode(nodeId), + firstMount); if (topologyShard != null) { this.topologyShardMountedDevice.put(nodeId, topologyShard); for (Node openRoadmTopologyNode : topologyShard.getNodes()) { diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java index 2423b9af9..81e5ed563 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java @@ -76,6 +76,10 @@ public final class OpenRoadmTopology { } public static TopologyShard createTopologyShard(Nodes mappingNode) { + return createTopologyShard(mappingNode, true); + } + + public static TopologyShard createTopologyShard(Nodes mappingNode, boolean firstMount) { int numOfDegrees; int numOfSrgs; List nodes = new ArrayList<>(); @@ -111,13 +115,13 @@ public final class OpenRoadmTopology { // create degree nodes for (Map.Entry> entry : mapDeg.entrySet()) { NodeBuilder ietfNode = createDegree(entry.getKey(), entry.getValue(), mappingNode.getNodeId(), - mappingNode.getNodeInfo().getNodeClli()); + mappingNode.getNodeInfo().getNodeClli(), firstMount); nodes.add(ietfNode.build()); } // create srg nodes for (Map.Entry> entry : mapSrg.entrySet()) { NodeBuilder ietfNode = createSrg(entry.getKey(), entry.getValue(), mappingNode.getNodeId(), - mappingNode.getNodeInfo().getNodeClli()); + mappingNode.getNodeInfo().getNodeClli(), firstMount); nodes.add(ietfNode.build()); } @@ -243,7 +247,8 @@ public final class OpenRoadmTopology { return ietfNodeBldr; } - private static NodeBuilder createDegree(String degNb, List degListMap, String nodeId, String clli) { + private static NodeBuilder createDegree(String degNb, List degListMap, String nodeId, String clli, + boolean firstMount) { // Create tp-list Map tpMap = new HashMap<>(); TerminationPointBuilder ietfTpBldr; @@ -286,10 +291,12 @@ public final class OpenRoadmTopology { TerminationPoint ietfTp = ietfTpBldr.build(); tpMap.put(ietfTp.key(),ietfTp); // set degree-attributes - DegreeAttributes degAtt = new DegreeAttributesBuilder() - .setDegreeNumber(Uint16.valueOf(degNb.split("DEG")[1])) - .setAvailFreqMaps(GridUtils.initFreqMaps4FixedGrid2Available()) - .build(); + DegreeAttributesBuilder degAttBldr = new DegreeAttributesBuilder() + .setDegreeNumber(Uint16.valueOf(degNb.split("DEG")[1])); + if (firstMount) { + degAttBldr.setAvailFreqMaps(GridUtils.initFreqMaps4FixedGrid2Available()); + } + DegreeAttributes degAtt = degAttBldr.build(); // Create ietf node augmentation to support ietf tp-list org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 @@ -313,7 +320,8 @@ public final class OpenRoadmTopology { .addAugmentation(ietfNode1.build()); } - private static NodeBuilder createSrg(String srgNb, List srgListMap, String nodeId, String clli) { + private static NodeBuilder createSrg(String srgNb, List srgListMap, String nodeId, String clli, + boolean firstMount) { // Create tp-list Map tpMap = new HashMap<>(); TerminationPointBuilder ietfTpBldr; @@ -363,8 +371,11 @@ public final class OpenRoadmTopology { .setOperationalState(State.InService) .build(); // set srg-attributes - SrgAttributes srgAttr = new SrgAttributesBuilder() - .setAvailFreqMaps(GridUtils.initFreqMaps4FixedGrid2Available()).build(); + SrgAttributesBuilder srgAttrBldr = new SrgAttributesBuilder(); + if (firstMount) { + srgAttrBldr.setAvailFreqMaps(GridUtils.initFreqMaps4FixedGrid2Available()); + } + SrgAttributes srgAttr = srgAttrBldr.build(); Node1 ontNode1 = new Node1Builder().setSrgAttributes(srgAttr).build(); // Create ietf node augmentation to support ietf tp-list org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder