X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=renderer%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Frenderer%2FNetworkModelWavelengthServiceImpl.java;h=df0dcb7547e54c9ba34a883df343ef0a9e31433a;hb=e3438cad213946cd76a73219876487c30024dfae;hp=72700afe311175c7380ad098327ac6889ae05bba;hpb=dcb0b2e2f020517a9f08d45bef269c88bdbaf256;p=transportpce.git diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/NetworkModelWavelengthServiceImpl.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/NetworkModelWavelengthServiceImpl.java index 72700afe3..df0dcb754 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/NetworkModelWavelengthServiceImpl.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/NetworkModelWavelengthServiceImpl.java @@ -7,24 +7,27 @@ */ package org.opendaylight.transportpce.renderer; -import com.google.common.base.Optional; - import java.math.BigDecimal; -import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.stream.Collectors; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.mdsal.binding.api.DataBroker; +import org.opendaylight.mdsal.binding.api.ReadTransaction; +import org.opendaylight.mdsal.binding.api.WriteTransaction; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.NetworkUtils; import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.fixedflex.FixedFlexImpl; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev181130.FrequencyGHz; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev181130.FrequencyTHz; +import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.node.attributes.AvailableWavelengths; import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.node.attributes.AvailableWavelengthsKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.used.wavelengths.UsedWavelengths; import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.used.wavelengths.UsedWavelengthsBuilder; @@ -59,10 +62,10 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.O import org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes.AvailableWavelengthsBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev181130.xpdr.port.connection.attributes.Wavelength; import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev181130.xpdr.port.connection.attributes.WavelengthBuilder; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.PathDescription; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.path.description.atoz.direction.AToZ; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.path.description.ztoa.direction.ZToA; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.pce.resource.resource.resource.TerminationPoint; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.PathDescription; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.path.description.atoz.direction.AToZ; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.path.description.ztoa.direction.ZToA; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.pce.resource.resource.resource.TerminationPoint; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId; @@ -74,6 +77,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; +import org.opendaylight.yangtools.yang.common.Uint32; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -88,35 +92,34 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength @Override public void useWavelengths(PathDescription pathDescription) { - List atozTpIds = getAToZTpList(pathDescription); - List ztoaTpIds = getZToATpList(pathDescription); - + atozTpIds.removeIf(Objects::isNull); deleteAvailableWL(atozTpIds.stream().map(NodeIdPair::getNodeID).distinct().collect(Collectors.toList()), - pathDescription.getAToZDirection().getAToZWavelengthNumber()); + pathDescription.getAToZDirection().getAToZWavelengthNumber().toJava()); + List ztoaTpIds = getZToATpList(pathDescription); + ztoaTpIds.removeIf(Objects::isNull); deleteAvailableWL(ztoaTpIds.stream().map(NodeIdPair::getNodeID).distinct().collect(Collectors.toList()), - pathDescription.getZToADirection().getZToAWavelengthNumber()); - - addUsedWL(pathDescription.getAToZDirection().getAToZWavelengthNumber(), atozTpIds); - addUsedWL(pathDescription.getZToADirection().getZToAWavelengthNumber(), ztoaTpIds); + pathDescription.getZToADirection().getZToAWavelengthNumber().toJava()); + addUsedWL(pathDescription.getAToZDirection().getAToZWavelengthNumber().toJava(), atozTpIds); + addUsedWL(pathDescription.getZToADirection().getZToAWavelengthNumber().toJava(), ztoaTpIds); } @Override public void freeWavelengths(PathDescription pathDescription) { List atozTpIds = getAToZTpList(pathDescription); List ztoaTpIds = getZToATpList(pathDescription); - - deleteUsedWL(pathDescription.getAToZDirection().getAToZWavelengthNumber(), atozTpIds); - deleteUsedWL(pathDescription.getZToADirection().getZToAWavelengthNumber(), ztoaTpIds); - + atozTpIds.removeIf(Objects::isNull); + ztoaTpIds.removeIf(Objects::isNull); + deleteUsedWL(pathDescription.getAToZDirection().getAToZWavelengthNumber().toJava(), atozTpIds); + deleteUsedWL(pathDescription.getZToADirection().getZToAWavelengthNumber().toJava(), ztoaTpIds); addAvailableWL(atozTpIds.stream().map(NodeIdPair::getNodeID).distinct().collect(Collectors.toList()), - pathDescription.getAToZDirection().getAToZWavelengthNumber()); + pathDescription.getAToZDirection().getAToZWavelengthNumber().toJava()); addAvailableWL(ztoaTpIds.stream().map(NodeIdPair::getNodeID).distinct().collect(Collectors.toList()), - pathDescription.getZToADirection().getZToAWavelengthNumber()); + pathDescription.getZToADirection().getZToAWavelengthNumber().toJava()); } private List getAToZTpList(PathDescription pathDescription) { - List atozList = pathDescription.getAToZDirection().getAToZ(); + Collection atozList = pathDescription.getAToZDirection().nonnullAToZ().values(); return atozList.stream() .filter(aToZ -> { if ((aToZ.getResource() == null) || (aToZ.getResource().getResource() == null)) { @@ -126,7 +129,8 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength return aToZ.getResource().getResource() instanceof TerminationPoint; }).map(aToZ -> { TerminationPoint tp = (TerminationPoint) aToZ.getResource().getResource(); - if ((tp == null) || (tp.getTpNodeId() == null) || (tp.getTpId() == null)) { + if ((tp == null) || (tp.getTpNodeId() == null) || (tp.getTpId() == null) + || tp.getTpId().isEmpty()) { LOG.warn("Termination point in AToZ node {} contains nulls! Skipping this node!", aToZ.getId()); return null; } @@ -135,7 +139,7 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength } private List getZToATpList(PathDescription pathDescription) { - List ztoaList = pathDescription.getZToADirection().getZToA(); + Collection ztoaList = pathDescription.getZToADirection().nonnullZToA().values(); return ztoaList.stream() .filter(zToA -> { if ((zToA.getResource() == null) || (zToA.getResource().getResource() == null)) { @@ -145,7 +149,8 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength return zToA.getResource().getResource() instanceof TerminationPoint; }).map(zToA -> { TerminationPoint tp = (TerminationPoint) zToA.getResource().getResource(); - if ((tp == null) || (tp.getTpNodeId() == null) || (tp.getTpId() == null)) { + if ((tp == null) || (tp.getTpNodeId() == null) || (tp.getTpId() == null) + || tp.getTpId().isEmpty()) { LOG.warn("Termination point in ZToA node {} contains nulls! Skipping this node!", zToA.getId()); return null; } @@ -161,16 +166,41 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength .Node.class, new NodeKey(new NodeId(nodeId))).augmentation(Node1.class).build(); } + private InstanceIdentifier createNode2IID(String nodeId) { + return InstanceIdentifier + .builder(Networks.class).child(Network.class, new NetworkKey( + new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) + .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network + .Node.class, new NodeKey(new NodeId(nodeId))).augmentation(org.opendaylight.yang.gen.v1.http.org + .openroadm.common.network.rev181130.Node1.class).build(); + } + private Optional getNode1FromDatastore(String nodeId) { InstanceIdentifier nodeIID = createNode1IID(nodeId); Optional nodeOpt; - try (ReadOnlyTransaction nodeReadTx = this.dataBroker.newReadOnlyTransaction()) { + try (ReadTransaction nodeReadTx = this.dataBroker.newReadOnlyTransaction()) { + nodeOpt = nodeReadTx.read(LogicalDatastoreType.CONFIGURATION, nodeIID) + .get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + LOG.warn("Exception while getting node from {} topology!", NetworkUtils.OVERLAY_NETWORK_ID, e); + nodeOpt = Optional.empty(); + } + return nodeOpt; + } + + private Optional getNode2FromDatastore(String nodeId) { + InstanceIdentifier + nodeIID = createNode2IID(nodeId); + Optional nodeOpt; + try (ReadTransaction nodeReadTx = this.dataBroker.newReadOnlyTransaction()) { nodeOpt = nodeReadTx.read(LogicalDatastoreType.CONFIGURATION, nodeIID) .get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS); } catch (InterruptedException | ExecutionException | TimeoutException e) { LOG.warn("Exception while getting node from {} topology!", NetworkUtils.OVERLAY_NETWORK_ID, e); - nodeOpt = Optional.absent(); + nodeOpt = Optional.empty(); } return nodeOpt; } @@ -178,54 +208,67 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength private void addAvailableWL(List nodeIds, Long wavelengthNumber) { WriteTransaction nodeWriteTx = this.dataBroker.newWriteOnlyTransaction(); for (String nodeId : nodeIds) { - Optional nodeOpt = - getNode1FromDatastore(nodeId); - Node1 node; - if (nodeOpt.isPresent()) { - node = nodeOpt.get(); + Optional node1Opt = getNode1FromDatastore(nodeId); + Node1 node1; + Optional node2Opt = + getNode2FromDatastore(nodeId); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1 node2; + if (node2Opt.isPresent()) { + node2 = node2Opt.get(); } else { - LOG.error("Unable to get node {} from topology {}! Skipping addition of available wavelength for this" - + "node.", nodeId, NetworkUtils.OVERLAY_NETWORK_ID); + LOG.error("Unable to get common-network node {} from topology {}! Skipping addition of available" + + "wavelength for this node.", nodeId, NetworkUtils.OVERLAY_NETWORK_ID); + continue; + } + if (node1Opt.isPresent()) { + node1 = node1Opt.get(); + } else { + LOG.error("Unable to get network-topology node {} from topology {}! Skipping addition of available" + + "wavelength for this node.", nodeId, NetworkUtils.OVERLAY_NETWORK_ID); continue; } - Node1Builder node1Builder = new Node1Builder(node); - - switch (node.getNodeType()) { + Node1Builder node1Builder = new Node1Builder(node1); + switch (node2.getNodeType()) { case DEGREE: - DegreeAttributes degreeAttributes = node.getDegreeAttributes(); + DegreeAttributes degreeAttributes = node1.getDegreeAttributes(); DegreeAttributesBuilder degreeAttributesBuilder; if (degreeAttributes == null) { degreeAttributesBuilder = new DegreeAttributesBuilder(); } else { degreeAttributesBuilder = new DegreeAttributesBuilder(degreeAttributes); } - List availableDegreeWLs = - degreeAttributesBuilder.getAvailableWavelengths(); - if (availableDegreeWLs == null) { - availableDegreeWLs = new ArrayList<>(); - degreeAttributesBuilder.setAvailableWavelengths(availableDegreeWLs); - } - availableDegreeWLs.add(new org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree - .node.attributes.AvailableWavelengthsBuilder().setIndex(wavelengthNumber).build()); + Map availableDegreeWLs = new HashMap<>(); + availableDegreeWLs.putAll(degreeAttributesBuilder.getAvailableWavelengths()); + AvailableWavelengths availableWaveLength = + new org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.node.attributes + .AvailableWavelengthsBuilder().setIndex(Uint32.valueOf(wavelengthNumber)).build(); + availableDegreeWLs.put(availableWaveLength.key(), availableWaveLength); + degreeAttributesBuilder.setAvailableWavelengths(availableDegreeWLs); node1Builder.setDegreeAttributes(degreeAttributesBuilder.build()); break; case SRG: - SrgAttributes srgAttributes = node.getSrgAttributes(); + SrgAttributes srgAttributes = node1.getSrgAttributes(); SrgAttributesBuilder srgAttributesBuilder; if (srgAttributes == null) { srgAttributesBuilder = new SrgAttributesBuilder(); } else { srgAttributesBuilder = new SrgAttributesBuilder(srgAttributes); } - List availableSrgWLs = srgAttributesBuilder.getAvailableWavelengths(); - if (availableSrgWLs == null) { - availableSrgWLs = new ArrayList<>(); - srgAttributesBuilder.setAvailableWavelengths(availableSrgWLs); - } - availableSrgWLs.add(new AvailableWavelengthsBuilder().setIndex(wavelengthNumber).build()); + Map availableSrgWLs = new HashMap<>(); + availableSrgWLs.putAll(srgAttributesBuilder.getAvailableWavelengths()); + org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130 + .srg.node.attributes.AvailableWavelengths aval = + new AvailableWavelengthsBuilder().setIndex(Uint32.valueOf(wavelengthNumber)) + .build(); + availableSrgWLs.put(aval.key(),aval); + srgAttributesBuilder.setAvailableWavelengths(availableSrgWLs); node1Builder.setSrgAttributes(srgAttributesBuilder.build()); break; @@ -233,10 +276,10 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength // TODO skip for now continue; } - nodeWriteTx.put(LogicalDatastoreType.CONFIGURATION, createNode1IID(nodeId), node1Builder.build(), true); + nodeWriteTx.put(LogicalDatastoreType.CONFIGURATION, createNode1IID(nodeId), node1Builder.build()); } try { - nodeWriteTx.submit().get(Timeouts.DATASTORE_DELETE, TimeUnit.MILLISECONDS); + nodeWriteTx.commit().get(Timeouts.DATASTORE_DELETE, TimeUnit.MILLISECONDS); } catch (InterruptedException | ExecutionException | TimeoutException e) { LOG.error("Unable to add available WL {} for nodes {}!", wavelengthNumber, String.join(", ", nodeIds), e); } @@ -245,13 +288,15 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength private void deleteAvailableWL(List nodeIds, Long wavelengthNumber) { WriteTransaction nodeWriteTx = this.dataBroker.newWriteOnlyTransaction(); for (String nodeId : nodeIds) { - Optional nodeOpt = getNode1FromDatastore(nodeId); - Node1 node; + Optional nodeOpt = + getNode2FromDatastore(nodeId); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1 node; if (nodeOpt.isPresent()) { node = nodeOpt.get(); } else { - LOG.error("Unable to get node {} from topology {}! Skipping addition of available wavelength for this" - + "node.", nodeId, NetworkUtils.OVERLAY_NETWORK_ID); + LOG.error( + "Unable to get node {} from topology {}! Skipping addition of available wavelength for this node.", + nodeId, NetworkUtils.OVERLAY_NETWORK_ID); continue; } @@ -261,11 +306,13 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength InstanceIdentifier availableWlIID; switch (node.getNodeType()) { + //switch (((org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1) node) + // .getNodeType()) { case DEGREE: availableWlIID = nodeIIDBuilder.child(DegreeAttributes.class) .child(org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.degree.node .attributes.AvailableWavelengths.class, - new AvailableWavelengthsKey(wavelengthNumber)) + new AvailableWavelengthsKey(Uint32.valueOf(wavelengthNumber))) .build(); break; case SRG: @@ -273,7 +320,7 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength .child(org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node.attributes .AvailableWavelengths.class, new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.srg.node - .attributes.AvailableWavelengthsKey(wavelengthNumber)) + .attributes.AvailableWavelengthsKey(Uint32.valueOf(wavelengthNumber))) .build(); break; @@ -284,7 +331,7 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength nodeWriteTx.delete(LogicalDatastoreType.CONFIGURATION, availableWlIID); } try { - nodeWriteTx.submit().get(Timeouts.DATASTORE_DELETE, TimeUnit.MILLISECONDS); + nodeWriteTx.commit().get(Timeouts.DATASTORE_DELETE, TimeUnit.MILLISECONDS); } catch (InterruptedException | ExecutionException | TimeoutException e) { LOG.error("Unable to delete available WL {} for nodes {}!", wavelengthNumber, String.join(", ", nodeIds), e); @@ -302,16 +349,45 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength .augmentation(TerminationPoint1.class); } + private InstanceIdentifierBuilder createTerminationPoint2IIDBuilder(String nodeId, String tpId) { + return InstanceIdentifier + .builder(Networks.class).child(Network.class, new NetworkKey( + new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))).child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml + .ns.yang.ietf.network.rev180226.networks.network.Node.class, new NodeKey(new NodeId(nodeId))) + .augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226 + .Node1.class).child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology + .rev180226.networks.network.node.TerminationPoint.class, new TerminationPointKey(new TpId(tpId))) + .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130 + .TerminationPoint1.class); + } + private Optional getTerminationPoint1FromDatastore(String nodeId, String tpId) { InstanceIdentifier tpIID = createTerminationPoint1IIDBuilder(nodeId, tpId).build(); Optional tpOpt; - try (ReadOnlyTransaction readTx = this.dataBroker.newReadOnlyTransaction()) { + try (ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction()) { tpOpt = readTx.read(LogicalDatastoreType.CONFIGURATION, tpIID) .get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS); } catch (InterruptedException | ExecutionException | TimeoutException e) { LOG.warn("Exception while getting termination point from {} topology!", NetworkUtils.OVERLAY_NETWORK_ID, e); - tpOpt = Optional.absent(); + tpOpt = Optional.empty(); + } + return tpOpt; + } + + private Optional getTerminationPoint2FromDatastore(String nodeId, String tpId) { + InstanceIdentifier tpIID = createTerminationPoint2IIDBuilder(nodeId, tpId).build(); + Optional tpOpt; + try (ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction()) { + tpOpt = readTx.read(LogicalDatastoreType.CONFIGURATION, tpIID) + .get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + LOG.warn("Exception while getting termination point from {} topology!", NetworkUtils.OVERLAY_NETWORK_ID, + e); + tpOpt = Optional.empty(); } return tpOpt; } @@ -319,11 +395,14 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength private void deleteUsedWL(long wavelengthIndex, List tpIds) { WriteTransaction deleteUsedWlTx = this.dataBroker.newWriteOnlyTransaction(); for (NodeIdPair idPair : tpIds) { - Optional tpOpt = getTerminationPoint1FromDatastore(idPair.getNodeID(), idPair.getTpID()); + Optional tp2Opt = getTerminationPoint2FromDatastore(idPair.getNodeID(), idPair.getTpID()); OpenroadmTpType tpType; - if (tpOpt.isPresent()) { - tpType = tpOpt.get().getTpType(); + if (tp2Opt.isPresent()) { + tpType = tp2Opt.get().getTpType(); + // ((org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1) + // tpOpt.get()).getTpType(); } else { LOG.error("Unable to get termination point {} from topology {}! Skipping removal of used wavelength" + " for this node.", idPair.getTpID(), NetworkUtils.OVERLAY_NETWORK_ID); @@ -336,19 +415,19 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength case DEGREETXTTP: case DEGREETXRXTTP: usedWlIID = usedWlIIDBuilder.child(TxTtpAttributes.class).child(UsedWavelengths.class, - new UsedWavelengthsKey(wavelengthIndex)).build(); + new UsedWavelengthsKey(Uint32.valueOf(wavelengthIndex))).build(); break; case DEGREERXTTP: usedWlIID = usedWlIIDBuilder.child(RxTtpAttributes.class).child(UsedWavelengths.class, - new UsedWavelengthsKey(wavelengthIndex)).build(); + new UsedWavelengthsKey(Uint32.valueOf(wavelengthIndex))).build(); break; case DEGREETXCTP: case DEGREERXCTP: case DEGREETXRXCTP: usedWlIID = usedWlIIDBuilder.child(CtpAttributes.class).child(UsedWavelengths.class, - new UsedWavelengthsKey(wavelengthIndex)).build(); + new UsedWavelengthsKey(Uint32.valueOf(wavelengthIndex))).build(); break; case SRGTXCP: @@ -358,14 +437,14 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength .openroadm.network.topology.rev181130.networks.network.node.termination.point.cp.attributes .UsedWavelengths.class, new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology .rev181130.networks.network.node.termination.point.cp.attributes - .UsedWavelengthsKey(wavelengthIndex)).build(); + .UsedWavelengthsKey(Uint32.valueOf(wavelengthIndex))).build(); break; case SRGTXRXPP: case SRGRXPP: case SRGTXPP: usedWlIID = usedWlIIDBuilder.child(PpAttributes.class).child(UsedWavelength.class, - new UsedWavelengthKey(wavelengthIndex)).build(); + new UsedWavelengthKey(Uint32.valueOf(wavelengthIndex))).build(); break; case XPONDERNETWORK: @@ -385,7 +464,7 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength deleteUsedWlTx.delete(LogicalDatastoreType.CONFIGURATION, usedWlIID); } try { - deleteUsedWlTx.submit().get(Timeouts.DATASTORE_DELETE, TimeUnit.MILLISECONDS); + deleteUsedWlTx.commit().get(Timeouts.DATASTORE_DELETE, TimeUnit.MILLISECONDS); } catch (InterruptedException | ExecutionException | TimeoutException e) { List tpIdsString = tpIds.stream().map(NodeIdPair::toString).collect(Collectors.toList()); LOG.error("Unable to delete used WL {} from TPs {}!", wavelengthIndex, String.join(", ", tpIdsString), e); @@ -395,148 +474,182 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength private void addUsedWL(long wavelengthIndex, List tpIds) { WriteTransaction addUsedWlTx = this.dataBroker.newWriteOnlyTransaction(); FixedFlexImpl fixedFlex = new FixedFlexImpl(wavelengthIndex); - FrequencyGHz frequencyGHz = new FrequencyGHz(new BigDecimal(fixedFlex.getWavelength())); - FrequencyTHz frequencyTHz = new FrequencyTHz(new BigDecimal(fixedFlex.getCenterFrequency())); + FrequencyTHz centralTHz = new FrequencyTHz(new BigDecimal(fixedFlex.getCenterFrequency())); for (NodeIdPair idPair : tpIds) { - Optional tpOpt = getTerminationPoint1FromDatastore(idPair.getNodeID(), idPair.getTpID()); - - TerminationPoint1 tp; - if (tpOpt.isPresent()) { - tp = tpOpt.get(); + Optional tp1Opt = + getTerminationPoint1FromDatastore(idPair.getNodeID(), idPair.getTpID()); + TerminationPoint1 tp1 = null; + Optional tp2Opt = getTerminationPoint2FromDatastore(idPair.getNodeID(), idPair.getTpID()); + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1 tp2; + if (tp2Opt.isPresent()) { + tp2 = tp2Opt.get(); } else { - LOG.error("Unable to get termination point {} from topology {}! Skipping removal of used wavelength" - + " for this node.", idPair.getTpID(), NetworkUtils.OVERLAY_NETWORK_ID); + LOG.error( + "Unable to get common-network termination point {} from topology {}! Skip removal of used" + + "wavelength for the node", idPair.getTpID(), NetworkUtils.OVERLAY_NETWORK_ID); continue; } + TerminationPoint1Builder tp1Builder; + if (tp1Opt.isPresent()) { + tp1 = tp1Opt.get(); + tp1Builder = new TerminationPoint1Builder(tp1); + } else { + tp1Builder = new TerminationPoint1Builder(); + } - TerminationPoint1Builder tp1Builder = new TerminationPoint1Builder(tp); - - switch (tp.getTpType()) { + UsedWavelengths usedWaveLength = new UsedWavelengthsBuilder().setIndex(Uint32.valueOf(wavelengthIndex)) + .setFrequency(centralTHz).setWidth(FrequencyGHz.getDefaultInstance("40")).build(); + switch (tp2.getTpType()) { + //switch (((org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.TerminationPoint1) tp) + // .getTpType()) { case DEGREETXTTP: case DEGREETXRXTTP: - TxTtpAttributes txTtpAttributes = tp.getTxTtpAttributes(); + TxTtpAttributes txTtpAttributes = null; + Map usedDegreeTxTtpWls; + if (tp1 != null) { + txTtpAttributes = tp1.getTxTtpAttributes(); + } TxTtpAttributesBuilder txTtpAttributesBuilder; + usedDegreeTxTtpWls = new HashMap<>(); if (txTtpAttributes == null) { txTtpAttributesBuilder = new TxTtpAttributesBuilder(); } else { txTtpAttributesBuilder = new TxTtpAttributesBuilder(txTtpAttributes); + usedDegreeTxTtpWls.putAll(txTtpAttributesBuilder.getUsedWavelengths()); } - List usedDegreeTxTtpWls = txTtpAttributesBuilder.getUsedWavelengths(); - if (usedDegreeTxTtpWls == null) { - usedDegreeTxTtpWls = new ArrayList<>(); - txTtpAttributesBuilder.setUsedWavelengths(usedDegreeTxTtpWls); - } - usedDegreeTxTtpWls.add(new UsedWavelengthsBuilder().setIndex(wavelengthIndex).build()); + usedDegreeTxTtpWls.put(usedWaveLength.key(),usedWaveLength); + txTtpAttributesBuilder.setUsedWavelengths(usedDegreeTxTtpWls); tp1Builder.setTxTtpAttributes(txTtpAttributesBuilder.build()); break; case DEGREERXTTP: - RxTtpAttributes rxTtpAttributes = tp.getRxTtpAttributes(); + RxTtpAttributes rxTtpAttributes = null; + Map usedDegreeRxTtpWls; + if (tp1 != null) { + rxTtpAttributes = tp1.getRxTtpAttributes(); + } RxTtpAttributesBuilder rxTtpAttributesBuilder; + usedDegreeRxTtpWls = new HashMap<>(); if (rxTtpAttributes == null) { rxTtpAttributesBuilder = new RxTtpAttributesBuilder(); } else { rxTtpAttributesBuilder = new RxTtpAttributesBuilder(rxTtpAttributes); + usedDegreeRxTtpWls.putAll(rxTtpAttributesBuilder.getUsedWavelengths()); } - List usedDegreeRxTtpWls = rxTtpAttributesBuilder.getUsedWavelengths(); - if (usedDegreeRxTtpWls == null) { - usedDegreeRxTtpWls = new ArrayList<>(); - rxTtpAttributesBuilder.setUsedWavelengths(usedDegreeRxTtpWls); - } - usedDegreeRxTtpWls.add(new UsedWavelengthsBuilder().setIndex(wavelengthIndex).build()); + usedDegreeRxTtpWls.put(usedWaveLength.key(),usedWaveLength); + rxTtpAttributesBuilder.setUsedWavelengths(usedDegreeRxTtpWls); tp1Builder.setRxTtpAttributes(rxTtpAttributesBuilder.build()); break; case DEGREETXCTP: case DEGREERXCTP: case DEGREETXRXCTP: - CtpAttributes ctpAttributes = tp.getCtpAttributes(); + CtpAttributes ctpAttributes = null; + Map usedDegreeCtpWls; + if (tp1 != null) { + ctpAttributes = tp1.getCtpAttributes(); + } CtpAttributesBuilder ctpAttributesBuilder; + usedDegreeCtpWls = new HashMap<>(); if (ctpAttributes == null) { ctpAttributesBuilder = new CtpAttributesBuilder(); } else { ctpAttributesBuilder = new CtpAttributesBuilder(ctpAttributes); + usedDegreeCtpWls.putAll(ctpAttributesBuilder.getUsedWavelengths()); } - List usedDegreeCtpWls = ctpAttributesBuilder.getUsedWavelengths(); - if (usedDegreeCtpWls == null) { - usedDegreeCtpWls = new ArrayList<>(); - ctpAttributesBuilder.setUsedWavelengths(usedDegreeCtpWls); - } - usedDegreeCtpWls.add(new UsedWavelengthsBuilder().setIndex(wavelengthIndex).build()); + usedDegreeCtpWls.put(usedWaveLength.key(),usedWaveLength); + ctpAttributesBuilder.setUsedWavelengths(usedDegreeCtpWls); tp1Builder.setCtpAttributes(ctpAttributesBuilder.build()); break; case SRGTXCP: case SRGRXCP: case SRGTXRXCP: - CpAttributes cpAttributes = tp.getCpAttributes(); + CpAttributes cpAttributes = null; + Map usedDegreeCpWls; + if (tp1 != null) { + cpAttributes = tp1.getCpAttributes(); + } CpAttributesBuilder cpAttributesBuilder; + usedDegreeCpWls = new HashMap<>(); if (cpAttributes == null) { cpAttributesBuilder = new CpAttributesBuilder(); } else { cpAttributesBuilder = new CpAttributesBuilder(cpAttributes); + usedDegreeCpWls.putAll(cpAttributesBuilder.getUsedWavelengths()); } - List usedDegreeCpWls = cpAttributesBuilder - .getUsedWavelengths(); - if (usedDegreeCpWls == null) { - usedDegreeCpWls = new ArrayList<>(); - cpAttributesBuilder.setUsedWavelengths(usedDegreeCpWls); - } - usedDegreeCpWls.add(new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130 - .networks.network.node.termination.point.cp.attributes.UsedWavelengthsBuilder() - .setIndex(wavelengthIndex).build()); + org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks + .network.node.termination.point.cp.attributes.UsedWavelengths cpUsedWaveLength = + new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130 + .networks.network.node.termination.point.cp.attributes.UsedWavelengthsBuilder() + .setIndex(Uint32.valueOf(wavelengthIndex)) + .setFrequency(centralTHz).setWidth(FrequencyGHz.getDefaultInstance("40")).build(); + usedDegreeCpWls.put(cpUsedWaveLength.key(),cpUsedWaveLength); + cpAttributesBuilder.setUsedWavelengths(usedDegreeCpWls); tp1Builder.setCpAttributes(cpAttributesBuilder.build()); break; case SRGTXRXPP: case SRGRXPP: case SRGTXPP: - PpAttributes ppAttributes = tp.getPpAttributes(); + PpAttributes ppAttributes = null; + Map usedDegreePpWls; + if (tp1 != null) { + ppAttributes = tp1.getPpAttributes(); + } PpAttributesBuilder ppAttributesBuilder; + usedDegreePpWls = new HashMap<>(); if (ppAttributes == null) { ppAttributesBuilder = new PpAttributesBuilder(); } else { ppAttributesBuilder = new PpAttributesBuilder(ppAttributes); + usedDegreePpWls.putAll(ppAttributesBuilder.getUsedWavelength()); } - List usedDegreePpWls = ppAttributesBuilder.getUsedWavelength(); - if (usedDegreePpWls == null) { - usedDegreePpWls = new ArrayList<>(); - ppAttributesBuilder.setUsedWavelength(usedDegreePpWls); - } - usedDegreePpWls.add(new UsedWavelengthBuilder().setIndex(wavelengthIndex).build()); + UsedWavelength usedDegreeWaveLength = new UsedWavelengthBuilder() + .setIndex(Uint32.valueOf(wavelengthIndex)) + .setFrequency(centralTHz).setWidth(FrequencyGHz.getDefaultInstance("40")).build(); + usedDegreePpWls.put(usedDegreeWaveLength.key(),usedDegreeWaveLength); + ppAttributesBuilder.setUsedWavelength(usedDegreePpWls); tp1Builder.setPpAttributes(ppAttributesBuilder.build()); break; case XPONDERNETWORK: - XpdrNetworkAttributes xpdrNetworkAttributes = tp.getXpdrNetworkAttributes(); + XpdrNetworkAttributes xpdrNetworkAttributes = null; + if (tp1 != null) { + xpdrNetworkAttributes = tp1.getXpdrNetworkAttributes(); + } XpdrNetworkAttributesBuilder xpdrNetworkAttributesBuilder; if (xpdrNetworkAttributes == null) { xpdrNetworkAttributesBuilder = new XpdrNetworkAttributesBuilder(); } else { xpdrNetworkAttributesBuilder = new XpdrNetworkAttributesBuilder(xpdrNetworkAttributes); } - Wavelength usedXpdrNetworkWl = new WavelengthBuilder().setWidth(frequencyGHz) - .setFrequency(frequencyTHz).build(); - tp1Builder.setXpdrNetworkAttributes(xpdrNetworkAttributesBuilder - .setWavelength(usedXpdrNetworkWl) - .build()); + Wavelength usedXpdrNetworkWl = new WavelengthBuilder() + .setWidth(FrequencyGHz.getDefaultInstance("40")).setFrequency(centralTHz).build(); + tp1Builder.setXpdrNetworkAttributes(xpdrNetworkAttributesBuilder.setWavelength(usedXpdrNetworkWl) + .build()); break; case XPONDERCLIENT: break; case XPONDERPORT: - XpdrPortAttributes xpdrPortAttributes = tp.getXpdrPortAttributes(); + XpdrPortAttributes xpdrPortAttributes = null; + if (tp1 != null) { + xpdrPortAttributes = tp1.getXpdrPortAttributes(); + } XpdrPortAttributesBuilder xpdrPortAttributesBuilder; if (xpdrPortAttributes == null) { xpdrPortAttributesBuilder = new XpdrPortAttributesBuilder(); } else { xpdrPortAttributesBuilder = new XpdrPortAttributesBuilder(xpdrPortAttributes); } - Wavelength usedXpdrPortWl = new WavelengthBuilder().setWidth(frequencyGHz) - .setFrequency(frequencyTHz).build(); - tp1Builder.setXpdrPortAttributes(xpdrPortAttributesBuilder - .setWavelength(usedXpdrPortWl) - .build()); + Wavelength usedXpdrPortWl = new WavelengthBuilder().setWidth(FrequencyGHz.getDefaultInstance("40")) + .setFrequency(centralTHz).build(); + tp1Builder.setXpdrPortAttributes(xpdrPortAttributesBuilder.setWavelength(usedXpdrPortWl) + .build()); break; default: @@ -544,10 +657,10 @@ public class NetworkModelWavelengthServiceImpl implements NetworkModelWavelength continue; } addUsedWlTx.put(LogicalDatastoreType.CONFIGURATION, createTerminationPoint1IIDBuilder(idPair.getNodeID(), - idPair.getTpID()).build(), tp1Builder.build(), true); + idPair.getTpID()).build(), tp1Builder.build()); } try { - addUsedWlTx.submit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS); + addUsedWlTx.commit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS); } catch (InterruptedException | ExecutionException | TimeoutException e) { List tpIdsString = tpIds.stream().map(NodeIdPair::toString).collect(Collectors.toList()); LOG.error("Unable to add used WL {} for TPs {}!", wavelengthIndex, String.join(", ", tpIdsString), e);