netvirt after-fixes again 11/54311/2
authorKonsta Pozdeev <konsta.pozdeev@hpe.com>
Tue, 4 Apr 2017 13:46:04 +0000 (16:46 +0300)
committerKonsta Pozdeev <konsta.pozdeev@hpe.com>
Tue, 4 Apr 2017 13:49:53 +0000 (16:49 +0300)
Change-Id: I78e432f6ab3cf8274549aa8f2a6aa2674d507bb9
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
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/SubnetListener.java
netvirt/src/main/resources/org/opendaylight/blueprint/netvirt-driver.xml

index 054515ae540b914538fc7ef4b176d2567a0b3a06..244f5a232cef379c8e08b576a16922c262223ca8 100644 (file)
@@ -320,10 +320,6 @@ public class IpvcListener extends UnimgrDataTreeChangeListener<Ipvc> implements
         }
         updateQos(uniToCreate);
 
-        for (BigInteger dpId : portToDpn.values()) {
-            NetvirtVpnUtils.refreshDpnGw(notificationPublishService, vpnName, dpId);
-        }
-
     }
 
     private void updateIpvc(DataTreeModification<Ipvc> modifiedDataObject) {
@@ -387,7 +383,7 @@ public class IpvcListener extends UnimgrDataTreeChangeListener<Ipvc> implements
         synchronized (vpnName.intern()) {
             Long vlan = ipUni.getVlan() != null ? Long.valueOf(ipUni.getVlan().getValue()) : null;
 
-            interfaceName = createElanInterface(vpnName, ipvcId, uniId, elanName, vlan, tx, ipUni.getSegmentationId());
+            interfaceName = createElanInterface(vpnName, ipvcId, uniId, elanName, vlan, ipUni.getSegmentationId());
 
             String portMacAddress = uni.getMacAddress().getValue();
             NetvirtVpnUtils.registerDirectSubnetForVpn(dataBroker, vpnName, new Uuid(elanName), ipUni.getIpAddress(),
@@ -404,8 +400,9 @@ public class IpvcListener extends UnimgrDataTreeChangeListener<Ipvc> implements
     }
 
     private String createElanInterface(String vpnName, InstanceIdentifier<Ipvc> ipvcId, String uniId, String elanName,
-            Long vlan, WriteTransaction tx, Long segmentationId) {
+            Long vlan, Long segmentationId) {
         Log.info("Adding elan instance: " + elanName);
+        WriteTransaction tx = MdsalUtils.createTransaction(dataBroker);
         NetvirtUtils.updateElanInstance(elanName, tx, segmentationId);
 
         Log.info("Added trunk interface for uni {} vlan: {}", uniId, vlan);
@@ -421,6 +418,7 @@ public class IpvcListener extends UnimgrDataTreeChangeListener<Ipvc> implements
 
         Log.info("Adding elan interface: " + interfaceName);
         NetvirtUtils.createElanInterface(elanName, interfaceName, EtreeInterfaceType.Root, false, tx);
+        MdsalUtils.commitTransaction(tx);
         return interfaceName;
     }
 
@@ -460,7 +458,8 @@ public class IpvcListener extends UnimgrDataTreeChangeListener<Ipvc> implements
         }
 
         synchronized (vpnName.intern()) {
-            NetvirtVpnUtils.unregisterDirectSubnetForVpn(dataBroker, vpnName, new Uuid(vpnElans.getElanId()), vpnElans.getElanPort());
+            NetvirtVpnUtils.unregisterDirectSubnetForVpn(dataBroker, vpnName, new Uuid(vpnElans.getElanId()),
+                    vpnElans.getElanPort());
             uniQosManager.unMapUniPortBandwidthLimits(uniId, vpnElans.getElanPort());
             NetvirtVpnUtils.removeLearnedVpnVipToPort(dataBroker, vpnName, vpnElans.getElanPort());
             removeVpnInterface(vpnName, vpnElans, uniId, ipUni);
index d85461cdf90995b6555a9b4ca84f29523cac6bd4..0a6cd962b94101a59e8ddde7ec394c473d3208bc 100644 (file)
@@ -61,8 +61,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.VpnInstanceOpDataEntryKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.NetworkMaps;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.NeutronVpnPortipPortData;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.SubnetAddedToVpnBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.SubnetDeletedFromVpnBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.Subnetmaps;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.networkmaps.NetworkMap;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.networkmaps.NetworkMapBuilder;
@@ -396,70 +394,6 @@ public class NetvirtVpnUtils {
         logger.info("Finished  remove  subnet {}", subnetName);
     }
 
-    public static void publishDirectSubnetToVpn(DataBroker dataBroker,
-            final NotificationPublishService notificationPublishService, String vpnName, String subnetName,
-            IpPrefix subnetIpPrefix, String interfaceName, String intfMac, int waitForElan) {
-        InstanceIdentifier<ElanInstance> elanIdentifierId = NetvirtUtils.getElanInstanceInstanceIdentifier(subnetName);
-
-        @SuppressWarnings("resource") // AutoCloseable
-        DataWaitListener<ElanInstance> elanTagWaiter = new DataWaitListener<>(dataBroker, elanIdentifierId, 10,
-                LogicalDatastoreType.CONFIGURATION, el -> el.getElanTag());
-        if (!elanTagWaiter.waitForData()) {
-            logger.error("Trying to add invalid elan {} to vpn {}", subnetName, vpnName);
-            return;
-        }
-
-        Uuid subnetId = new Uuid(subnetName);
-        String subnetIp = getSubnetFromPrefix(ipPrefixToString(subnetIpPrefix));
-
-        Optional<ElanInstance> elanInstance = MdsalUtils.read(dataBroker, LogicalDatastoreType.CONFIGURATION,
-                elanIdentifierId);
-        Long elanTag = elanInstance.get().getElanTag();
-
-        logger.info("Publish subnet {}", subnetName);
-        publishSubnetAddNotification(notificationPublishService, subnetId, subnetIp, vpnName, elanTag);
-        logger.info("Finished Working on subnet {}", subnetName);
-      
-    }
-    
-    public static void refreshDpnGw(final NotificationPublishService notificationPublishService, String vpnName, BigInteger dpId) {
-        
-        AddDpnEventBuilder addDpnEventBuilder = new AddDpnEventBuilder();
-        AddEventDataBuilder eventData = new AddEventDataBuilder();
-        eventData.setVpnName(vpnName);
-        eventData.setDpnId(dpId);
-        
-        addDpnEventBuilder.setAddEventData(eventData.build());
-        try {
-            logger.info("Refrehein dpId {}", dpId);
-            notificationPublishService.putNotification(addDpnEventBuilder.build());
-        } catch (InterruptedException e) {
-            logger.error("Fail to publish notification {}", addDpnEventBuilder, e);
-            throw new RuntimeException(e.getMessage());
-        }
-    }
-
-    public static void publishRemoveDirectSubnetFromVpn(DataBroker dataBroker,
-            final NotificationPublishService notificationPublishService, String vpnName, String subnetName,
-            String interfaceName) {
-        InstanceIdentifier<ElanInstance> elanIdentifierId = InstanceIdentifier.builder(ElanInstances.class)
-                .child(ElanInstance.class, new ElanInstanceKey(subnetName)).build();
-        Optional<ElanInstance> elanInstance = MdsalUtils.read(dataBroker, LogicalDatastoreType.CONFIGURATION,
-                elanIdentifierId);
-        if (!elanInstance.isPresent()) {
-            logger.error("Trying to remove invalid elan {} to vpn {}", subnetName, vpnName);
-            return;
-        }
-        Long elanTag = elanInstance.get().getElanTag() != null ? elanInstance.get().getElanTag()
-                : elanInstance.get().getSegmentationId();
-        Uuid subnetId = new Uuid(subnetName);
-
-        logger.info("Publish subnet remove {}", subnetName);
-        publishSubnetRemoveNotification(notificationPublishService, subnetId, vpnName, elanTag);
-
-        logger.info("Finished publish remove on subnet {}", subnetName);
-    }
-
     private static void createSubnetToNetworkMapping(DataBroker dataBroker, Uuid subnetId, Uuid networkId) {
         InstanceIdentifier<NetworkMap> networkMapIdentifier = getNetworkMapIdentifier(networkId);
         Optional<NetworkMap> optionalNetworkMap = MdsalUtils.read(dataBroker, LogicalDatastoreType.CONFIGURATION,
@@ -489,7 +423,16 @@ public class NetvirtVpnUtils {
     }
 
     protected static void updateSubnetNode(DataBroker dataBroker, Uuid vpnId, Uuid subnetId, String subnetIp,
-            String intfMac) {
+            String intfMac) {       
+        InstanceIdentifier<ElanInstance> elanIdentifierId = NetvirtUtils.getElanInstanceInstanceIdentifier(subnetId.getValue());
+        @SuppressWarnings("resource") // AutoCloseable
+        DataWaitListener<ElanInstance> elanTagWaiter = new DataWaitListener<>(dataBroker, elanIdentifierId, 10,
+                LogicalDatastoreType.CONFIGURATION, el -> el.getElanTag());
+        if (!elanTagWaiter.waitForData()) {
+            logger.error("Trying to add invalid elan {} to vpn {}", subnetId.getValue(), vpnId.getValue());
+            return;
+        }
+        
         Subnetmap subnetmap = null;
         SubnetmapBuilder builder = null;
         InstanceIdentifier<Subnetmap> id = InstanceIdentifier.builder(Subnetmaps.class)
@@ -508,6 +451,7 @@ public class NetvirtVpnUtils {
             builder.setSubnetIp(subnetIp);
             builder.setNetworkId(subnetId);
             builder.setVpnId(vpnId);
+            builder.setRouterId(vpnId);
             builder.setRouterIntfMacAddress(intfMac);
 
             subnetmap = builder.build();
@@ -593,45 +537,6 @@ public class NetvirtVpnUtils {
         return InstanceIdentifier.builder(LearntVpnVipToPortData.class).child(LearntVpnVipToPort.class).build();
     }
 
-    private static void publishSubnetAddNotification(final NotificationPublishService notificationPublishService,
-            Uuid subnetId, String subnetIp, String vpnName, Long elanTag) {
-        SubnetAddedToVpnBuilder builder = new SubnetAddedToVpnBuilder();
-
-        logger.info("publish notification called for network creation");
-
-        builder.setSubnetId(subnetId);
-        builder.setSubnetIp(subnetIp);
-        builder.setVpnName(vpnName);
-        builder.setBgpVpn(true);
-        builder.setElanTag(elanTag);
-
-        try {
-            notificationPublishService.putNotification(builder.build());
-        } catch (InterruptedException e) {
-            logger.error("Fail to publish notification {}", builder, e);
-            throw new RuntimeException(e.getMessage());
-        }
-    }
-
-    private static void publishSubnetRemoveNotification(final NotificationPublishService notificationPublishService,
-            Uuid subnetId, String vpnName, Long elanTag) {
-        SubnetDeletedFromVpnBuilder builder = new SubnetDeletedFromVpnBuilder();
-
-        logger.info("publish notification called for network deletion");
-
-        builder.setSubnetId(subnetId);
-        builder.setVpnName(vpnName);
-        builder.setBgpVpn(true);
-        builder.setElanTag(elanTag);
-
-        try {
-            notificationPublishService.putNotification(builder.build());
-        } catch (InterruptedException e) {
-            logger.error("Fail to publish notification {}", builder, e);
-            throw new RuntimeException(e.getMessage());
-        }
-    }
-
     public static void sendArpRequest(OdlArputilService arpUtilService, IpAddress srcIpAddress, IpAddress dstIpAddress,
             String interf) {
         try {
index 60a3b5e978ba55ed006923bddf6b67c84fee578c..74c668f813abc58bc633d56c3b6948fe01d6a662 100644 (file)
@@ -15,7 +15,6 @@ import java.util.stream.Collectors;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
-import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.unimgr.api.UnimgrDataTreeChangeListener;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.Subnets;
@@ -40,16 +39,11 @@ import com.google.common.base.Optional;
 public class SubnetListener extends UnimgrDataTreeChangeListener<Subnet> implements ISubnetManager {
     private static final Logger Log = LoggerFactory.getLogger(SubnetListener.class);
     private ListenerRegistration<SubnetListener> subnetListenerRegistration;
-    private final NotificationPublishService notificationPublishService;
     private final IGwMacListener gwMacListener;
-    private final int waitForElanInterval;
 
-    public SubnetListener(final DataBroker dataBroker, final NotificationPublishService notPublishService,
-            final IGwMacListener gwMacListener, int sleepInterval) {
+    public SubnetListener(final DataBroker dataBroker, final IGwMacListener gwMacListener) {
         super(dataBroker);
-        this.notificationPublishService = notPublishService;
         this.gwMacListener = gwMacListener;
-        this.waitForElanInterval = sleepInterval;
         registerListener();
     }
 
@@ -155,9 +149,8 @@ public class SubnetListener extends UnimgrDataTreeChangeListener<Subnet> impleme
                 return;
             }
 
-            String vpnId = ipvcVpn.getVpnId();
             if (newSubnet.getGateway() == null) {
-                checkCreateDirectNetwork(newSubnet, ipvcVpn, ipvcId, vpnElan);
+                Log.trace("Direct subnet removed {}", newSubnet.getSubnet());
             } else {
                 createNonDirectNetwork(newSubnet, ipvcVpn, ipvcId, vpnElan);
             }
@@ -192,25 +185,6 @@ public class SubnetListener extends UnimgrDataTreeChangeListener<Subnet> impleme
                 subnet);
     }
 
-    private void checkCreateDirectNetwork(Subnet newSubnet, IpvcVpn ipvcVpn, InstanceIdentifier<Ipvc> ipvcId,
-            VpnElans vpnElan) {
-        if (newSubnet.getGateway() != null) {
-            return;
-        }
-
-        org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni operUni = MefInterfaceUtils
-                .getUni(dataBroker, newSubnet.getUniId().getValue(), LogicalDatastoreType.OPERATIONAL);
-        if (operUni == null) {
-            Log.error("Uni {} for network {} is not operational", newSubnet.getUniId(), newSubnet.getSubnet());
-            return;
-        }
-        String portMacAddress = operUni.getMacAddress().getValue();
-
-        NetvirtVpnUtils.publishDirectSubnetToVpn(dataBroker, notificationPublishService, ipvcVpn.getVpnId(),
-                vpnElan.getElanId(), newSubnet.getSubnet(), vpnElan.getElanPort(), portMacAddress, waitForElanInterval);
-
-    }
-
     private void removeNetwork(DataTreeModification<Subnet> deletedDataObject) {
         Subnet deletedSubnet = deletedDataObject.getRootNode().getDataBefore();
         Identifier45 dlUniId = deletedSubnet.getUniId();
@@ -243,9 +217,8 @@ public class SubnetListener extends UnimgrDataTreeChangeListener<Subnet> impleme
                 return;
             }
 
-            String vpnId = ipvcVpn.getVpnId();
             if (dlSubnet.getGateway() == null) {
-                removeDirectNetwork(dlSubnet, ipvcVpn, ipvcId);
+                Log.trace("Direct subnet removed {}", dlSubnet.getSubnet());
             } else {
                 removeNonDirectNetwork(dlSubnet, ipvcVpn, ipvcId);
             }
@@ -255,23 +228,6 @@ public class SubnetListener extends UnimgrDataTreeChangeListener<Subnet> impleme
         }
     }
 
-    private void removeDirectNetwork(Subnet deletedSubnet, IpvcVpn ipvcVpn, InstanceIdentifier<Ipvc> ipvcId) {
-        if (deletedSubnet.getGateway() != null) {
-            return;
-        }
-
-        String subnetStr = NetvirtVpnUtils.ipPrefixToString(deletedSubnet.getSubnet());
-        VpnElans vpnElan = MefServicesUtils.findVpnForNetwork(deletedSubnet, ipvcVpn);
-        if (vpnElan == null) {
-            Log.error("Network {} has not been created as required, nothing to remove", subnetStr);
-            return;
-        }
-
-        NetvirtVpnUtils.publishRemoveDirectSubnetFromVpn(dataBroker, notificationPublishService, ipvcVpn.getVpnId(),
-                vpnElan.getElanId(), vpnElan.getElanPort());
-
-    }
-
     private void removeNonDirectNetwork(Subnet deletedSubnet, IpvcVpn ipvcVpn, InstanceIdentifier<Ipvc> ipvcId) {
         if (deletedSubnet.getGateway() == null) {
             return;
index c6ae4f893fc2da7a243d246153a6ee2df04a1f7f..d8ab814f880fd1ad16946dbe5a0e802048cd73b5 100644 (file)
@@ -43,9 +43,7 @@
 
        <bean id="subnetListener" class="org.opendaylight.unimgr.mef.netvirt.SubnetListener">
                <argument ref="dataBroker" />
-               <argument ref="notificationPublishService" />
                <argument ref="qwMacListener" />
-               <argument value="5" />
        </bean>
 
        <bean id="qwMacListener" class="org.opendaylight.unimgr.mef.netvirt.GwMacListener">