Refactor moving tunnelinfstatechglistener subclass 98/43098/2
authorAbhinav Gupta <abhinav.gupta@ericsson.com>
Thu, 4 Aug 2016 06:36:04 +0000 (12:06 +0530)
committerAbhinav Gupta <abhinav.gupta@ericsson.com>
Thu, 4 Aug 2016 06:47:42 +0000 (12:17 +0530)
1. Refactored moving tunnelinterfacestatechangelistener subclass out of
VPNInterfaceManager class.
2. Added itmRpcService and FibManager dependency for the above class.
3. Renamed a few misleading functions

Change-Id: I7c8467bdbf69e54b7a3242e6c563e0adf1319f2f
Signed-off-by: Abhinav Gupta <abhinav.gupta@ericsson.com>
vpnservice/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/netvirt/fibmanager/FibManagerProvider.java
vpnservice/vpnmanager/vpnmanager-api/src/main/java/org/opendaylight/netvirt/vpnmanager/api/IVpnManager.java
vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/TunnelInterfaceStateListener.java
vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInterfaceManager.java
vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnserviceProvider.java
vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vpnservice/impl/rev150216/VpnserviceImplModule.java

index 5b57bdb6d0ea809dedf3bcc0b927ff13158fdeb1..da6973673434d1104671e2096b23cdaa7723dda2 100644 (file)
@@ -80,7 +80,7 @@ public class FibManagerProvider implements BindingAwareProvider, IFibManager, Au
 
   public void setVpnmanager(IVpnManager vpnmanager) {
     this.vpnmanager = vpnmanager;
-    vpnmanager.setFibService(this);
+    vpnmanager.setFibManager(this);
   }
 
   public void setIdManager(IdManagerService idManager) {
index d5dafb0e73a252b92fc35bad1e6d01b104af998c..51f8a169d5442c604a57913f73b2c4b5601201d8 100644 (file)
@@ -11,7 +11,7 @@ package org.opendaylight.netvirt.vpnmanager.api;
 import org.opendaylight.netvirt.fibmanager.api.IFibManager;
 
 public interface IVpnManager {
-    void setFibService(IFibManager fibManager);
+    void setFibManager(IFibManager fibManager);
     void addExtraRoute(String destination, String nextHop, String rd, String routerID, int label);
     void delExtraRoute(String destination, String nextHop, String rd, String routerID);
 
index 50dcc91fb6687afa8c17107db61a5126a4668d91..726b814a6243a69a52de360b4956c67126cbf426 100644 (file)
@@ -9,6 +9,9 @@
 package org.opendaylight.netvirt.vpnmanager;
 
 import com.google.common.base.Optional;
+
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
 import org.opendaylight.netvirt.bgpmanager.api.IBgpManager;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
@@ -17,10 +20,10 @@ import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev14081
 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInstances;
 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstance;
 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterface;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelsState;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.Adjacencies;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.adjacency.list.Adjacency;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnToDpnList;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpnservice.impl.rev150216.modules.module.configuration.vpnservice.impl.Bgpmanager;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TepTypeExternal;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TepTypeHwvtep;
@@ -29,6 +32,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tun
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.IsDcgwPresentInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.IsDcgwPresentOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
@@ -39,27 +43,70 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.concurrent.Future;
 
-public class TunnelInterfaceStateListener extends AbstractDataChangeListener<StateTunnelList> {
+public class TunnelInterfaceStateListener extends AbstractDataChangeListener<StateTunnelList> implements AutoCloseable{
 
     private static final Logger LOG = LoggerFactory.getLogger(TunnelInterfaceStateListener.class);
     protected enum UpdateRouteAction {
         ADVERTISE_ROUTE, WITHDRAW_ROUTE
     }
-    DataBroker broker;
+
+    private ListenerRegistration<DataChangeListener> tunnelInterfaceStateListenerRegistration;
+    private final DataBroker broker;
     private final IBgpManager bgpManager;
     private IFibManager fibManager;
-    private ItmRpcService itmProvider;
+    private ItmRpcService itmRpcService;
 
-    public TunnelInterfaceStateListener(final DataBroker broker,
-                                        final IBgpManager bgpManager, final IFibManager fibManager) {
+    /**
+     * Responsible for listening to tunnel interface state change
+     *
+     * @param db - dataBroker service reference
+     * @param bgpManager Used to advertise routes to the BGP Router
+     */
+    public TunnelInterfaceStateListener(final DataBroker db,
+                                        final IBgpManager bgpManager) {
         super(StateTunnelList.class);
-        this.broker = broker;
-        this.fibManager = fibManager;
+        broker = db;
         this.bgpManager = bgpManager;
+        registerListener(db);
+    }
+
+    public void setITMRpcService(ItmRpcService itmRpcService) {
+        this.itmRpcService = itmRpcService;
+    }
+
+    public void setFibManager(IFibManager fibManager) {
+        this.fibManager = fibManager;
+    }
+
+    public IFibManager getFibManager() {
+        return this.fibManager;
+    }
+
+    @Override
+    public void close() throws Exception {
+        if (tunnelInterfaceStateListenerRegistration != null) {
+            try {
+                tunnelInterfaceStateListenerRegistration.close();
+            } catch (final Exception e) {
+                LOG.error("Error when cleaning up DataChangeListener.", e);
+            }
+            tunnelInterfaceStateListenerRegistration = null;
+        }
+        LOG.info("Tunnel Interface State Listener Closed");
+    }
+
+    private void registerListener(final DataBroker db) {
+        try {
+            tunnelInterfaceStateListenerRegistration = db.registerDataChangeListener(LogicalDatastoreType.OPERATIONAL,
+                    getWildCardPath(), TunnelInterfaceStateListener.this, AsyncDataBroker.DataChangeScope.SUBTREE);
+        } catch (final Exception e) {
+            LOG.error("Tunnel Interface State Listener DataChange listener registration fail!", e);
+            throw new IllegalStateException("Tunnel Interface State Listener registration Listener failed.", e);
+        }
     }
 
-    public void setITMProvider(ItmRpcService itmProvider) {
-        this.itmProvider = itmProvider;
+    private InstanceIdentifier<StateTunnelList> getWildCardPath() {
+        return InstanceIdentifier.create(TunnelsState.class).child(StateTunnelList.class);
     }
 
     @Override
@@ -123,7 +170,7 @@ public class TunnelInterfaceStateListener extends AbstractDataChangeListener<Sta
         if (tunTypeVal == VpnConstants.ITMTunnelLocType.External.getValue()) {
             Future<RpcResult<IsDcgwPresentOutput>> result;
             try {
-                result = itmProvider.isDcgwPresent(new IsDcgwPresentInputBuilder()
+                result = itmRpcService.isDcgwPresent(new IsDcgwPresentInputBuilder()
                         .setDcgwIp(destTepIp)
                         .build());
                 RpcResult<IsDcgwPresentOutput> rpcResult = result.get();
index d396437702a5b57af488a040678390a76f5d58c4..1a6b259991d88e3e6f125caf0192cdd123d4ae2a 100644 (file)
@@ -126,13 +126,12 @@ import org.slf4j.LoggerFactory;
 
 public class VpnInterfaceManager extends AbstractDataChangeListener<VpnInterface> implements AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(VpnInterfaceManager.class);
-    private ListenerRegistration<DataChangeListener> listenerRegistration, opListenerRegistration, tunnelInterfaceStateListenerRegistration;
+    private ListenerRegistration<DataChangeListener> listenerRegistration, opListenerRegistration;
     private final DataBroker broker;
     private final IBgpManager bgpManager;
     private IFibManager fibManager;
     private IMdsalApiManager mdsalManager;
     private OdlInterfaceRpcService ifaceMgrRpcService;
-    private ItmRpcService itmProvider;
     private IdManagerService idManager;
     private OdlArputilService arpManager;
     private NeutronvpnService neuService;
@@ -166,7 +165,6 @@ public class VpnInterfaceManager extends AbstractDataChangeListener<VpnInterface
         arpNotificationHandler = new ArpNotificationHandler(this, broker);
         vpnSubnetRouteHandler = new VpnSubnetRouteHandler(broker, bgpManager, this);
         dpnInVpnChangeListener = new DpnInVpnChangeListener(broker);
-        tunnelInterfaceStateListener = new TunnelInterfaceStateListener(broker, bgpManager, fibManager);
         notificationService.registerNotificationListener(vpnSubnetRouteHandler);
         notificationService.registerNotificationListener(arpNotificationHandler);
         notificationService.registerNotificationListener(dpnInVpnChangeListener);
@@ -239,18 +237,12 @@ public class VpnInterfaceManager extends AbstractDataChangeListener<VpnInterface
                     getWildCardPath(), VpnInterfaceManager.this, DataChangeScope.SUBTREE);
             opListenerRegistration = db.registerDataChangeListener(LogicalDatastoreType.OPERATIONAL,
                     getWildCardPath(), vpnInterfaceOpListener, DataChangeScope.SUBTREE);
-            tunnelInterfaceStateListenerRegistration = db.registerDataChangeListener(LogicalDatastoreType.OPERATIONAL,
-                    getTunnelInterfaceStateListenerPath(), tunnelInterfaceStateListener, DataChangeScope.SUBTREE);
         } catch (final Exception e) {
             LOG.error("VPN Service DataChange listener registration fail!", e);
             throw new IllegalStateException("VPN Service registration Listener failed.", e);
         }
     }
 
-    private InstanceIdentifier<StateTunnelList> getTunnelInterfaceStateListenerPath() {
-        return InstanceIdentifier.create(TunnelsState.class).child(StateTunnelList.class);
-    }
-
     private InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> getInterfaceListenerPath() {
         return InstanceIdentifier.create(InterfacesState.class)
                 .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.class);
index 73cb98ab40c0c77e942350857ff9e725ed857ae0..ab7ff4a8fce3e0e9502ea237fde5f67051b56907 100644 (file)
@@ -51,7 +51,7 @@ public class VpnserviceProvider implements BindingAwareProvider, IVpnManager, Au
     private IFibManager fibManager;
     private IMdsalApiManager mdsalManager;
     private OdlInterfaceRpcService odlInterfaceRpcService;
-    private ItmRpcService itmProvider;
+    private ItmRpcService itmRpcService;
     private IdManagerService idManager;
     private OdlArputilService arpManager;
     private NeutronvpnService neuService;
@@ -84,17 +84,18 @@ public class VpnserviceProvider implements BindingAwareProvider, IVpnManager, Au
             vpnManager = new VpnManager(dataBroker, bgpManager);
             vpnManager.setIdManager(idManager);
             vpnInterfaceManager = new VpnInterfaceManager(dataBroker, bgpManager, notificationService);
-            tunIntfStateListener = new TunnelInterfaceStateListener(dataBroker, bgpManager, fibManager);
+            tunIntfStateListener = new TunnelInterfaceStateListener(dataBroker, bgpManager);
             vpnInterfaceManager.setMdsalManager(mdsalManager);
             vpnInterfaceManager.setIfaceMgrRpcService(odlInterfaceRpcService);
-            tunIntfStateListener.setITMProvider(itmProvider);
             vpnInterfaceManager.setIdManager(idManager);
             vpnInterfaceManager.setArpManager(arpManager);
             vpnInterfaceManager.setNeutronvpnManager(neuService);
             vpnInterfaceManager.setNotificationPublishService(notificationPublishService);
             vpnManager.setVpnInterfaceManager(vpnInterfaceManager);
             fibService = rpcProviderRegistry.getRpcService(FibRpcService.class);
+            itmRpcService = rpcProviderRegistry.getRpcService(ItmRpcService.class);
             vpnInterfaceManager.setFibRpcService(fibService);
+            tunIntfStateListener.setITMRpcService(itmRpcService);
             VpnRpcService vpnRpcService = new VpnRpcServiceImpl(idManager, vpnInterfaceManager, dataBroker);
             rpcRegistration = getRpcProviderRegistry().addRpcImplementation(VpnRpcService.class, vpnRpcService);
             //Handles subnet route entries
@@ -132,10 +133,6 @@ public class VpnserviceProvider implements BindingAwareProvider, IVpnManager, Au
         this.odlInterfaceRpcService = odlInterfaceRpcService;
     }
 
-    public void setITMProvider(ItmRpcService itmProvider) {
-        this.itmProvider = itmProvider;
-    }
-
     public void setIdManager(IdManagerService idManager) {
         this.idManager = idManager;
     }
@@ -176,16 +173,18 @@ public class VpnserviceProvider implements BindingAwareProvider, IVpnManager, Au
     public void close() throws Exception {
         vpnManager.close();
         vpnInterfaceManager.close();
+        tunIntfStateListener.close();
         interVpnLinkListener.close();
         interVpnLinkNodeListener.close();
 
     }
 
     @Override
-    public void setFibService(IFibManager fibManager) {
+    public void setFibManager(IFibManager fibManager) {
         LOG.debug("Fib service reference is initialized in VPN Manager");
         this.fibManager = fibManager;
         vpnInterfaceManager.setFibManager(fibManager);
+        tunIntfStateListener.setFibManager(fibManager);
     }
 
     @Override
index 9f9b0e4d2d8d3cd6d34df2bfc7bc984414e6d0ed..4de49873180b72002a31a7d7c09a8b6469a4c762 100644 (file)
@@ -35,7 +35,6 @@ public class VpnserviceImplModule extends org.opendaylight.yang.gen.v1.urn.opend
         IdManagerService idManager = getRpcregistryDependency().getRpcService(IdManagerService.class);
         OdlArputilService arpManager =  getRpcregistryDependency().getRpcService(OdlArputilService.class);
         OdlInterfaceRpcService odlInterfaceRpcService = getRpcregistryDependency().getRpcService(OdlInterfaceRpcService.class);
-        ItmRpcService itmRpcService = getRpcregistryDependency().getRpcService(ItmRpcService.class);
 
         VpnserviceProvider provider = new VpnserviceProvider(bundleContext);
         provider.setNotificationService(getNotificationServiceDependency());
@@ -44,7 +43,6 @@ public class VpnserviceImplModule extends org.opendaylight.yang.gen.v1.urn.opend
         provider.setOdlInterfaceRpcService(odlInterfaceRpcService);
         provider.setIdManager(idManager);
         provider.setArpManager(arpManager);
-        provider.setITMProvider(itmRpcService);
         provider.setRpcProviderRegistry(getRpcregistryDependency());
         provider.setNotificationPublishService(getNotificationPublishServiceDependency());
         getBrokerDependency().registerProvider(provider);