Bug 7445: Improve the performance on bulk create.
[netvirt.git] / openstack / net-virt-providers / src / main / java / org / opendaylight / netvirt / openstack / netvirt / providers / openflow13 / OF13Provider.java
index 27b5007eedb6b78f91db598445703a5e021f7104..586b08bd0784bc1a8390c7e1bbc5d1367bfa18f7 100644 (file)
@@ -39,6 +39,7 @@ import org.opendaylight.netvirt.openstack.netvirt.api.NetworkingProvider;
 import org.opendaylight.netvirt.openstack.netvirt.api.NetworkingProviderManager;
 import org.opendaylight.netvirt.openstack.netvirt.api.NodeCacheManager;
 import org.opendaylight.netvirt.openstack.netvirt.api.ResubmitAclLearnProvider;
+import org.opendaylight.netvirt.openstack.netvirt.api.SecurityGroupCacheManger;
 import org.opendaylight.netvirt.openstack.netvirt.api.SecurityServicesManager;
 import org.opendaylight.netvirt.openstack.netvirt.api.Southbound;
 import org.opendaylight.netvirt.openstack.netvirt.api.Status;
@@ -131,6 +132,7 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
     private volatile ResubmitAclLearnProvider resubmitAclLearnProvider;
     private volatile L2ForwardingLearnProvider l2ForwardingLearnProvider;
     private volatile L2ForwardingProvider l2ForwardingProvider;
+    private volatile SecurityGroupCacheManger securityGroupCacheManger;
 
     public static final String NAME = "OF13Provider";
     private volatile BundleContext bundleContext;
@@ -1003,7 +1005,6 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
             LOG.info("Port security is not enabled" + intf);
             return;
         }
-        org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId nodeId = node.getNodeId();
         NeutronPort dhcpPort = securityServicesManager.getDhcpServerPort(intf);
         List<Neutron_IPs> srcAddressList = null;
         if (null != dhcpPort) {
@@ -1025,13 +1026,18 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
                     .getSecurityGroupInPortList(intf);
             String neutronPortId = southbound.getInterfaceExternalIdsValue(intf,
                                                                            Constants.EXTERNAL_ID_INTERFACE_ID);
+            org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId nodeId = node.getNodeId();
             for (NeutronSecurityGroup securityGroupInPort:securityGroupListInPort) {
                 ingressAclProvider.programPortSecurityGroup(dpid, segmentationId, attachedMac, localPort,
                                                             securityGroupInPort, neutronPortId, nodeId, write);
                 egressAclProvider.programPortSecurityGroup(dpid, segmentationId, attachedMac, localPort,
                                                            securityGroupInPort, neutronPortId, nodeId, write);
+                if (write) {
+                    securityGroupCacheManger.portAdded(securityGroupInPort.getSecurityGroupUUID(), neutronPortId);
+                } else {
+                    securityGroupCacheManger.portRemoved(securityGroupInPort.getSecurityGroupUUID(), neutronPortId);
+                }
             }
-
         } else {
             LOG.warn("programLocalRules: No DCHP port seen in  network of {}", intf);
         }
@@ -2032,6 +2038,8 @@ public class OF13Provider implements ConfigInterface, NetworkingProvider {
                 (SecurityServicesManager) ServiceHelper.getGlobalInstance(SecurityServicesManager.class, this);
         southbound =
                 (Southbound) ServiceHelper.getGlobalInstance(Southbound.class, this);
+        securityGroupCacheManger =
+                (SecurityGroupCacheManger) ServiceHelper.getGlobalInstance(SecurityGroupCacheManger.class, this);
     }
 
     @Override