Fix for failed transaction 17/52817/1
authorKonsta Pozdeev <konsta.pozdeev@hpe.com>
Thu, 19 Jan 2017 13:14:16 +0000 (15:14 +0200)
committerKonsta Pozdeev <konsta.pozdeev@hpe.com>
Sun, 5 Mar 2017 09:13:59 +0000 (11:13 +0200)
Change-Id: Ia2ab1f3e6fe6847f0a02a273afe37bb71198a84e
Signed-off-by: Konsta Pozdeev <konsta.pozdeev@hpe.com>
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/IpvcListener.java
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/NetvirtVpnUtils.java

index 021f7a861cdb7356c8959f654d2e6f3d1f66c3b9..9c8a773f0efb4a19866fd3362f571a45ded2c318 100644 (file)
@@ -355,56 +355,28 @@ public class IpvcListener extends UnimgrDataTreeChangeListener<Ipvc> implements
         }
 
         String interfaceName = null;
+        String elanName = NetvirtVpnUtils.getElanNameForVpnPort(uniId, ipUniId);
+
+        String srcIpAddressStr = NetvirtVpnUtils
+                .getIpAddressFromPrefix(NetvirtVpnUtils.ipPrefixToString(ipUni.getIpAddress()));
+        IpAddress ipAddress = new IpAddress(srcIpAddressStr.toCharArray());
+        NetvirtVpnUtils.registerDirectSubnetForVpn(dataBroker, new Uuid(elanName), ipAddress);
+
         synchronized (vpnName.intern()) {
             Long vlan = ipUni.getVlan() != null ? Long.valueOf(ipUni.getVlan().getValue()) : null;
-            String elanName = NetvirtVpnUtils.getElanNameForVpnPort(uniId, ipUniId);
-
-            String srcIpAddressStr = NetvirtVpnUtils
-                    .getIpAddressFromPrefix(NetvirtVpnUtils.ipPrefixToString(ipUni.getIpAddress()));
-            IpAddress ipAddress = new IpAddress(srcIpAddressStr.toCharArray());
 
             interfaceName = createElanInterface(vpnName, ipvcId, uniId, elanName, vlan, ipAddress, tx,
                     ipUni.getSegmentationId());
             uniQosManager.mapUniPortBandwidthLimits(uniId, interfaceName, uniInService.getIngressBwProfile());
             createVpnInterface(vpnName, uni, ipUni, interfaceName, elanName, tx);
+            NetvirtVpnUtils.createVpnPortFixedIp(dataBroker, vpnName, interfaceName, ipUni.getIpAddress(),
+                    uni.getMacAddress(), tx);
             MefServicesUtils.addOperIpvcVpnElan(ipvcId, vpnName, uniInService.getUniId(), uniInService.getIpUniId(),
                     elanName, interfaceName, null, tx);
             MdsalUtils.commitTransaction(tx);
         }
-
-        waitForInterfaceDpn(vpnName, rd, interfaceName);
-
-        NetvirtVpnUtils.createVpnPortFixedIp(dataBroker, vpnName, interfaceName, ipUni.getIpAddress(),
-                uni.getMacAddress());
     }
 
-    private void waitForInterfaceDpn(String vpnName, String rd, String interfaceName) {
-        InstanceIdentifier<VpnInstanceOpDataEntry> vpnId = NetvirtVpnUtils.getVpnInstanceOpDataIdentifier(rd);
-        DataWaitGetter<VpnInstanceOpDataEntry> getInterfByName = (vpn) -> {
-            if (vpn.getVpnToDpnList() == null) {
-                return null;
-            }
-            for (VpnToDpnList is : vpn.getVpnToDpnList()) {
-                if (is.getVpnInterfaces() == null) {
-                    continue;
-                }
-                for (VpnInterfaces i : is.getVpnInterfaces()) {
-                    if (i.getInterfaceName().equals(interfaceName)) {
-                        return interfaceName;
-                    }
-                }
-            }
-            return null;
-        };
-        @SuppressWarnings("resource")
-        DataWaitListener<VpnInstanceOpDataEntry> vpnInstanceWaiter = new DataWaitListener<>(dataBroker, vpnId, 10,
-                LogicalDatastoreType.OPERATIONAL, getInterfByName);
-        if (!vpnInstanceWaiter.waitForData()) {
-            String errorMessage = String.format("Fail to wait for vpn to dpn list %s", vpnName);
-            Log.error(errorMessage);
-            throw new UnsupportedOperationException(errorMessage);
-        }
-    }
 
     private String createElanInterface(String vpnName, InstanceIdentifier<Ipvc> ipvcId, String uniId, String elanName,
             Long vlan, IpAddress ipAddress, WriteTransaction tx, Long segmentationId) {
index 7337df2ff96872e55b5c943b1994c5588689c3d3..7fe1dd1c69292b5393fed592d4a952232c7dae86 100644 (file)
@@ -283,6 +283,14 @@ public class NetvirtVpnUtils {
         MdsalUtils.commitTransaction(tx);
     }
 
+    public static void createVpnPortFixedIp(DataBroker dataBroker, String vpnName, String portName, IpPrefix ipAddress,
+            MacAddress macAddress, WriteTransaction tx) {
+        String fixedIpPrefix = ipPrefixToString(ipAddress);
+        String fixedIp = getIpAddressFromPrefix(fixedIpPrefix);
+
+        createVpnPortFixedIp(vpnName, portName, fixedIp, macAddress, tx);
+    }
+
     private static void createVpnPortFixedIp(String vpnName, String portName, String fixedIp, MacAddress macAddress,
             WriteTransaction tx) {
         synchronized ((vpnName + fixedIp).intern()) {