From 81629b71b5a7ca941f3c2b0e8a6a07dbba2efddf Mon Sep 17 00:00:00 2001 From: Vladimir Lavor Date: Tue, 17 Jan 2017 15:56:42 +0100 Subject: [PATCH] Handling for occassional npe in neutron-mapper/vpp-renderer Change-Id: I1ec230adca38c1eda083a008d1cc2c579ac79eb8 Signed-off-by: Vladimir Lavor --- .../mapper/mapping/NeutronPortAware.java | 7 +++++-- .../renderer/vpp/manager/VppNodeManager.java | 1 + .../renderer/vpp/policy/ForwardingManager.java | 18 +++++++++++++----- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/NeutronPortAware.java b/neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/NeutronPortAware.java index 07a0129a8..cb177af8f 100644 --- a/neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/NeutronPortAware.java +++ b/neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/NeutronPortAware.java @@ -15,7 +15,6 @@ import java.util.Set; import javax.annotation.Nullable; -import com.sun.jndi.cosnaming.IiopUrl; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; @@ -292,6 +291,10 @@ public class NeutronPortAware implements NeutronAware { } private void changeL3ContextForEpsInSubnet(Uuid subnetUuid, Neutron neutron) { + if (neutron == null) { + LOG.debug("No new data are written, there is no L3 context in subnet {} to update", subnetUuid); + return; + } Set portsInSameSubnet = PortUtils.findPortsBySubnet(subnetUuid, neutron.getPorts()); for (Port portInSameSubnet : portsInSameSubnet) { if (PortUtils.isNormalPort(portInSameSubnet) || PortUtils.isDhcpPort(portInSameSubnet) @@ -566,7 +569,7 @@ public class NeutronPortAware implements NeutronAware { } FixedIps portIpWithSubnet = potentialPortIpWithSubnet.get(); L3ContextId l3Context = new L3ContextId(port.getNetworkId().getValue()); - // change L3Context for all EPs with same subnet as router port + // change L3Context for all new EPs with same subnet as router port changeL3ContextForEpsInSubnet(portIpWithSubnet.getSubnetId(), newNeutron); // set L3Context as parent for bridge domain which is parent of subnet TenantId tenantId = new TenantId(port.getTenantId().getValue()); diff --git a/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/manager/VppNodeManager.java b/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/manager/VppNodeManager.java index 0859505ba..4d00d62f8 100644 --- a/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/manager/VppNodeManager.java +++ b/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/manager/VppNodeManager.java @@ -165,6 +165,7 @@ public class VppNodeManager { private DataBroker getNodeMountPoint(InstanceIdentifier mountPointIid) { Optional optionalObject = mountService.getMountPoint(mountPointIid); + LOG.debug("Optional mountpoint object: {}", optionalObject); MountPoint mountPoint; if (optionalObject.isPresent()) { mountPoint = optionalObject.get(); diff --git a/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/policy/ForwardingManager.java b/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/policy/ForwardingManager.java index 96bc7fdea..461ce4bd0 100644 --- a/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/policy/ForwardingManager.java +++ b/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/policy/ForwardingManager.java @@ -24,7 +24,6 @@ import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.groupbasedpolicy.renderer.vpp.api.BridgeDomainManager; import org.opendaylight.groupbasedpolicy.renderer.vpp.iface.InterfaceManager; import org.opendaylight.groupbasedpolicy.renderer.vpp.util.KeyFactory; -import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppRendererProcessingException; import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.NetworkContainment; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.network.containment.Containment; @@ -33,8 +32,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpo import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.LocationType; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.location.type.ExternalLocationCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.NetworkDomainId; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.L2FloodDomain; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.NetworkDomain; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.fields.Parent; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocation; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpointKey; @@ -258,10 +259,17 @@ public final class ForwardingManager { } } if (containment instanceof NetworkDomainContainment) { - NetworkDomainContainment netDomainCont = (NetworkDomainContainment) containment; - RendererNetworkDomain rendererNetworkDomain = - policyCtx.getNetworkDomainTable().get(ep.getTenant(), new RendererNetworkDomainKey( - netDomainCont.getNetworkDomainId(), netDomainCont.getNetworkDomainType())); + final NetworkDomainContainment netDomainCont = (NetworkDomainContainment) containment; + final TenantId tenantId = ep.getTenant(); + final NetworkDomainId domainId = netDomainCont.getNetworkDomainId(); + final Class domainKey = netDomainCont.getNetworkDomainType(); + final RendererNetworkDomainKey rendererNetworkDomainKey = new RendererNetworkDomainKey(domainId, domainKey); + final RendererNetworkDomain rendererNetworkDomain = + policyCtx.getNetworkDomainTable().get(tenantId, rendererNetworkDomainKey); + if (rendererNetworkDomain == null) { + LOG.debug("Network domain not found. Containment: {}", containment); + return java.util.Optional.empty(); + } java.util.Optional optL2Fd = getForwardingCtxForParent(ep.getTenant(), rendererNetworkDomain.getParent(), policyCtx.getForwardingCtxTable()) .filter(fwdCtx -> L2FloodDomain.class.equals(fwdCtx.getContextType())) -- 2.36.6