From ef59c766d692d5217b7d9a51dc28449e8a5652eb Mon Sep 17 00:00:00 2001 From: Aswin Suryanarayanan Date: Mon, 25 Jan 2016 21:52:20 +0530 Subject: [PATCH] Fixes Bug 4769 The fix for the bug 4205 is extented to other instances where neutron port cache is used. Change-Id: Ic69142c1804a37725a9dc9c611d583302284d18c Signed-off-by: Aswin Suryanarayanan --- .../netvirt/impl/NeutronL3Adapter.java | 6 ++- .../netvirt/impl/SecurityServicesImpl.java | 48 ++++++++++++------- .../impl/SecurityServicesImplTest.java | 4 +- 3 files changed, 38 insertions(+), 20 deletions(-) diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/NeutronL3Adapter.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/NeutronL3Adapter.java index 39efd4bc4..e467f9c8a 100644 --- a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/NeutronL3Adapter.java +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/NeutronL3Adapter.java @@ -1553,15 +1553,19 @@ public class NeutronL3Adapter extends AbstractHandler implements GatewayMacResol this.portCleanupCache.remove(port); } + public Set getPortCleanupCache() { + return this.portCleanupCache; + } + public NeutronPort getPortFromCleanupCache(String portid) { for (NeutronPort neutronPort : this.portCleanupCache) { if (neutronPort.getPortUUID() != null ) { if (neutronPort.getPortUUID().equals(portid)) { LOG.info("getPortFromCleanupCache: Matching NeutronPort found {}", portid); return neutronPort; - } } } + } return null; } diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SecurityServicesImpl.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SecurityServicesImpl.java index c5f7f5869..fe878c3cc 100644 --- a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SecurityServicesImpl.java +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SecurityServicesImpl.java @@ -71,7 +71,12 @@ public class SecurityServicesImpl implements ConfigInterface, SecurityServicesMa } NeutronPort neutronPort = neutronPortCache.getPort(neutronPortId); if (neutronPort == null) { - return false; + neutronPort = neutronL3Adapter.getPortFromCleanupCache(neutronPortId); + if (neutronPort == null) { + LOG.error("isPortSecurityReady for {}", terminationPointAugmentation.getName() + + "not found"); + return false; + } } String deviceOwner = neutronPort.getDeviceOwner(); if (!deviceOwner.contains("compute")) { @@ -96,7 +101,7 @@ public class SecurityServicesImpl implements ConfigInterface, SecurityServicesMa LOG.error("neutron port is null"); return neutronSecurityGroups; } - LOG.trace("isPortSecurityReady for {}", terminationPointAugmentation.getName()); + LOG.trace("getSecurityGroupInPortList for {}", terminationPointAugmentation.getName()); String neutronPortId = southbound.getInterfaceExternalIdsValue(terminationPointAugmentation, Constants.EXTERNAL_ID_INTERFACE_ID); if (neutronPortId == null) { @@ -104,7 +109,12 @@ public class SecurityServicesImpl implements ConfigInterface, SecurityServicesMa } NeutronPort neutronPort = neutronPortCache.getPort(neutronPortId); if (neutronPort == null) { - return neutronSecurityGroups; + neutronPort = neutronL3Adapter.getPortFromCleanupCache(neutronPortId); + if (neutronPort == null) { + LOG.error("getSecurityGroupInPortList for {}", terminationPointAugmentation.getName() + + "not found."); + return neutronSecurityGroups; + } } neutronSecurityGroups = neutronPort.getSecurityGroups(); return neutronSecurityGroups; @@ -129,11 +139,10 @@ public class SecurityServicesImpl implements ConfigInterface, SecurityServicesMa neutronPort = neutronPortCache.getPort(neutronPortId); } - if (neutronPort == null ){ + if (neutronPort == null) { neutronPort = neutronL3Adapter.getPortFromCleanupCache(neutronPortId); - if (neutronPort == null) - { - LOG.info("getDHCPServerPort: neutron port of {} is not found", neutronPortId); + if (neutronPort == null) { + LOG.error("getDHCPServerPort: neutron port of {} is not found", neutronPortId); return null; } LOG.info("getDHCPServerPort: neutron port of {} got from cleanupcache", neutronPortId); @@ -189,8 +198,11 @@ public class SecurityServicesImpl implements ConfigInterface, SecurityServicesMa } NeutronPort neutronPort = neutronPortCache.getPort(neutronPortId); if (neutronPort == null) { - LOG.error("getNeutronPortFromDhcpIntf: neutron port of {} is not found", neutronPortId); - return null; + neutronPort = neutronL3Adapter.getPortFromCleanupCache(neutronPortId); + if (neutronPort == null) { + LOG.error("getNeutronPortFromDhcpIntf: neutron port of {} is not found", neutronPortId); + return null; + } } /* if the current port is a DHCP port, return true*/ if (neutronPort.getDeviceOwner().contains("dhcp")) { @@ -216,19 +228,18 @@ public class SecurityServicesImpl implements ConfigInterface, SecurityServicesMa neutronPort = neutronPortCache.getPort(neutronPortId); } - if (neutronPort == null ){ + if (neutronPort == null) { LOG.trace("getNeutronPortFromCache: neutron port of {} search in cleanupcache", neutronPortId); neutronPort = neutronL3Adapter.getPortFromCleanupCache(neutronPortId); - if (neutronPort == null) - { - LOG.info("getNeutronPortFromCache: neutron port of {} is not found", neutronPortId); + if (neutronPort == null) { + LOG.error("getNeutronPortFromCache: neutron port of {} is not found", neutronPortId); return null; } LOG.trace("getNeutronPortFromCache: neutron port of {} got from cleanupcache", neutronPortId); } - }catch (Exception e) { + } catch (Exception e) { LOG.warn("getNeutronPortFromCache:getNeutronPortFromCache failed due to ", e); return null; } @@ -240,7 +251,7 @@ public class SecurityServicesImpl implements ConfigInterface, SecurityServicesMa @Override public boolean isComputePort(OvsdbTerminationPointAugmentation terminationPointAugmentation) { if (neutronPortCache == null) { - LOG.warn("isComputePort : neutronPortCache is null"); + LOG.warn("isComputePort : neutronPortCache is null"); } NeutronPort neutronPort = null; LOG.trace("isComputePort for {}", terminationPointAugmentation.getName()); @@ -254,8 +265,9 @@ public class SecurityServicesImpl implements ConfigInterface, SecurityServicesMa } if (neutronPort == null) { neutronPort = getNeutronPortFromCache(terminationPointAugmentation); - if (neutronPort == null) - return false; + if (neutronPort == null) { + return false; + } } /*Check the device owner and if it contains compute to identify * whether it is a compute port.*/ @@ -385,7 +397,7 @@ public class SecurityServicesImpl implements ConfigInterface, SecurityServicesMa /*For every port check whether security grouplist contains the current * security group.*/ try { - for (NeutronPort neutronPort:neutronPortCache.getAllPorts()) { + for (NeutronPort neutronPort:neutronL3Adapter.getPortCleanupCache()) { if (!neutronPort.getDeviceOwner().contains("compute")) { LOG.debug("getVMListForSecurityGroup : the port {} is not " + "compute port belongs to {}", neutronPort.getID(), neutronPort.getDeviceOwner()); diff --git a/openstack/net-virt/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SecurityServicesImplTest.java b/openstack/net-virt/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SecurityServicesImplTest.java index 31439ed2e..c471b4c55 100644 --- a/openstack/net-virt/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SecurityServicesImplTest.java +++ b/openstack/net-virt/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SecurityServicesImplTest.java @@ -19,6 +19,7 @@ import static org.mockito.Mockito.when; import java.lang.reflect.Field; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import org.junit.Before; @@ -78,6 +79,7 @@ public class SecurityServicesImplTest { @Mock OvsdbTerminationPointAugmentation tp; @Mock IngressAclProvider ingressAclService; @Mock EgressAclProvider egressAclService; + @Mock NeutronL3Adapter neutronL3Adapter; private static final String NEUTRON_PORT_ID_VM_1 = "neutronID_VM_1"; private static final String NEUTRON_PORT_ID_VM_2 = "neutronID_VM_2"; @@ -366,7 +368,7 @@ public class SecurityServicesImplTest { portList.add(neutronPort_Vm2); portList.add(neutronPort_Vm3); portList.add(neutronPort_Dhcp); - when(neutronPortCache.getAllPorts()).thenReturn(portList); + when(neutronL3Adapter.getPortCleanupCache()).thenReturn(new HashSet(portList)); List ipList = securityServicesImpl.getVmListForSecurityGroup(NEUTRON_PORT_ID_VM_1, SECURITY_GROUP_ID_2); assertEquals(ipList,neutron_IPs_2); } -- 2.36.6