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 <jonas.martensson@ri.se>
Change-Id: I62f581ed4247b594b14f7c3769e4053b5f23116b
try {
LOG.info("createOpenROADMNode: {} ", nodeId);
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;
if (!portMapping.createMappingData(nodeId, openRoadmVersion)) {
LOG.warn("Could not generate port mapping for {} skipping network model creation", nodeId);
return;
openroadmNetworkNode);
// nodes/links creation in openroadm-topology
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()) {
if (topologyShard != null) {
this.topologyShardMountedDevice.put(nodeId, topologyShard);
for (Node openRoadmTopologyNode : topologyShard.getNodes()) {
}
public static TopologyShard createTopologyShard(Nodes mappingNode) {
}
public static TopologyShard createTopologyShard(Nodes mappingNode) {
+ return createTopologyShard(mappingNode, true);
+ }
+
+ public static TopologyShard createTopologyShard(Nodes mappingNode, boolean firstMount) {
int numOfDegrees;
int numOfSrgs;
List<Node> nodes = new ArrayList<>();
int numOfDegrees;
int numOfSrgs;
List<Node> nodes = new ArrayList<>();
// create degree nodes
for (Map.Entry<String, List<Mapping>> entry : mapDeg.entrySet()) {
NodeBuilder ietfNode = createDegree(entry.getKey(), entry.getValue(), mappingNode.getNodeId(),
// create degree nodes
for (Map.Entry<String, List<Mapping>> 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<String, List<Mapping>> entry : mapSrg.entrySet()) {
NodeBuilder ietfNode = createSrg(entry.getKey(), entry.getValue(), mappingNode.getNodeId(),
nodes.add(ietfNode.build());
}
// create srg nodes
for (Map.Entry<String, List<Mapping>> entry : mapSrg.entrySet()) {
NodeBuilder ietfNode = createSrg(entry.getKey(), entry.getValue(), mappingNode.getNodeId(),
- mappingNode.getNodeInfo().getNodeClli());
+ mappingNode.getNodeInfo().getNodeClli(), firstMount);
nodes.add(ietfNode.build());
}
nodes.add(ietfNode.build());
}
- private static NodeBuilder createDegree(String degNb, List<Mapping> degListMap, String nodeId, String clli) {
+ private static NodeBuilder createDegree(String degNb, List<Mapping> degListMap, String nodeId, String clli,
+ boolean firstMount) {
// Create tp-list
Map<TerminationPointKey,TerminationPoint> tpMap = new HashMap<>();
TerminationPointBuilder ietfTpBldr;
// Create tp-list
Map<TerminationPointKey,TerminationPoint> tpMap = new HashMap<>();
TerminationPointBuilder ietfTpBldr;
TerminationPoint ietfTp = ietfTpBldr.build();
tpMap.put(ietfTp.key(),ietfTp);
// set degree-attributes
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
// 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
.addAugmentation(ietfNode1.build());
}
.addAugmentation(ietfNode1.build());
}
- private static NodeBuilder createSrg(String srgNb, List<Mapping> srgListMap, String nodeId, String clli) {
+ private static NodeBuilder createSrg(String srgNb, List<Mapping> srgListMap, String nodeId, String clli,
+ boolean firstMount) {
// Create tp-list
Map<TerminationPointKey,TerminationPoint> tpMap = new HashMap<>();
TerminationPointBuilder ietfTpBldr;
// Create tp-list
Map<TerminationPointKey,TerminationPoint> tpMap = new HashMap<>();
TerminationPointBuilder ietfTpBldr;
.setOperationalState(State.InService)
.build();
// set srg-attributes
.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
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