X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=renderer%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Frenderer%2Fprovisiondevice%2FOtnDeviceRendererServiceImpl.java;h=aee77a643d95e6024e619a74809dbe151b95a582;hb=629159430cb4074a4300b11a90a64003346dcc5b;hp=706a7bb066391dad3e31117f103b70c38a794471;hpb=6eca761ea7b65b2eb996a0a845efe5df6da526e8;p=transportpce.git diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/OtnDeviceRendererServiceImpl.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/OtnDeviceRendererServiceImpl.java index 706a7bb06..aee77a643 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/OtnDeviceRendererServiceImpl.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/OtnDeviceRendererServiceImpl.java @@ -8,10 +8,19 @@ package org.opendaylight.transportpce.renderer.provisiondevice; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; import java.util.Optional; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.ForkJoinTask; +import java.util.concurrent.atomic.AtomicBoolean; + import org.opendaylight.transportpce.common.crossconnect.CrossConnect; +import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException; +import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces; import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev200128.OtnServicePathInput; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev200128.OtnServicePathOutput; @@ -27,77 +36,160 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService { private static final Logger LOG = LoggerFactory.getLogger(OtnDeviceRendererServiceImpl.class); private final OpenRoadmInterfaceFactory openRoadmInterfaceFactory; private final CrossConnect crossConnect; + private final OpenRoadmInterfaces openRoadmInterfaces; + private final DeviceTransactionManager deviceTransactionManager; + - public OtnDeviceRendererServiceImpl(OpenRoadmInterfaceFactory openRoadmInterfaceFactory, - CrossConnect crossConnect) { + public OtnDeviceRendererServiceImpl(OpenRoadmInterfaceFactory openRoadmInterfaceFactory, CrossConnect crossConnect, + OpenRoadmInterfaces openRoadmInterfaces, + DeviceTransactionManager deviceTransactionManager) { this.openRoadmInterfaceFactory = openRoadmInterfaceFactory; this.crossConnect = crossConnect; + this.openRoadmInterfaces = openRoadmInterfaces; + this.deviceTransactionManager = deviceTransactionManager; } @Override public OtnServicePathOutput setupOtnServicePath(OtnServicePathInput input) { + LOG.info("Calling setup service path"); boolean success = true; List nodeInterfaces = new ArrayList<>(); List results = new ArrayList<>(); if (input.getServiceType().equals("Ethernet")) { try { + LOG.info("Calling Node interfaces {} {} {} {} {} {} {}", + input.getServiceRate(),input.getEthernetEncoding(), + input.getServiceType(),input.getOperation(),input.getTribPortNumber(), + input.getTribSlot(),input.getNodes()); nodeInterfaces = createInterface(input); + LOG.info("Node interfaces created just fine "); } catch (OpenRoadmInterfaceException e) { //handle exception - LOG.warn("Set up service path failed"); + LOG.warn("Set up service path failed {}", e.toString()); success = false; } + } if (success) { + LOG.info("Result is success"); for (NodeInterface nodeInterface: nodeInterfaces) { results.add("Otn Service path was set up successfully for node :" + nodeInterface.getNodeId()); } + //TODO Add otn topology links } OtnServicePathOutputBuilder otnServicePathOutputBuilder = new OtnServicePathOutputBuilder() - .setSuccess(success) - .setNodeInterface(nodeInterfaces) - .setResult(String.join("\n", results)); + .setSuccess(success) + .setNodeInterface(nodeInterfaces) + .setResult(String.join("\n", results)); return otnServicePathOutputBuilder.build(); } @Override public OtnServicePathOutput deleteOtnServicePath(OtnServicePathInput input) { - OtnServicePathOutputBuilder otnServicePathOutputBuilder = new OtnServicePathOutputBuilder() - .setResult("deleteServicePath was called"); - return otnServicePathOutputBuilder.build(); + List nodes = input.getNodes(); + AtomicBoolean success = new AtomicBoolean(true); + ConcurrentLinkedQueue results = new ConcurrentLinkedQueue<>(); + ForkJoinPool forkJoinPool = new ForkJoinPool(); + ForkJoinTask forkJoinTask = forkJoinPool.submit(() -> nodes.parallelStream().forEach(node -> { + List interfacesToDelete = new LinkedList<>(); + String nodeId = node.getNodeId(); + LOG.info("Deleting service setup on node {}", nodeId); + String srcTp = node.getClientTp(); + String destTp = node.getNetworkTp(); + if ((srcTp == null) || (destTp == null) || input.getServiceRate() == null) { + LOG.error("Source ({}) or destination ({}) termination point is null.", srcTp, destTp); + return; + } + // if the node is currently mounted then proceed. + if (this.deviceTransactionManager.isDeviceMounted(nodeId)) { + switch (input.getServiceRate()) { + case("10G"): + interfacesToDelete.add(srcTp + "-ODU2e-" + input.getServiceName()); + interfacesToDelete.add(destTp + "-ODU2e-" + input.getServiceName()); + case("1G"): + interfacesToDelete.add(srcTp + "-ODU0-" + input.getServiceName()); + interfacesToDelete.add(destTp + "-ODU0-" + input.getServiceName()); + } + String connectionNumber = interfacesToDelete.get(0) + "-x-" + interfacesToDelete.get(1); + List intToDelete = this.crossConnect.deleteCrossConnect(nodeId, connectionNumber); + if (intToDelete != null) { + for (String interf : intToDelete) { + if (!this.openRoadmInterfaceFactory.isUsedbyXc(nodeId, interf, connectionNumber, + this.deviceTransactionManager)) { + interfacesToDelete.add(interf); + } + } + } + } else { + String result = nodeId + " is not mounted on the controller"; + results.add(result); + success.set(false); + LOG.warn(result); + forkJoinPool.shutdown(); + return; + //TODO should deletion end here? + } + for (String interfaceId : interfacesToDelete) { + try { + this.openRoadmInterfaces.deleteInterface(nodeId, interfaceId); + } catch (OpenRoadmInterfaceException e) { + String result = String.format("Failed to delete interface %s on node %s!", interfaceId, nodeId); + success.set(false); + LOG.error(result, e); + results.add(result); + } + } + })); + try { + forkJoinTask.get(); + } catch (InterruptedException | ExecutionException e) { + LOG.error("Error while deleting service paths!", e); + } + forkJoinPool.shutdown(); + OtnServicePathOutputBuilder delServBldr = new OtnServicePathOutputBuilder(); + delServBldr.setSuccess(success.get()); + if (results.isEmpty()) { + return delServBldr.setResult("Request processed").build(); + } else { + return delServBldr.setResult(String.join("\n", results)).build(); + } + } private List createInterface(OtnServicePathInput input) throws OpenRoadmInterfaceException { List nodeInterfaces = new ArrayList<>(); + LOG.info("Calling Create Interface entry for OTN service path"); if (input.getServiceRate().equals("1G")) { for (Nodes node: input.getNodes()) { + LOG.info("Input service is 1G"); //check if the node is mounted or not? + List createdConnections = new ArrayList<>(); List createdEthInterfaces = new ArrayList<>(); List createdOduInterfaces = new ArrayList<>(); - createdEthInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmEth1GInterface(node.getNodeId(), - node.getClientTp())); - LOG.info("created ethernet interface"); - createdOduInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmOdu0Interface(node.getNodeId(), - node.getClientTp(), input.getServiceName(),"07", false, input.getTribPortNumber(), - input.getTribSlot())); //suppporting interface?, payload ? - LOG.info("Created odu interface client side"); - createdOduInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmOdu0Interface(node.getNodeId(), - node.getNetworkTp(), input.getServiceName(),"07", true, input.getTribPortNumber(), - input.getTribSlot())); - LOG.info("created odu inteface network side"); + createdEthInterfaces.add( + openRoadmInterfaceFactory.createOpenRoadmEth1GInterface(node.getNodeId(), node.getClientTp())); + LOG.debug("created ethernet interface {}",createdEthInterfaces.get(0)); + createdOduInterfaces.add( + //suppporting interface?, payload ? + openRoadmInterfaceFactory.createOpenRoadmOdu0Interface(node.getNodeId(), node.getClientTp(), + input.getServiceName(), "07", false, input.getTribPortNumber(), input.getTribSlot())); + LOG.debug("Created odu interface client side {}",createdOduInterfaces.get(0)); + createdOduInterfaces.add( + openRoadmInterfaceFactory.createOpenRoadmOdu0Interface(node.getNodeId(), node.getNetworkTp(), + input.getServiceName(), "07", true, input.getTribPortNumber(), input.getTribSlot())); + LOG.debug("created odu inteface network side {} {}",createdOduInterfaces.get(0),createdOduInterfaces.get(1)); - //implement cross connect + //implement cross connect Optional connectionNameOpt = postCrossConnect(createdOduInterfaces, node); - List createdConnections = new ArrayList<>(); createdConnections.add(connectionNameOpt.get()); LOG.info("Created cross connects"); NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder() - .withKey(new NodeInterfaceKey(node.getNodeId())) - .setNodeId(node.getNodeId()) - .setConnectionId(createdConnections) - .setEthInterfaceId(createdEthInterfaces) - .setOduInterfaceId(createdOduInterfaces); + .withKey(new NodeInterfaceKey(input.getServiceName() + "-" + node.getNodeId())) + .setNodeId(input.getServiceName() + "-" + node.getNodeId()) + .setConnectionId(createdConnections) + .setEthInterfaceId(createdEthInterfaces) + .setOduInterfaceId(createdOduInterfaces); nodeInterfaces.add(nodeInterfaceBuilder.build()); } } @@ -105,35 +197,45 @@ public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService { // implementing ODU2e for now for (Nodes node: input.getNodes()) { + LOG.info("Input service is 10G"); //check if the node is mounted or not? + List createdConnections = new ArrayList<>(); List createdEthInterfaces = new ArrayList<>(); List createdOduInterfaces = new ArrayList<>(); - createdEthInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmEth10GInterface(node.getNodeId(), - node.getClientTp())); - createdOduInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmOdu2eInterface(node.getNodeId(), - node.getClientTp(), input.getServiceName(),"03", false)); //suppporting interface?, payload ? - createdOduInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmOdu2eInterface(node.getNodeId(), - node.getNetworkTp(), input.getServiceName(),"03" , true));// supporting interface? payload ? - + createdEthInterfaces.add( + openRoadmInterfaceFactory.createOpenRoadmEth10GInterface(node.getNodeId(), node.getClientTp())); + createdOduInterfaces.add( + //suppporting interface?, payload ? + openRoadmInterfaceFactory.createOpenRoadmOdu2eInterface(node.getNodeId(), node.getClientTp(), + input.getServiceName(),"03", false ,input.getTribPortNumber(),input.getTribSlot())); + createdOduInterfaces.add( + // supporting interface? payload ? + openRoadmInterfaceFactory.createOpenRoadmOdu2eInterface(node.getNodeId(), node.getNetworkTp(), + input.getServiceName(),"03" , true ,input.getTribPortNumber(),input.getTribSlot())); //implement cross connect Optional connectionNameOpt = postCrossConnect(createdOduInterfaces, node); - List createdConnections = new ArrayList<>(); createdConnections.add(connectionNameOpt.get()); LOG.info("Created cross connects"); + LOG.info("Now creating node interface builder"); NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder(); - nodeInterfaceBuilder.withKey(new NodeInterfaceKey(node.getNodeId())) - .setNodeId(node.getNodeId()) - .setConnectionId(createdConnections) - .setEthInterfaceId(createdEthInterfaces) - .setOduInterfaceId(createdOduInterfaces); + LOG.info("Now Created node interface builder"); + nodeInterfaceBuilder.withKey(new NodeInterfaceKey(input.getServiceName() + "-" + node.getNodeId())); + nodeInterfaceBuilder.setNodeId(input.getServiceName() + "-" + node.getNodeId()); + LOG.info("Now Ids are set"); + nodeInterfaceBuilder.setConnectionId(createdConnections); + LOG.info("Now connections are set"); + nodeInterfaceBuilder.setEthInterfaceId(createdEthInterfaces); + nodeInterfaceBuilder.setOduInterfaceId(createdOduInterfaces); + LOG.info("Now Interfaces are set"); nodeInterfaces.add(nodeInterfaceBuilder.build()); + LOG.info("Everythiong is done and now returning "); } } return nodeInterfaces; } private Optional postCrossConnect(List createdOduInterfaces, Nodes node) - throws OpenRoadmInterfaceException { + throws OpenRoadmInterfaceException { return this.crossConnect.postOtnCrossConnect(createdOduInterfaces,node); } }