NETVIRT-1630 migrate to md-sal APIs
[netvirt.git] / vpnmanager / impl / src / main / java / org / opendaylight / netvirt / vpnmanager / populator / impl / L3vpnPopulator.java
index 5f05a64f0a0f43e1ee6acc13dcd6aefcb786163e..d7c899eae7dd4b1d3496cd09d4e5788fb0db6e75 100644 (file)
@@ -7,25 +7,25 @@
  */
 package org.opendaylight.netvirt.vpnmanager.populator.impl;
 
-import static org.opendaylight.controller.md.sal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
 import static org.opendaylight.genius.infra.Datastore.OPERATIONAL;
 import static org.opendaylight.infrautils.utils.concurrent.ListenableFutures.addErrorLogging;
+import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
 
-import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
-import java.math.BigInteger;
 import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.locks.ReentrantLock;
 import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker;
 import org.opendaylight.genius.infra.Datastore.Configuration;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl;
 import org.opendaylight.genius.infra.TypedWriteTransaction;
-import org.opendaylight.genius.mdsalutil.MDSALUtil;
 import org.opendaylight.genius.utils.JvmGlobalLocks;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.netvirt.bgpmanager.api.IBgpManager;
 import org.opendaylight.netvirt.fibmanager.api.FibHelper;
 import org.opendaylight.netvirt.fibmanager.api.IFibManager;
@@ -46,10 +46,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev15033
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.label.route.map.LabelRouteInfoKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntryKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.adjacency.list.Adjacency;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.adjacency.list.AdjacencyBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.VpnInstanceOpDataEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.adjacency.list.Adjacency;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.adjacency.list.AdjacencyBuilder;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.Uint32;
+import org.opendaylight.yangtools.yang.common.Uint64;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -69,21 +71,22 @@ public abstract class L3vpnPopulator implements VpnPopulator {
         this.broker = dataBroker;
         this.txRunner = new ManagedNewTransactionRunnerImpl(dataBroker);
         this.vpnUtil = vpnUtil;
-
     }
 
     @Override
-    public void populateFib(L3vpnInput input, TypedWriteTransaction<Configuration> writeCfgTxn) {}
+    public void populateFib(L3vpnInput input, TypedWriteTransaction<Configuration> writeCfgTxn) {
+
+    }
 
     public void addSubnetRouteFibEntry(L3vpnInput input) {
         String rd = input.getRd();
         String vpnName = input.getVpnName();
         String prefix = input.getSubnetIp();
         String nextHop = input.getNextHopIp();
-        long label = input.getLabel();
-        long l3vni = input.getL3vni();
-        long elantag = input.getElanTag();
-        BigInteger dpnId = input.getDpnId();
+        Uint32 label = Uint32.valueOf(input.getLabel());
+        Uint32 l3vni = Uint32.valueOf(input.getL3vni());
+        Uint32 elantag = Uint32.valueOf(input.getElanTag());
+        Uint64 dpnId = input.getDpnId();
         String networkName = input.getNetworkName();
         String gwMacAddress = input.getGatewayMac();
         SubnetRoute route = new SubnetRouteBuilder().setElantag(elantag).build();
@@ -95,8 +98,14 @@ public abstract class L3vpnPopulator implements VpnPopulator {
                 InstanceIdentifier.builder(FibEntries.class)
                         .child(VrfTables.class, new VrfTablesKey(rd))
                         .child(VrfEntry.class, new VrfEntryKey(prefix)).build();
-        Optional<VrfEntry> entry = MDSALUtil.read(broker, LogicalDatastoreType.CONFIGURATION, vrfEntryId);
-
+        Optional<VrfEntry> entry = Optional.empty();
+        try {
+            entry = SingleTransactionDataBroker.syncReadOptional(broker,
+                    LogicalDatastoreType.CONFIGURATION, vrfEntryId);
+        } catch (ExecutionException | InterruptedException e) {
+            LOG.error("addSubnetRouteFibEntry: Exception while reading vrfEntry for the prefix {} rd {}", prefix,
+                    rd, e);
+        }
         if (!entry.isPresent()) {
             List<VrfEntry> vrfEntryList = Collections.singletonList(vrfEntry);
 
@@ -116,8 +125,9 @@ public abstract class L3vpnPopulator implements VpnPopulator {
 
         //Will be handled appropriately with the iRT patch for EVPN
         if (input.getEncapType().equals(VrfEntryBase.EncapType.Mplsgre)) {
-            long vpnId = vpnUtil.getVpnId(vpnName);
-            addToLabelMapper(label, dpnId, prefix, Collections.singletonList(nextHop), vpnId, null, elantag, true, rd);
+            Uint32 vpnId = vpnUtil.getVpnId(vpnName);
+            addToLabelMapper(label, dpnId, prefix, Collections.singletonList(nextHop), vpnId, null,
+                    elantag, true, rd);
             List<VpnInstanceOpDataEntry> vpnsToImportRoute = vpnUtil.getVpnsImportingMyRoute(vpnName);
             if (vpnsToImportRoute.size() > 0) {
                 VrfEntry importingVrfEntry = FibHelper.getVrfEntryBuilder(prefix, label, nextHop,
@@ -141,8 +151,9 @@ public abstract class L3vpnPopulator implements VpnPopulator {
                 + "rd {} vpnName {}", prefix, nextHop, label, elantag, rd, vpnName);
     }
 
-    public void addToLabelMapper(Long label, BigInteger dpnId, String prefix, List<String> nextHopIpList, Long vpnId,
-            @Nullable String vpnInterfaceName, @Nullable Long elanTag, boolean isSubnetRoute, String rd) {
+    public void addToLabelMapper(Uint32 label, Uint64 dpnId, String prefix, List<String> nextHopIpList, Uint32 vpnId,
+                                 @Nullable String vpnInterfaceName, @Nullable Uint32 elanTag,
+                                 boolean isSubnetRoute, String rd) {
         final String labelStr = Preconditions.checkNotNull(label, "addToLabelMapper: label cannot be null or empty!")
                 .toString();
         Preconditions.checkNotNull(prefix, "addToLabelMapper: prefix cannot be null or empty!");
@@ -208,7 +219,7 @@ public abstract class L3vpnPopulator implements VpnPopulator {
 
     @SuppressWarnings("checkstyle:IllegalCatch")
     protected void addPrefixToBGP(String rd, String primaryRd, @Nullable String macAddress, String prefix,
-                                  String nextHopIp, VrfEntry.EncapType encapType, long label, long l3vni,
+                                  String nextHopIp, VrfEntry.EncapType encapType, Uint32 label, Uint32 l3vni,
                                   String gatewayMac, RouteOrigin origin,
                                   TypedWriteTransaction<Configuration> writeConfigTxn) {
         try {
@@ -216,13 +227,13 @@ public abstract class L3vpnPopulator implements VpnPopulator {
             LOG.info("ADD: addPrefixToBGP: Adding Fib entry rd {} prefix {} nextHop {} label {} gwMac {}", rd, prefix,
                     nextHopList, label, gatewayMac);
             fibManager.addOrUpdateFibEntry(primaryRd, macAddress, prefix, nextHopList,
-                    encapType, (int)label, l3vni, gatewayMac, null /*parentVpnRd*/, origin, writeConfigTxn);
+                    encapType, label, l3vni, gatewayMac, null /*parentVpnRd*/, origin, writeConfigTxn);
             LOG.info("ADD: addPrefixToBGP: Added Fib entry rd {} prefix {} nextHop {} label {} gwMac {}", rd, prefix,
                     nextHopList, label, gatewayMac);
             // Advertise the prefix to BGP only if nexthop ip is available
             if (!nextHopList.isEmpty()) {
-                bgpManager.advertisePrefix(rd, macAddress, prefix, nextHopList, encapType, (int)label,
-                        l3vni, 0 /*l2vni*/, gatewayMac);
+                bgpManager.advertisePrefix(rd, macAddress, prefix, nextHopList, encapType, label,
+                        l3vni, Uint32.ZERO /*l2vni*/, gatewayMac);
             } else {
                 LOG.error("addPrefixToBGP: NextHopList is null/empty. Hence rd {} prefix {} nextHop {} label {}"
                         + " gwMac {} is not advertised to BGP", rd, prefix, nextHopList, label, gatewayMac);