X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=neutronvpn%2Fimpl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetvirt%2Fneutronvpn%2FNeutronPortChangeListener.java;h=5f4f768338c53dcc3c6d6df101fc187db3938d2b;hb=2f0569ed75ef8a1fb60f992d19c8bbdf92ff45bf;hp=52311af4890fd82ab5c123c0271c9d425b8fbcb2;hpb=2300ef30e455ac1f1546567c3fc4d29e7f1d2180;p=netvirt.git diff --git a/neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronPortChangeListener.java b/neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronPortChangeListener.java index 52311af489..5f4f768338 100644 --- a/neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronPortChangeListener.java +++ b/neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronPortChangeListener.java @@ -9,7 +9,6 @@ package org.opendaylight.netvirt.neutronvpn; import static org.opendaylight.genius.infra.Datastore.CONFIGURATION; -import com.google.common.base.Optional; import com.google.common.base.Strings; import com.google.common.util.concurrent.ListenableFuture; import com.google.gson.Gson; @@ -24,16 +23,15 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Optional; import java.util.Set; +import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; -import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import javax.inject.Inject; import javax.inject.Singleton; import org.apache.commons.lang3.ObjectUtils; import org.eclipse.jdt.annotation.Nullable; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; -import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase; import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker; import org.opendaylight.genius.datastoreutils.listeners.DataTreeEventCallbackRegistrar; import org.opendaylight.genius.infra.Datastore; @@ -42,11 +40,16 @@ import org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl; import org.opendaylight.genius.infra.TypedWriteTransaction; import org.opendaylight.genius.mdsalutil.MDSALUtil; import org.opendaylight.infrautils.jobcoordinator.JobCoordinator; +import org.opendaylight.infrautils.utils.concurrent.Executors; import org.opendaylight.infrautils.utils.concurrent.ListenableFutures; +import org.opendaylight.mdsal.binding.api.DataBroker; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.mdsal.common.api.ReadFailedException; import org.opendaylight.netvirt.elanmanager.api.IElanService; import org.opendaylight.netvirt.neutronvpn.api.enums.IpVersionChoice; import org.opendaylight.netvirt.neutronvpn.api.utils.NeutronConstants; import org.opendaylight.netvirt.neutronvpn.api.utils.NeutronUtils; +import org.opendaylight.serviceutils.tools.listener.AbstractAsyncDataTreeChangeListener; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev170119.L2vlan; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder; @@ -86,7 +89,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; @Singleton -public class NeutronPortChangeListener extends AsyncDataTreeChangeListenerBase { +public class NeutronPortChangeListener extends AbstractAsyncDataTreeChangeListener { private static final Logger LOG = LoggerFactory.getLogger(NeutronPortChangeListener.class); private final DataBroker dataBroker; private final ManagedNewTransactionRunner txRunner; @@ -100,6 +103,7 @@ public class NeutronPortChangeListener extends AsyncDataTreeChangeListenerBase

getWildCardPath() { - return InstanceIdentifier.create(Neutron.class).child(Ports.class).child(Port.class); } @Override - protected NeutronPortChangeListener getDataTreeChangeListener() { - return NeutronPortChangeListener.this; + @PreDestroy + public void close() { + super.close(); + Executors.shutdownAndAwaitTermination(getExecutorService()); } - @Override - protected void add(InstanceIdentifier identifier, Port input) { + public void add(InstanceIdentifier identifier, Port input) { LOG.trace("Received port add event: port={}", input); String portName = input.getUuid().getValue(); LOG.trace("Adding Port : key: {}, value={}", identifier, input); @@ -183,7 +182,7 @@ public class NeutronPortChangeListener extends AsyncDataTreeChangeListenerBase

identifier, Port input) { + public void remove(InstanceIdentifier identifier, Port input) { LOG.trace("Removing Port : key: {}, value={}", identifier, input); Network network = neutronvpnUtils.getNeutronNetwork(input.getNetworkId()); // need to proceed with deletion in case network is null for a case where v2 sync happens and a read for @@ -215,7 +214,7 @@ public class NeutronPortChangeListener extends AsyncDataTreeChangeListenerBase

identifier, Port original, Port update) { + public void update(InstanceIdentifier identifier, Port original, Port update) { LOG.trace("Received port update event: original={}, update={}", original, update); // Switchdev ports need to be bounded to a host before creation // in order to validate the supported vnic types from the hostconfig @@ -415,20 +414,23 @@ public class NeutronPortChangeListener extends AsyncDataTreeChangeListenerBase

{ IpVersionChoice ipVersion = IpVersionChoice.UNDEFINED; for (FixedIps portIP : portIps) { Subnetmap sn = neutronvpnUtils.getSubnetmap(portIP.getSubnetId()); + if (null == sn) { + LOG.error("Subnetmap for subnet {} not found", portIP.getSubnetId().getValue()); + continue; + } // router Port have either IPv4 or IPv6, never both ipVersion = neutronvpnUtils.getIpVersionFromString(sn.getSubnetIp()); String ipValue = portIP.getIpAddress().stringValue(); neutronvpnUtils.removeVpnPortFixedIpToPort(vpnId.getValue(), ipValue, confTx); // NOTE: Please donot change the order of calls to removeSubnetFromVpn and // and updateSubnetNodeWithFixedIP - nvpnManager.removeSubnetFromVpn(vpnId, portIP.getSubnetId(), internetVpnId); + nvpnManager.removeSubnetFromVpn(vpnId, sn, sn.getInternetVpnId()); nvpnManager.updateSubnetNodeWithFixedIp(portIP.getSubnetId(), null, null, null, null, null); } @@ -519,19 +521,25 @@ public class NeutronPortChangeListener extends AsyncDataTreeChangeListenerBase

routersId = NeutronvpnUtils.buildExtRoutersIdentifier(routerId); - Optional optionalRouter = MDSALUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION, routersId); - if (!optionalRouter.isPresent()) { - return; - } + Optional optionalRouter = null; + try { + optionalRouter = MDSALUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION, routersId); + if (!optionalRouter.isPresent()) { + return; + } + Routers extRouters = optionalRouter.get(); + if (extRouters.getExtGwMacAddress() != null) { + return; + } - Routers extRouters = optionalRouter.get(); - if (extRouters.getExtGwMacAddress() != null) { - return; + RoutersBuilder builder = new RoutersBuilder(extRouters); + builder.setExtGwMacAddress(routerGwPort.getMacAddress().getValue()); + MDSALUtil.syncWrite(dataBroker, LogicalDatastoreType.CONFIGURATION, routersId, builder.build()); + } catch (ExecutionException | InterruptedException e) { + LOG.error("setExternalGwMac: failed to read EXT-Routers for router Id {} rout-Gw port {} due to exception", + routerId, routerGwPort, e); } - RoutersBuilder builder = new RoutersBuilder(extRouters); - builder.setExtGwMacAddress(routerGwPort.getMacAddress().getValue()); - MDSALUtil.syncWrite(dataBroker, LogicalDatastoreType.CONFIGURATION, routersId, builder.build()); } @Nullable @@ -558,7 +566,7 @@ public class NeutronPortChangeListener extends AsyncDataTreeChangeListenerBase