X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=elanmanager%2Fimpl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetvirt%2Felan%2Finternal%2FElanDpnToTransportZoneListener.java;h=f6ce28621c0ac54171ef0841ea522c2ff1e714bd;hb=2f0569ed75ef8a1fb60f992d19c8bbdf92ff45bf;hp=e6062a0c97b9ead45ddafc6cf14246bfe29cc83e;hpb=c15b776b5c27d0980e0dcd097df2a609d863dcd5;p=netvirt.git diff --git a/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanDpnToTransportZoneListener.java b/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanDpnToTransportZoneListener.java index e6062a0c97..f6ce28621c 100644 --- a/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanDpnToTransportZoneListener.java +++ b/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanDpnToTransportZoneListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 HPE and others. All rights reserved. + * Copyright (c) 2017, 2019 HPE and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, @@ -7,28 +7,28 @@ */ package org.opendaylight.netvirt.elan.internal; -import java.math.BigInteger; -import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; import javax.inject.Inject; import javax.inject.Singleton; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase; -import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager; +import org.opendaylight.infrautils.utils.concurrent.Executors; +import org.opendaylight.mdsal.binding.api.DataBroker; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.netvirt.elan.cache.ElanInstanceCache; import org.opendaylight.netvirt.elan.utils.ElanUtils; import org.opendaylight.netvirt.elan.utils.TransportZoneNotificationUtil; +import org.opendaylight.serviceutils.tools.listener.AbstractAsyncDataTreeChangeListener; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.config.rev150710.ElanConfig; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.ElanDpnInterfaces; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.dpn.interfaces.ElanDpnInterfacesList; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.dpn.interfaces.elan.dpn.interfaces.list.DpnInterfaces; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.Uint64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @Singleton public class ElanDpnToTransportZoneListener - extends AsyncDataTreeChangeListenerBase { + extends AbstractAsyncDataTreeChangeListener { private static final Logger LOG = LoggerFactory.getLogger(ElanDpnToTransportZoneListener.class); private final TransportZoneNotificationUtil transportZoneNotificationUtil; @@ -37,37 +37,36 @@ public class ElanDpnToTransportZoneListener private final ElanInstanceCache elanInstanceCache; @Inject - public ElanDpnToTransportZoneListener(final DataBroker dbx, final IInterfaceManager interfaceManager, + public ElanDpnToTransportZoneListener(final DataBroker dbx, final ElanConfig elanConfig, final TransportZoneNotificationUtil tznu, final ElanInstanceCache elanInstanceCache) { + super(dbx, LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(ElanDpnInterfaces.class) + .child(ElanDpnInterfacesList.class).child(DpnInterfaces.class), + Executors.newListeningSingleThreadExecutor("ElanDpnToTransportZoneListener", LOG)); useTransportZone = elanConfig.isAutoConfigTransportZones(); transportZoneNotificationUtil = tznu; this.dbx = dbx; this.elanInstanceCache = elanInstanceCache; + start(); } - @PostConstruct public void start() { - LOG.info("{} start", getClass().getSimpleName()); - if (useTransportZone) { - registerListener(LogicalDatastoreType.OPERATIONAL, dbx); + LOG.info("{} registered", getClass().getSimpleName()); } } @Override - public InstanceIdentifier getWildCardPath() { - return InstanceIdentifier.builder(ElanDpnInterfaces.class).child(ElanDpnInterfacesList.class) - .child(DpnInterfaces.class).build(); - } - - @Override - protected void remove(InstanceIdentifier key, DpnInterfaces dataObjectModification) { + public void remove(InstanceIdentifier key, DpnInterfaces dataObjectModification) { + //Proceed only if "auto-config-transport-zones = TRUE" + if (!useTransportZone) { + return; + } LOG.debug("Elan dpn {} delete detected, deleting transport zones", dataObjectModification.getDpId()); - BigInteger dpId = dataObjectModification.getDpId(); + Uint64 dpId = dataObjectModification.getDpId(); String elanInstanceName = key.firstKeyOf(ElanDpnInterfacesList.class).getElanInstanceName(); - if (!ElanUtils.isVxlan(elanInstanceCache.get(elanInstanceName).orNull())) { + if (!ElanUtils.isVxlanNetworkOrVxlanSegment(elanInstanceCache.get(elanInstanceName).orElse(null))) { LOG.debug("ElanInstance {} is not vxlan network, nothing to do", elanInstanceName); return; } @@ -77,18 +76,22 @@ public class ElanDpnToTransportZoneListener } @Override - protected void update(InstanceIdentifier key, DpnInterfaces dataObjectModificationBefore, + public void update(InstanceIdentifier key, DpnInterfaces dataObjectModificationBefore, DpnInterfaces dataObjectModificationAfter) { } @Override - protected void add(InstanceIdentifier key, DpnInterfaces dataObjectModification) { + public void add(InstanceIdentifier key, DpnInterfaces dataObjectModification) { + //Proceed only if "auto-config-transport-zones = TRUE" + if (!useTransportZone) { + return; + } LOG.debug("Elan dpn {} add detected, updating transport zones", dataObjectModification.getDpId()); - BigInteger dpId = dataObjectModification.getDpId(); + Uint64 dpId = dataObjectModification.getDpId(); String elanInstanceName = key.firstKeyOf(ElanDpnInterfacesList.class).getElanInstanceName(); - if (!ElanUtils.isVxlan(elanInstanceCache.get(elanInstanceName).orNull())) { + if (!ElanUtils.isVxlanNetworkOrVxlanSegment(elanInstanceCache.get(elanInstanceName).orElse(null))) { return; } @@ -96,7 +99,9 @@ public class ElanDpnToTransportZoneListener } @Override - protected ElanDpnToTransportZoneListener getDataTreeChangeListener() { - return ElanDpnToTransportZoneListener.this; + @PreDestroy + public void close() { + super.close(); + Executors.shutdownAndAwaitTermination(getExecutorService()); } }