NETVIRT-1630 migrate to md-sal APIs
[netvirt.git] / dhcpservice / impl / src / main / java / org / opendaylight / netvirt / dhcpservice / DhcpNeutronPortListener.java
index 9e8dd0822577cba08baa489c084651ebfbb647f8..a242c1d35043e86d700d6dd40930466d2e5c0afa 100644 (file)
@@ -15,19 +15,18 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
 import java.util.function.Consumer;
-import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 import javax.inject.Named;
 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.AsyncClusteredDataTreeChangeListenerBase;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl;
 import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
 import org.opendaylight.genius.mdsalutil.NwConstants;
 import org.opendaylight.infrautils.jobcoordinator.JobCoordinator;
+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.dhcpservice.api.DhcpMConstants;
 import org.opendaylight.netvirt.elan.arp.responder.ArpResponderInput;
 import org.opendaylight.netvirt.elan.arp.responder.ArpResponderInput.ArpReponderInputBuilder;
@@ -35,6 +34,7 @@ import org.opendaylight.netvirt.elan.arp.responder.ArpResponderUtil;
 import org.opendaylight.netvirt.elanmanager.api.ElanHelper;
 import org.opendaylight.netvirt.elanmanager.api.IElanService;
 import org.opendaylight.netvirt.neutronvpn.api.utils.NeutronConstants;
+import org.opendaylight.serviceutils.tools.listener.AbstractClusteredAsyncDataTreeChangeListener;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.binding.rev150712.PortBindingExtension;
@@ -50,8 +50,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @Singleton
-public class DhcpNeutronPortListener
-        extends AsyncClusteredDataTreeChangeListenerBase<Port, DhcpNeutronPortListener> {
+public class DhcpNeutronPortListener extends AbstractClusteredAsyncDataTreeChangeListener<Port> {
 
     private static final Logger LOG = LoggerFactory.getLogger(DhcpNeutronPortListener.class);
     private final DhcpExternalTunnelManager dhcpExternalTunnelManager;
@@ -69,8 +68,9 @@ public class DhcpNeutronPortListener
             @Named("elanService") IElanService ielanService, IInterfaceManager interfaceManager,
             DhcpserviceConfig config, final JobCoordinator jobCoordinator, DhcpManager dhcpManager,
             ItmRpcService itmRpcService) {
-
-        super(Port.class, DhcpNeutronPortListener.class);
+        super(db, LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(Neutron.class).child(Ports.class)
+                .child(Port.class),
+                Executors.newListeningSingleThreadExecutor("DhcpNeutronPortListener", LOG));
         this.dhcpExternalTunnelManager = dhcpExternalTunnelManager;
         this.elanService = ielanService;
         this.interfaceManager = interfaceManager;
@@ -80,29 +80,28 @@ public class DhcpNeutronPortListener
         this.jobCoordinator = jobCoordinator;
         this.dhcpManager = dhcpManager;
         this.itmRpcService = itmRpcService;
+        init();
     }
 
-    @PostConstruct
     public void init() {
         if (config.isControllerDhcpEnabled()) {
-            registerListener(LogicalDatastoreType.CONFIGURATION, broker);
+            LOG.info("{} init", getClass().getSimpleName());
         }
     }
 
-    @Override
-    protected InstanceIdentifier<Port> getWildCardPath() {
-        return InstanceIdentifier.create(Neutron.class).child(Ports.class).child(Port.class);
-    }
-
     @Override
     @PreDestroy
     public void close() {
         super.close();
+        Executors.shutdownAndAwaitTermination(getExecutorService());
         LOG.debug("DhcpNeutronPortListener Listener Closed");
     }
 
     @Override
-    protected void remove(InstanceIdentifier<Port> identifier, Port del) {
+    public void remove(InstanceIdentifier<Port> identifier, Port del) {
+        if (!config.isControllerDhcpEnabled()) {
+            return;
+        }
         LOG.trace("Port removed: {}", del);
         if (NeutronConstants.IS_ODL_DHCP_PORT.test(del)) {
             jobCoordinator.enqueueJob(getJobKey(del),
@@ -131,7 +130,10 @@ public class DhcpNeutronPortListener
     }
 
     @Override
-    protected void update(InstanceIdentifier<Port> identifier, Port original, Port update) {
+    public void update(InstanceIdentifier<Port> identifier, Port original, Port update) {
+        if (!config.isControllerDhcpEnabled()) {
+            return;
+        }
         LOG.trace("Port changed to {}", update);
         //With Ipv6 changes we can get ipv4 subnets later. The below check is to support such scenario.
         if (original.nonnullFixedIps().size() < update.nonnullFixedIps().size()) {
@@ -190,7 +192,10 @@ public class DhcpNeutronPortListener
     }
 
     @Override
-    protected void add(InstanceIdentifier<Port> identifier, Port add) {
+    public void add(InstanceIdentifier<Port> identifier, Port add) {
+        if (!config.isControllerDhcpEnabled()) {
+            return;
+        }
         LOG.trace("Port added {}", add);
         if (NeutronConstants.IS_ODL_DHCP_PORT.test(add)) {
             jobCoordinator.enqueueJob(getJobKey(add),
@@ -257,11 +262,6 @@ public class DhcpNeutronPortListener
         return vnicType.equals("direct") || vnicType.equals("macvtap");
     }
 
-    @Override
-    protected DhcpNeutronPortListener getDataTreeChangeListener() {
-        return DhcpNeutronPortListener.this;
-    }
-
     /**
      * Handle(Add/Remove) ARP Responder for DHCP IP on all the DPNs when DHCP is
      * enabled/disabled on subnet add or update or delete.