From 6d2fc73ee77b2c78bd48844f1cb846b293a86488 Mon Sep 17 00:00:00 2001 From: Konsta Pozdeev Date: Thu, 19 Jan 2017 15:14:16 +0200 Subject: [PATCH] Fix for failed transaction Change-Id: Ia2ab1f3e6fe6847f0a02a273afe37bb71198a84e Signed-off-by: Konsta Pozdeev --- .../unimgr/mef/netvirt/IpvcListener.java | 46 ++++--------------- .../unimgr/mef/netvirt/NetvirtVpnUtils.java | 8 ++++ 2 files changed, 17 insertions(+), 37 deletions(-) diff --git a/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/IpvcListener.java b/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/IpvcListener.java index 021f7a86..9c8a773f 100644 --- a/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/IpvcListener.java +++ b/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/IpvcListener.java @@ -355,56 +355,28 @@ public class IpvcListener extends UnimgrDataTreeChangeListener 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 vpnId = NetvirtVpnUtils.getVpnInstanceOpDataIdentifier(rd); - DataWaitGetter 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 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 ipvcId, String uniId, String elanName, Long vlan, IpAddress ipAddress, WriteTransaction tx, Long segmentationId) { diff --git a/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/NetvirtVpnUtils.java b/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/NetvirtVpnUtils.java index 7337df2f..7fe1dd1c 100644 --- a/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/NetvirtVpnUtils.java +++ b/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/NetvirtVpnUtils.java @@ -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()) { -- 2.36.6