From 1758ca951b5bdf5073bddd294d102849027d1da1 Mon Sep 17 00:00:00 2001 From: Dhruv Bhardwaj Date: Mon, 9 Jul 2018 00:25:04 -0400 Subject: [PATCH] RPC to delete link Implemented RPC to delete link with a given link-id JIRA: TRNSPRTPCE-16 Change-Id: I722002997250d4dd07a2f9195f4828eecc7dcfee --- .gitignore | 1 + .../main/yang/networkutils@2017-08-18.yang | 14 ++++ .../networkmodel/NetworkUtilsImpl.java | 82 ++++++++++++++++--- 3 files changed, 87 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 154143d97..8e3726427 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ target-ide .project .settings .idea +.iml xtend-gen yang-gen-config yang-gen-sal diff --git a/api/src/main/yang/networkutils@2017-08-18.yang b/api/src/main/yang/networkutils@2017-08-18.yang index 923094754..d4f872781 100644 --- a/api/src/main/yang/networkutils@2017-08-18.yang +++ b/api/src/main/yang/networkutils@2017-08-18.yang @@ -83,4 +83,18 @@ module networkutils { } } } + rpc delete-link { + description "This rpc deletes a given link in openroadm Topology layer"; + input { + leaf link-id { + type string; + } + } + output { + leaf result { + type string; + } + } + } + } diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java index e42520f0f..428697618 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java @@ -7,10 +7,27 @@ */ package org.opendaylight.transportpce.networkmodel; +import com.google.common.base.Optional; + +import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; 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.transportpce.common.NetworkUtils; import org.opendaylight.transportpce.networkmodel.util.OpenRoadmTopology; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.Network; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.LinkId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Network1; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.Link; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.LinkKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.DeleteLinkInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.DeleteLinkOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.DeleteLinkOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.InitRdmXpdrLinksInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.InitRdmXpdrLinksOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.InitRdmXpdrLinksOutputBuilder; @@ -21,6 +38,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networku import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.InitXpdrRdmLinksOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.InitXpdrRdmLinksOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.networkutils.rev170818.NetworkutilsService; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.slf4j.Logger; @@ -37,14 +55,58 @@ public class NetworkUtilsImpl implements NetworkutilsService { this.openRoadmTopology = openRoadmTopology; } + @Override + public Future> deleteLink(DeleteLinkInput input) { + + LinkId linkId = new LinkId(input.getLinkId()); + // Building link instance identifier + InstanceIdentifier.InstanceIdentifierBuilder linkIID = InstanceIdentifier.builder(Network.class, + new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))) + .augmentation(Network1.class).child(Link.class, new LinkKey(linkId)); + + //Check if link exists + try { + ReadOnlyTransaction readOnlyTransaction = dataBroker.newReadOnlyTransaction(); + Optional linkOptional = readOnlyTransaction.read(LogicalDatastoreType.CONFIGURATION, linkIID.build()) + .get(); + if (!linkOptional.isPresent()) { + LOG.info("Link not present"); + return RpcResultBuilder + .success(new DeleteLinkOutputBuilder().setResult( + "Fail")) + .buildFuture(); + } + } catch (ExecutionException | InterruptedException e) { + LOG.error("readMdSal: Error reading link {}", input.getLinkId()); + return RpcResultBuilder + .success(new DeleteLinkOutputBuilder().setResult( + "Fail")) + .buildFuture(); + } + + WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction(); + writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, linkIID.build()); + try { + writeTransaction.submit().get(); + LOG.info("Link with linkId: {} deleted from {} layer.", + input.getLinkId(), NetworkUtils.OVERLAY_NETWORK_ID); + return RpcResultBuilder + .success(new DeleteLinkOutputBuilder().setResult( + "Link {} deleted successfully")) + .buildFuture(); + } catch (InterruptedException | ExecutionException e) { + return RpcResultBuilder.failed().buildFuture(); + } + } + public Future> initRoadmNodes(InitRoadmNodesInput input) { boolean createRdmLinks = OrdLink.createRdm2RdmLinks(input, - openRoadmTopology,dataBroker); + openRoadmTopology, dataBroker); if (createRdmLinks) { return RpcResultBuilder - .success(new InitRoadmNodesOutputBuilder().setResult( - "Unidirectional Roadm-to-Roadm Link created successfully")) - .buildFuture(); + .success(new InitRoadmNodesOutputBuilder().setResult( + "Unidirectional Roadm-to-Roadm Link created successfully")) + .buildFuture(); } else { return RpcResultBuilder.failed().buildFuture(); } @@ -54,11 +116,11 @@ public class NetworkUtilsImpl implements NetworkutilsService { public Future> initXpdrRdmLinks(InitXpdrRdmLinksInput input) { // Assigns user provided input in init-network-view RPC to nodeId boolean createXpdrRdmLinks = Rdm2XpdrLink.createXpdrRdmLinks(input.getLinksInput(), - openRoadmTopology,dataBroker); + openRoadmTopology, dataBroker); if (createXpdrRdmLinks) { return RpcResultBuilder - .success(new InitXpdrRdmLinksOutputBuilder().setResult("Xponder Roadm Link created successfully")) - .buildFuture(); + .success(new InitXpdrRdmLinksOutputBuilder().setResult("Xponder Roadm Link created successfully")) + .buildFuture(); } else { return RpcResultBuilder.failed().buildFuture(); } @@ -66,11 +128,11 @@ public class NetworkUtilsImpl implements NetworkutilsService { public Future> initRdmXpdrLinks(InitRdmXpdrLinksInput input) { boolean createRdmXpdrLinks = Rdm2XpdrLink.createRdmXpdrLinks(input.getLinksInput(), - openRoadmTopology,dataBroker); + openRoadmTopology, dataBroker); if (createRdmXpdrLinks) { return RpcResultBuilder - .success(new InitRdmXpdrLinksOutputBuilder().setResult("Roadm Xponder links created successfully")) - .buildFuture(); + .success(new InitRdmXpdrLinksOutputBuilder().setResult("Roadm Xponder links created successfully")) + .buildFuture(); } else { return RpcResultBuilder.failed().buildFuture(); } -- 2.36.6