+ @Override
+ public Future<RpcResult<DeleteLinkOutput>> deleteLink(DeleteLinkInput input) {
+
+ LinkId linkId = new LinkId(input.getLinkId());
+ // Building link instance identifier
+ InstanceIdentifier.InstanceIdentifierBuilder<Link> 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<Link> 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.<DeleteLinkOutput>failed().buildFuture();
+ }
+ }
+