X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openstack%2Fnet-virt%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fovsdb%2Fopenstack%2Fnetvirt%2Fimpl%2FNeutronL3Adapter.java;h=b381f87d53d720548cf3de5b5cdd59d321cf354a;hb=849e07952037859d19e03e97edc7ab32e8785f34;hp=b679902d379915abf3bdc006b1efc5cee6cd065a;hpb=9db26ae02608d8eb9bf7adfef86937adcb12d758;p=netvirt.git 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 b679902d37..b381f87d53 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 @@ -34,7 +34,6 @@ import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; -import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -311,6 +310,13 @@ public class NeutronL3Adapter implements ConfigInterface { } this.updateL3ForNeutronPort(neutronPort, currPortShouldBeDeleted); } + + if (isDelete) { + /* + * Bug 4277: Remove the router interface cache only after deleting the neutron port l3 flows. + */ + this.cleanupRouterCache(neutronRouterInterface); + } } /** @@ -806,13 +812,7 @@ public class NeutronL3Adapter implements ConfigInterface { } } - // Keep cache for finding router's mac from network uuid -- remove - // - if (isDelete) { - networkIdToRouterMacCache.remove(neutronNetwork.getNetworkUUID()); - networkIdToRouterIpListCache.remove(neutronNetwork.getNetworkUUID()); - subnetIdToRouterInterfaceCache.remove(subnet.getSubnetUUID()); - } + // Keep cache for finding router's mac from network uuid -- NOTE: remove is done later, via cleanupRouterCache() } private void programFlowForNetworkFromExternal(final Node node, @@ -1274,6 +1274,21 @@ public class NeutronL3Adapter implements ConfigInterface { return null; } + private void cleanupRouterCache(final NeutronRouter_Interface neutronRouterInterface) { + /* + * Fix for 4277 + * Remove the router cache only after deleting the neutron + * port l3 flows. + */ + final NeutronPort neutronPort = neutronPortCache.getPort(neutronRouterInterface.getPortUUID()); + + if (neutronPort != null) { + networkIdToRouterMacCache.remove(neutronPort.getNetworkUUID()); + networkIdToRouterIpListCache.remove(neutronPort.getNetworkUUID()); + subnetIdToRouterInterfaceCache.remove(neutronRouterInterface.getSubnetUUID()); + } + } + public void triggerGatewayMacResolver(final Node node, final NeutronPort gatewayPort ){ Preconditions.checkNotNull(node); @@ -1334,7 +1349,7 @@ public class NeutronL3Adapter implements ConfigInterface { } @Override - public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) { + public void setDependencies(ServiceReference serviceReference) { tenantNetworkManager = (TenantNetworkManager) ServiceHelper.getGlobalInstance(TenantNetworkManager.class, this); configurationService =