From da95959416e1605515a0ce6beca2a2ccabc75e7b Mon Sep 17 00:00:00 2001 From: Gilles Thouenon Date: Fri, 1 Oct 2021 15:08:30 +0200 Subject: [PATCH] Modify OpenRoadmInterfaces implementations When we create a new interface on a device, we need to take into account this new interface just after the mapping update. Unfortunatelly, it may happen sometimes that the new interface is not present yet in the operational device datastore at the moment the mapping update occurs. To avoid such roll-back root cause error, this change modifies the postInterface method to introduce a check of the new interface presence before returning. As for the deleteInterface method, it also invokes the mapping update to remove supporting-interfaces. JIRA: TRNSPRTPCE-539 Signed-off-by: Gilles Thouenon Change-Id: I61dfc1021a32626341f69922749bf1f9ba9a1062 --- .../OpenRoadmInterfacesImpl121.java | 41 ++++++++++++++ .../OpenRoadmInterfacesImpl221.java | 55 ++++++++++++++++++- .../OpenRoadmInterfacesImpl710.java | 41 ++++++++++++++ .../OSGI-INF/blueprint/common-blueprint.xml | 2 + .../olm/OlmPowerServiceRpcImplTest.java | 3 +- .../olm/power/PowerMgmtPowerMockTest.java | 3 +- .../transportpce/olm/power/PowerMgmtTest.java | 3 +- .../olm/service/OlmPowerServiceImplTest.java | 3 +- .../OpenRoadmInterface121.java | 8 ++- .../OpenRoadmInterfaceFactory.java | 9 +-- ...ceRendererServiceImplCreateOtsOmsTest.java | 5 +- ...ndererServiceOperationsImplDeleteTest.java | 3 +- .../hybrid/test02_B100G_end2end.py | 16 +----- 13 files changed, 162 insertions(+), 30 deletions(-) diff --git a/common/src/main/java/org/opendaylight/transportpce/common/openroadminterfaces/OpenRoadmInterfacesImpl121.java b/common/src/main/java/org/opendaylight/transportpce/common/openroadminterfaces/OpenRoadmInterfacesImpl121.java index e9aa1d742..fb9407904 100755 --- a/common/src/main/java/org/opendaylight/transportpce/common/openroadminterfaces/OpenRoadmInterfacesImpl121.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/openroadminterfaces/OpenRoadmInterfacesImpl121.java @@ -19,6 +19,8 @@ import org.opendaylight.transportpce.common.StringConstants; import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransaction; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.Ports; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.PortsKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacks; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacksBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacksKey; @@ -26,6 +28,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfac import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.port.Interfaces; import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev161014.AdminStates; import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev161014.States; import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev161014.OtnOdu; @@ -37,6 +40,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.odu.container.OduBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev161014.otu.container.OtuBuilder; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -71,9 +75,30 @@ public class OpenRoadmInterfacesImpl121 { deviceTx.merge(LogicalDatastoreType.CONFIGURATION, interfacesIID, ifBuilder.build()); FluentFuture txSubmitFuture = deviceTx.commit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT); + // TODO: instead of using this infinite loop coupled with this timeout, + // it would be better to use a notification mechanism from the device to be advertised + // that the new created interface is present in the device circuit-pack/port + final Thread current = Thread.currentThread(); + Thread timer = new Thread() { + public void run() { + try { + Thread.sleep(3000); + current.interrupt(); + } catch (InterruptedException e) { + LOG.error("Timeout before the new created interface appears on the deivce circuit-pack port", e); + } + } + }; try { txSubmitFuture.get(); LOG.info("Successfully posted interface {} on node {}", ifBuilder.getName(), nodeId); + boolean devicePortIsUptodated = false; + while (!devicePortIsUptodated) { + devicePortIsUptodated = checkIfDevicePortIsUpdatedWithInterface(nodeId, ifBuilder); + } + LOG.info("{} - {} - interface {} updated on port {}", nodeId, ifBuilder.getSupportingCircuitPackName(), + ifBuilder.getName(), ifBuilder.getSupportingPort()); + timer.interrupt(); } catch (InterruptedException | ExecutionException e) { throw new OpenRoadmInterfaceException(String.format("Failed to post interface %s on node %s!", ifBuilder .getName(), nodeId), e); @@ -247,4 +272,20 @@ public class OpenRoadmInterfacesImpl121 { } } + private boolean checkIfDevicePortIsUpdatedWithInterface(String nodeId, InterfaceBuilder ifBuilder) { + KeyedInstanceIdentifier portIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) + .child(CircuitPacks.class, new CircuitPacksKey(ifBuilder.getSupportingCircuitPackName())) + .child(Ports.class, new PortsKey(ifBuilder.getSupportingPort())); + Ports port = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, + portIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT).get(); + if (port.getInterfaces() == null) { + return false; + } + for (Interfaces interf : port.getInterfaces()) { + if (interf.getInterfaceName().equals(ifBuilder.getName())) { + return true; + } + } + return false; + } } diff --git a/common/src/main/java/org/opendaylight/transportpce/common/openroadminterfaces/OpenRoadmInterfacesImpl221.java b/common/src/main/java/org/opendaylight/transportpce/common/openroadminterfaces/OpenRoadmInterfacesImpl221.java index 6db81a9c1..064230fb1 100755 --- a/common/src/main/java/org/opendaylight/transportpce/common/openroadminterfaces/OpenRoadmInterfacesImpl221.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/openroadminterfaces/OpenRoadmInterfacesImpl221.java @@ -19,6 +19,11 @@ import org.opendaylight.transportpce.common.StringConstants; import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransaction; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; +import org.opendaylight.transportpce.common.mapping.PortMapping; +import org.opendaylight.transportpce.common.mapping.PortMappingVersion221; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210927.mapping.Mapping; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.pack.Ports; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.pack.PortsKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.packs.CircuitPacks; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.packs.CircuitPacksBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.packs.CircuitPacksKey; @@ -26,6 +31,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfac import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfaces.grp.InterfaceBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfaces.grp.InterfaceKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.OrgOpenroadmDevice; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.port.Interfaces; import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev171215.AdminStates; import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev171215.States; import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.OtnOdu; @@ -37,6 +43,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.odu.container.OduBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev181019.otu.container.OtuBuilder; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,9 +52,14 @@ public class OpenRoadmInterfacesImpl221 { private static final Logger LOG = LoggerFactory.getLogger(OpenRoadmInterfacesImpl221.class); private final DeviceTransactionManager deviceTransactionManager; + private final PortMapping portMapping; + private final PortMappingVersion221 portMapping221; - public OpenRoadmInterfacesImpl221(DeviceTransactionManager deviceTransactionManager) { + public OpenRoadmInterfacesImpl221(DeviceTransactionManager deviceTransactionManager, + PortMapping portMapping, PortMappingVersion221 portMapping221) { this.deviceTransactionManager = deviceTransactionManager; + this.portMapping = portMapping; + this.portMapping221 = portMapping221; } public void postInterface(String nodeId, InterfaceBuilder ifBuilder) throws OpenRoadmInterfaceException { @@ -73,9 +85,30 @@ public class OpenRoadmInterfacesImpl221 { deviceTx.merge(LogicalDatastoreType.CONFIGURATION, interfacesIID, ifBuilder.build()); FluentFuture txSubmitFuture = deviceTx.commit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT); + // TODO: instead of using this infinite loop coupled with this timeout, + // it would be better to use a notification mechanism from the device to be advertised + // that the new created interface is present in the device circuit-pack/port + final Thread current = Thread.currentThread(); + Thread timer = new Thread() { + public void run() { + try { + Thread.sleep(3000); + current.interrupt(); + } catch (InterruptedException e) { + LOG.error("Timeout before the new created interface appears on the deivce circuit-pack port", e); + } + } + }; try { txSubmitFuture.get(); LOG.info("Successfully posted interface {} on node {}", ifBuilder.getName(), nodeId); + boolean devicePortIsUptodated = false; + while (!devicePortIsUptodated) { + devicePortIsUptodated = checkIfDevicePortIsUpdatedWithInterface(nodeId, ifBuilder); + } + LOG.info("{} - {} - interface {} updated on port {}", nodeId, ifBuilder.getSupportingCircuitPackName(), + ifBuilder.getName(), ifBuilder.getSupportingPort()); + timer.interrupt(); } catch (InterruptedException | ExecutionException e) { throw new OpenRoadmInterfaceException(String.format("Failed to post interface %s on node %s!", ifBuilder .getName(), nodeId), e); @@ -172,6 +205,10 @@ public class OpenRoadmInterfacesImpl221 { if (intf2Delete.getName().contains(StringConstants.CLIENT_TOKEN) || intf2Delete.getName().contains( StringConstants.NETWORK_TOKEN)) { postEquipmentState(nodeId, intf2Delete.getSupportingCircuitPackName(), false); + Mapping oldmapping = this.portMapping.getMapping(nodeId, intf2Delete.getSupportingCircuitPackName(), + intf2Delete.getSupportingPort()); + this.portMapping.deleteMapping(nodeId, oldmapping.getLogicalConnectionPoint()); + this.portMapping221.updateMapping(nodeId, oldmapping); } } else { @@ -250,4 +287,20 @@ public class OpenRoadmInterfacesImpl221 { } } + private boolean checkIfDevicePortIsUpdatedWithInterface(String nodeId, InterfaceBuilder ifBuilder) { + KeyedInstanceIdentifier portIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) + .child(CircuitPacks.class, new CircuitPacksKey(ifBuilder.getSupportingCircuitPackName())) + .child(Ports.class, new PortsKey(ifBuilder.getSupportingPort())); + Ports port = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, + portIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT).get(); + if (port.getInterfaces() == null) { + return false; + } + for (Interfaces interf : port.getInterfaces()) { + if (interf.getInterfaceName().equals(ifBuilder.getName())) { + return true; + } + } + return false; + } } diff --git a/common/src/main/java/org/opendaylight/transportpce/common/openroadminterfaces/OpenRoadmInterfacesImpl710.java b/common/src/main/java/org/opendaylight/transportpce/common/openroadminterfaces/OpenRoadmInterfacesImpl710.java index 5444db03e..2d0ec8272 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/openroadminterfaces/OpenRoadmInterfacesImpl710.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/openroadminterfaces/OpenRoadmInterfacesImpl710.java @@ -19,6 +19,8 @@ import org.opendaylight.transportpce.common.StringConstants; import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransaction; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.circuit.pack.Ports; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.circuit.pack.PortsKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.circuit.packs.CircuitPacks; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.circuit.packs.CircuitPacksBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.circuit.packs.CircuitPacksKey; @@ -26,9 +28,11 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.interfac import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.interfaces.grp.InterfaceBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.interfaces.grp.InterfaceKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.OrgOpenroadmDevice; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.port.Interfaces; import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates; import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.States; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -65,9 +69,30 @@ public class OpenRoadmInterfacesImpl710 { deviceTx.merge(LogicalDatastoreType.CONFIGURATION, interfacesIID, ifBuilder.build()); FluentFuture txSubmitFuture = deviceTx.commit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT); + // TODO: instead of using this infinite loop coupled with this timeout, + // it would be better to use a notification mechanism from the device to be advertised + // that the new created interface is present in the device circuit-pack/port + final Thread current = Thread.currentThread(); + Thread timer = new Thread() { + public void run() { + try { + Thread.sleep(3000); + current.interrupt(); + } catch (InterruptedException e) { + LOG.error("Timeout before the new created interface appears on the deivce circuit-pack port", e); + } + } + }; try { txSubmitFuture.get(); LOG.info("Successfully posted interface {} on node {}", ifBuilder.getName(), nodeId); + boolean devicePortIsUptodated = false; + while (!devicePortIsUptodated) { + devicePortIsUptodated = checkIfDevicePortIsUpdatedWithInterface(nodeId, ifBuilder); + } + LOG.info("{} - {} - interface {} updated on port {}", nodeId, ifBuilder.getSupportingCircuitPackName(), + ifBuilder.getName(), ifBuilder.getSupportingPort()); + timer.interrupt(); } catch (InterruptedException | ExecutionException e) { throw new OpenRoadmInterfaceException(String.format("Failed to post interface %s on node %s!", ifBuilder .getName(), nodeId), e); @@ -216,4 +241,20 @@ public class OpenRoadmInterfacesImpl710 { } } + private boolean checkIfDevicePortIsUpdatedWithInterface(String nodeId, InterfaceBuilder ifBuilder) { + KeyedInstanceIdentifier portIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) + .child(CircuitPacks.class, new CircuitPacksKey(ifBuilder.getSupportingCircuitPackName())) + .child(Ports.class, new PortsKey(ifBuilder.getSupportingPort())); + Ports port = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, + portIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT).get(); + if (port.getInterfaces() == null) { + return false; + } + for (Interfaces interf : port.getInterfaces()) { + if (interf.getInterfaceName().equals(ifBuilder.getName())) { + return true; + } + } + return false; + } } diff --git a/common/src/main/resources/OSGI-INF/blueprint/common-blueprint.xml b/common/src/main/resources/OSGI-INF/blueprint/common-blueprint.xml index 0539214af..ac7e7b763 100644 --- a/common/src/main/resources/OSGI-INF/blueprint/common-blueprint.xml +++ b/common/src/main/resources/OSGI-INF/blueprint/common-blueprint.xml @@ -30,6 +30,8 @@ and is available at http://www.eclipse.org/legal/epl-v10.html + + diff --git a/olm/src/test/java/org/opendaylight/transportpce/olm/OlmPowerServiceRpcImplTest.java b/olm/src/test/java/org/opendaylight/transportpce/olm/OlmPowerServiceRpcImplTest.java index c2c2fba8a..1f7bd98fb 100644 --- a/olm/src/test/java/org/opendaylight/transportpce/olm/OlmPowerServiceRpcImplTest.java +++ b/olm/src/test/java/org/opendaylight/transportpce/olm/OlmPowerServiceRpcImplTest.java @@ -121,7 +121,8 @@ public class OlmPowerServiceRpcImplTest extends AbstractTest { this.portMapping = new PortMappingImpl(getDataBroker(), this.portMappingVersion710, this.portMappingVersion22, this.portMappingVersion121); this.openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(deviceTransactionManager); - this.openRoadmInterfacesImpl22 = new OpenRoadmInterfacesImpl221(deviceTransactionManager); + this.openRoadmInterfacesImpl22 = new OpenRoadmInterfacesImpl221(deviceTransactionManager, this.portMapping, + this.portMappingVersion22); this.openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(deviceTransactionManager); this.openRoadmInterfaces = new OpenRoadmInterfacesImpl((this.deviceTransactionManager), this.mappingUtils,this.openRoadmInterfacesImpl121,this.openRoadmInterfacesImpl22, diff --git a/olm/src/test/java/org/opendaylight/transportpce/olm/power/PowerMgmtPowerMockTest.java b/olm/src/test/java/org/opendaylight/transportpce/olm/power/PowerMgmtPowerMockTest.java index 232c04c00..1176e18f5 100644 --- a/olm/src/test/java/org/opendaylight/transportpce/olm/power/PowerMgmtPowerMockTest.java +++ b/olm/src/test/java/org/opendaylight/transportpce/olm/power/PowerMgmtPowerMockTest.java @@ -113,7 +113,8 @@ public class PowerMgmtPowerMockTest extends AbstractTest { this.portMapping = new PortMappingImpl(getDataBroker(), this.portMappingVersion710, this.portMappingVersion22, this.portMappingVersion121); this.openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(deviceTransactionManager); - this.openRoadmInterfacesImpl22 = new OpenRoadmInterfacesImpl221(deviceTransactionManager); + this.openRoadmInterfacesImpl22 = new OpenRoadmInterfacesImpl221(deviceTransactionManager, this.portMapping, + this.portMappingVersion22); this.openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(deviceTransactionManager); this.openRoadmInterfaces = new OpenRoadmInterfacesImpl((this.deviceTransactionManager), this.mappingUtils,this.openRoadmInterfacesImpl121,this.openRoadmInterfacesImpl22, diff --git a/olm/src/test/java/org/opendaylight/transportpce/olm/power/PowerMgmtTest.java b/olm/src/test/java/org/opendaylight/transportpce/olm/power/PowerMgmtTest.java index 0bb439bcb..c020b545c 100644 --- a/olm/src/test/java/org/opendaylight/transportpce/olm/power/PowerMgmtTest.java +++ b/olm/src/test/java/org/opendaylight/transportpce/olm/power/PowerMgmtTest.java @@ -84,7 +84,8 @@ public class PowerMgmtTest extends AbstractTest { this.portMapping = new PortMappingImpl(getDataBroker(), this.portMappingVersion710, this.portMappingVersion22, this.portMappingVersion121); this.openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(deviceTransactionManager); - this.openRoadmInterfacesImpl22 = new OpenRoadmInterfacesImpl221(deviceTransactionManager); + this.openRoadmInterfacesImpl22 = new OpenRoadmInterfacesImpl221(deviceTransactionManager, this.portMapping, + this.portMappingVersion22); this.openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(deviceTransactionManager); this.openRoadmInterfaces = new OpenRoadmInterfacesImpl((this.deviceTransactionManager), this.mappingUtils,this.openRoadmInterfacesImpl121,this.openRoadmInterfacesImpl22, diff --git a/olm/src/test/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImplTest.java b/olm/src/test/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImplTest.java index 18623d4ca..fa739e040 100644 --- a/olm/src/test/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImplTest.java +++ b/olm/src/test/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImplTest.java @@ -121,7 +121,8 @@ public class OlmPowerServiceImplTest extends AbstractTest { this.portMapping = new PortMappingImpl(dataBroker, this.portMappingVersion710, this.portMappingVersion22, this.portMappingVersion121); this.openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(deviceTransactionManager); - this.openRoadmInterfacesImpl22 = new OpenRoadmInterfacesImpl221(deviceTransactionManager); + this.openRoadmInterfacesImpl22 = new OpenRoadmInterfacesImpl221(deviceTransactionManager, this.portMapping, + this.portMappingVersion22); this.openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(deviceTransactionManager); this.openRoadmInterfaces = new OpenRoadmInterfacesImpl((this.deviceTransactionManager), this.mappingUtils,this.openRoadmInterfacesImpl121,this.openRoadmInterfacesImpl22, diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface121.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface121.java index d8d8549da..8844bfe9b 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface121.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface121.java @@ -147,6 +147,7 @@ public class OpenRoadmInterface121 { // Post interface on the device this.openRoadmInterfaces.postInterface(nodeId, otuInterfaceBldr); + this.portMapping.updateMapping(nodeId, portMap); return otuInterfaceBldr.getName(); } @@ -155,13 +156,12 @@ public class OpenRoadmInterface121 { * * @param nodeId node ID * @param logicalConnPoint logical Connection Point - * @param supportingOtuInterface supporting OTU Interface * * @return Name of the interface if successful, otherwise return null. * @throws OpenRoadmInterfaceException OpenRoadmInterfaceException */ - public String createOpenRoadmOdu4Interface(String nodeId, String logicalConnPoint, String supportingOtuInterface) + public String createOpenRoadmOdu4Interface(String nodeId, String logicalConnPoint) throws OpenRoadmInterfaceException { Mapping portMap = this.portMapping.getMapping(nodeId, logicalConnPoint); if (portMap == null) { @@ -169,7 +169,9 @@ public class OpenRoadmInterface121 { } InterfaceBuilder oduInterfaceBldr = createGenericInterfaceBuilder(portMap, OtnOdu.class, logicalConnPoint + "-ODU"); - oduInterfaceBldr.setSupportingInterface(supportingOtuInterface); + if (portMap.getSupportingOtu4() != null) { + oduInterfaceBldr.setSupportingInterface(portMap.getSupportingOtu4()); + } // ODU interface specific data // Set Opu attributes diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaceFactory.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaceFactory.java index 2bdb83b34..940afe904 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaceFactory.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaceFactory.java @@ -119,8 +119,7 @@ public class OpenRoadmInterfaceFactory { throws OpenRoadmInterfaceException { switch (mappingUtils.getOpenRoadmVersion(nodeId)) { case StringConstants.OPENROADM_DEVICE_VERSION_1_2_1: - return openRoadmInterface121.createOpenRoadmOdu4Interface(nodeId, logicalConnPoint, - supportingOtuInterface); + return openRoadmInterface121.createOpenRoadmOdu4Interface(nodeId, logicalConnPoint); case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1: return openRoadmInterface221.createOpenRoadmOdu4Interface(nodeId, logicalConnPoint, supportingOtuInterface); @@ -152,8 +151,7 @@ public class OpenRoadmInterfaceFactory { throws OpenRoadmInterfaceException { switch (mappingUtils.getOpenRoadmVersion(anodeId)) { case StringConstants.OPENROADM_DEVICE_VERSION_1_2_1: - return openRoadmInterface121.createOpenRoadmOdu4Interface(anodeId, alogicalConnPoint, - asupportingOtuInterface); + return openRoadmInterface121.createOpenRoadmOdu4Interface(anodeId, alogicalConnPoint); case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1: return openRoadmInterface221.createOpenRoadmOdu4Interface(anodeId, alogicalConnPoint, asupportingOtuInterface, znodeId, zlogicalConnPoint); @@ -183,8 +181,7 @@ public class OpenRoadmInterfaceFactory { String supportingInterface) throws OpenRoadmInterfaceException { switch (mappingUtils.getOpenRoadmVersion(nodeId)) { case StringConstants.OPENROADM_DEVICE_VERSION_1_2_1: - LOG.error(OTN_FUNTIONS_ARE_NOT_SUPPORTED_BY_OPENROADM_MODELS_1_2_1_MSG); - return null; + return openRoadmInterface121.createOpenRoadmOdu4Interface(nodeId, logicalConnPoint); case StringConstants.OPENROADM_DEVICE_VERSION_2_2_1: return openRoadmInterface221.createOpenRoadmOdu4HOInterface(nodeId, logicalConnPoint, isNetworkPort, supportingInterface); diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplCreateOtsOmsTest.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplCreateOtsOmsTest.java index aed6a4986..c8878ebe7 100644 --- a/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplCreateOtsOmsTest.java +++ b/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplCreateOtsOmsTest.java @@ -94,11 +94,12 @@ public class DeviceRendererServiceImplCreateOtsOmsTest extends AbstractTest { this.portMappingVersion121 = new PortMappingVersion121(getDataBroker(), this.deviceTransactionManager); this.portMappingVersion710 = new PortMappingVersion710(getDataBroker(), deviceTransactionManager); this.openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(this.deviceTransactionManager); - this.openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(this.deviceTransactionManager); - this.openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(this.deviceTransactionManager); PortMapping portMapping = new PortMappingImpl(getDataBroker(), this.portMappingVersion710, this.portMappingVersion22, this.portMappingVersion121); + this.openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(this.deviceTransactionManager, portMapping, + this.portMappingVersion22); + this.openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(this.deviceTransactionManager); OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping,openRoadmInterfaces); OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping,openRoadmInterfaces); OpenRoadmInterface710 openRoadmInterface710 = new OpenRoadmInterface710(portMapping, openRoadmInterfaces); diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplDeleteTest.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplDeleteTest.java index 951edabc1..0d37ee587 100644 --- a/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplDeleteTest.java +++ b/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplDeleteTest.java @@ -112,7 +112,8 @@ public class RendererServiceOperationsImplDeleteTest extends AbstractTest { this.portMapping = new PortMappingImpl(getDataBroker(), this.portMappingVersion710, this.portMappingVersion22, this.portMappingVersion121); this.openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(deviceTransactionManager); - this.openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(deviceTransactionManager); + this.openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(deviceTransactionManager, this.portMapping, + this.portMappingVersion22); this.openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(deviceTransactionManager); this.crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager); this.crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager); diff --git a/tests/transportpce_tests/hybrid/test02_B100G_end2end.py b/tests/transportpce_tests/hybrid/test02_B100G_end2end.py index 510303a9c..2d7232eb5 100644 --- a/tests/transportpce_tests/hybrid/test02_B100G_end2end.py +++ b/tests/transportpce_tests/hybrid/test02_B100G_end2end.py @@ -151,7 +151,7 @@ class TransportPCEtesting(unittest.TestCase): print("all processes killed") def setUp(self): - time.sleep(5) + time.sleep(2) def test_01_connect_xpdra2(self): response = test_utils.mount_device("XPDR-A2", ('xpdra2', self.NODE_VERSION_71)) @@ -336,9 +336,7 @@ class TransportPCEtesting(unittest.TestCase): 'type': 'org-openroadm-interfaces:otnOtu', 'supporting-port': 'L1' } - input_dict_2 = {'tx-sapi': 'LY9PxYJqUbw=', - 'expected-dapi': 'LY9PxYJqUbw=', - 'rate': 'org-openroadm-otn-common-types:OTUCn', + input_dict_2 = {'rate': 'org-openroadm-otn-common-types:OTUCn', 'degthr-percentage': 100, 'degm-intervals': 2, 'otucn-n-rate': 4 @@ -402,11 +400,7 @@ class TransportPCEtesting(unittest.TestCase): 'type': 'org-openroadm-interfaces:otnOtu', 'supporting-port': 'L1' } - input_dict_2 = {'tx-dapi': 'LY9PxYJqUbw=', - 'expected-sapi': 'LY9PxYJqUbw=', - 'tx-sapi': 'Nmbu2MNHvc4=', - 'expected-dapi': 'Nmbu2MNHvc4=', - 'rate': 'org-openroadm-otn-common-types:OTUCn', + input_dict_2 = {'rate': 'org-openroadm-otn-common-types:OTUCn', 'degthr-percentage': 100, 'degm-intervals': 2, 'otucn-n-rate': 4 @@ -1136,11 +1130,7 @@ class TransportPCEtesting(unittest.TestCase): def test_72_create_400GE_service(self): self.cr_serv_sample_data["input"]["service-name"] = "service-400GE" self.cr_serv_sample_data["input"]["service-a-end"]["service-rate"] = "400" - self.cr_serv_sample_data["input"]["service-a-end"]["tx-direction"]["port"]["port-name"] = "XPDR1-CLIENT1" - self.cr_serv_sample_data["input"]["service-a-end"]["rx-direction"]["port"]["port-name"] = "XPDR1-CLIENT1" self.cr_serv_sample_data["input"]["service-z-end"]["service-rate"] = "400" - self.cr_serv_sample_data["input"]["service-z-end"]["tx-direction"]["port"]["port-name"] = "XPDR1-CLIENT1" - self.cr_serv_sample_data["input"]["service-z-end"]["rx-direction"]["port"]["port-name"] = "XPDR1-CLIENT1" response = test_utils.service_create_request(self.cr_serv_sample_data) self.assertEqual(response.status_code, requests.codes.ok) res = response.json() -- 2.36.6