LOG.debug("writeFlow: flowBuilder: {}, nodeBuilder: {}",
flowBuilder.build(), nodeBuilder.build());
WriteTransaction modification = dataBroker.newWriteOnlyTransaction();
- modification.put(LogicalDatastoreType.CONFIGURATION, createNodePath(nodeBuilder),
- nodeBuilder.build(), true /*createMissingParents*/);
+ //modification.put(LogicalDatastoreType.CONFIGURATION, createNodePath(nodeBuilder),
+ // nodeBuilder.build(), true /*createMissingParents*/);
modification.put(LogicalDatastoreType.CONFIGURATION, createFlowPath(flowBuilder, nodeBuilder),
flowBuilder.build(), true /*createMissingParents*/);
CheckedFuture<Void, TransactionCommitFailedException> commitFuture = modification.submit();
this.portCleanupCache.remove(port);
}
+ public Set<NeutronPort> 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;
}
* @author Aswin Suryanarayanan.
*/
-public class SecurityGroupCacheManagerImpl implements ConfigInterface, SecurityGroupCacheManger{
+public class SecurityGroupCacheManagerImpl implements ConfigInterface, SecurityGroupCacheManger {
private final Map<String, Set<String>> securityGroupCache = new ConcurrentHashMap<>();
private static final Logger LOG = LoggerFactory.getLogger(SecurityGroupCacheManagerImpl.class);
private volatile SecurityServicesManager securityServicesManager;
private volatile INeutronPortCRUD neutronPortCache;
+ private volatile NeutronL3Adapter neutronL3Adapter;
@Override
public void portAdded(String securityGroupUuid, String portUuid) {
LOG.debug("In portAdded securityGroupUuid:" + securityGroupUuid + " portUuid:" + portUuid);
NeutronPort port = neutronPortCache.getPort(portUuid);
if (port == null) {
- LOG.debug("In portAdded no neutron port found:" + " portUuid:" + portUuid);
- return;
+ port = neutronL3Adapter.getPortFromCleanupCache(portUuid);
+ if (port == null) {
+ LOG.error("In portAdded no neutron port found:" + " portUuid:" + portUuid);
+ return;
+ }
}
processPortAdded(securityGroupUuid,port);
}
public void portRemoved(String securityGroupUuid, String portUuid) {
LOG.debug("In portRemoved securityGroupUuid:" + securityGroupUuid + " portUuid:" + portUuid);
NeutronPort port = neutronPortCache.getPort(portUuid);
+
if (port == null) {
- LOG.debug("In portRemoved no neutron port found:" + " portUuid:" + portUuid);
- return;
+ port = neutronL3Adapter.getPortFromCleanupCache(portUuid);
+ if (port == null) {
+ LOG.error("In portRemoved no neutron port found:" + " portUuid:" + portUuid);
+ return;
+ }
}
processPortRemoved(securityGroupUuid,port);
}
}
NeutronPort cachedport = neutronPortCache.getPort(cachedportUuid);
if (null == cachedport) {
+ LOG.error("In processPortAdded cachedport port not found in neuton cache:"
+ + " cachedportUuid:" + cachedportUuid);
return;
}
List<NeutronSecurityRule> remoteSecurityRules = retrieveSecurityRules(securityGroupUuid, cachedportUuid);
continue;
}
NeutronPort cachedport = neutronPortCache.getPort(cachedportUuid);
- if (null == cachedport) {
- return;
+ if (cachedport == null) {
+ cachedport = neutronL3Adapter.getPortFromCleanupCache(cachedportUuid);
+ if (null == cachedport) {
+ LOG.error("In processPortRemoved cachedport port not found in neuton cache:"
+ + " cachedportUuid:" + cachedportUuid);
+ return;
+ }
}
List<NeutronSecurityRule> remoteSecurityRules = retrieveSecurityRules(securityGroupUuid, cachedportUuid);
for (NeutronSecurityRule securityRule : remoteSecurityRules) {
*/
LOG.debug("In retrieveSecurityRules securityGroupUuid:" + securityGroupUuid + " portUuid:" + portUuid);
NeutronPort port = neutronPortCache.getPort(portUuid);
- if (null == port) {
- return null;
+ if (port == null) {
+ port = neutronL3Adapter.getPortFromCleanupCache(portUuid);
+ if (null == port) {
+ LOG.error("In retrieveSecurityRules no neutron port found:" + " portUuid:" + portUuid);
+ return null;
+ }
}
List<NeutronSecurityRule> remoteSecurityRules = new ArrayList<>();
List<NeutronSecurityGroup> securityGroups = port.getSecurityGroups();
@Override
public void setDependencies(ServiceReference serviceReference) {
+ neutronL3Adapter =
+ (NeutronL3Adapter) ServiceHelper.getGlobalInstance(NeutronL3Adapter.class, this);
securityServicesManager =
(SecurityServicesManager) ServiceHelper.getGlobalInstance(SecurityServicesManager.class, this);
neutronPortCache = (INeutronPortCRUD) ServiceHelper.getGlobalInstance(INeutronPortCRUD.class, this);
}
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")) {
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) {
}
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;
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);
}
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")) {
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;
}
@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());
}
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.*/
/*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());
import java.lang.reflect.Field;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
import org.junit.Before;
@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";
portList.add(neutronPort_Vm2);
portList.add(neutronPort_Vm3);
portList.add(neutronPort_Dhcp);
- when(neutronPortCache.getAllPorts()).thenReturn(portList);
+ when(neutronL3Adapter.getPortCleanupCache()).thenReturn(new HashSet<NeutronPort>(portList));
List<Neutron_IPs> ipList = securityServicesImpl.getVmListForSecurityGroup(NEUTRON_PORT_ID_VM_1, SECURITY_GROUP_ID_2);
assertEquals(ipList,neutron_IPs_2);
}