BUG:5186 Fix for change in extraroutes type 66/34066/1
authorVishal Thapar <vishal.thapar@ericsson.com>
Tue, 2 Feb 2016 10:19:52 +0000 (15:49 +0530)
committerVishal Thapar <vishal.thapar@ericsson.com>
Thu, 4 Feb 2016 12:17:36 +0000 (12:17 +0000)
Fix for BUG 5137 in Neutron changes the type of extraroutes from string to
destination and nexthop. This fix is to change vpnservice code as per
neutron change.

Neutron change: https://git.opendaylight.org/gerrit/33846

Change-Id: I702f81adc3579943bef9e71e616dde4280692847
Signed-off-by: Vishal Thapar <vishal.thapar@ericsson.com>
(cherry picked from commit 535c182e3b03fa32aaccc4349fecb835a1468a82)

neutronvpn/neutronvpn-impl/src/main/java/org/opendaylight/vpnservice/neutronvpn/NeutronRouterChangeListener.java
neutronvpn/neutronvpn-impl/src/main/java/org/opendaylight/vpnservice/neutronvpn/NeutronvpnManager.java

index 4cd576e2ac9355f95cde2d4153c3f2b962bd646b..9da9f7d45b05ef7398eaded76f1a7f64ba2f1237 100644 (file)
@@ -8,6 +8,8 @@
 package org.opendaylight.vpnservice.neutronvpn;
 
 
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.l3.attributes.Routes;
+
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
@@ -22,7 +24,6 @@ import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -110,9 +111,8 @@ public class NeutronRouterChangeListener extends AbstractDataChangeListener<Rout
                 ArrayList<Interfaces>();
         List<Interfaces> newInterfaces = (update.getInterfaces() != null) ? update.getInterfaces() : new
                 ArrayList<Interfaces>();
-        List<String> oldRoutes = (original.getRoutes() != null) ? original.getRoutes() : new ArrayList<String>();
-        List<String> newRoutes = (update.getRoutes() != null) ? update.getRoutes() : new ArrayList<String>();
-
+        List<Routes> oldRoutes = (original.getRoutes() != null) ? original.getRoutes() : new ArrayList<Routes>();
+        List<Routes> newRoutes = (update.getRoutes() != null) ? update.getRoutes() : new ArrayList<Routes>();
         if (!oldInterfaces.equals(newInterfaces)) {
             for (Interfaces intrf : newInterfaces) {
                 if (!oldInterfaces.remove(intrf)) {
@@ -126,9 +126,9 @@ public class NeutronRouterChangeListener extends AbstractDataChangeListener<Rout
             }
         }
         if (!oldRoutes.equals(newRoutes)) {
-            Iterator<String> iterator = newRoutes.iterator();
+            Iterator<Routes> iterator = newRoutes.iterator();
             while (iterator.hasNext()) {
-                String route = iterator.next();
+                Routes route = iterator.next();
                 if (oldRoutes.remove(route)) {
                     iterator.remove();
                 }
index f151a3c22748a10d892f386ac382315c658b3199..a04c7ec6040460b08523e2c2631f8f1cbc4da0b7 100644 (file)
@@ -7,9 +7,10 @@
  */
 package org.opendaylight.vpnservice.neutronvpn;
 
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.l3.attributes.Routes;
+
 import com.google.common.base.Optional;
 import com.google.common.util.concurrent.SettableFuture;
-
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.vpnservice.mdsalutil.MDSALUtil;
@@ -86,7 +87,6 @@ import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -443,7 +443,7 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable {
             adjList.add(vmAdj);
             // create extra route adjacency
             if (rtr != null && rtr.getRoutes() != null) {
-                List<String> routeList = rtr.getRoutes();
+                List<Routes> routeList = rtr.getRoutes();
                 List<Adjacency> erAdjList = addAdjacencyforExtraRoute(routeList, false, portname);
                 if (erAdjList != null && !erAdjList.isEmpty()) {
                     adjList.addAll(erAdjList);
@@ -733,15 +733,13 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable {
         }
     }
 
-    protected List<Adjacency> addAdjacencyforExtraRoute(List<String> routeList, boolean rtrUp, String vpnifname) {
+    protected List<Adjacency> addAdjacencyforExtraRoute(List<Routes> routeList, boolean rtrUp, String vpnifname) {
         List<Adjacency> adjList = new ArrayList<Adjacency>();
-        for (String route : routeList) {
-            // assuming extra route is strictly in the format "nexthop destination" > "10.1.1.10 40.0.1.0/24"
-            String[] parts = route.split(" ");
-            if (parts.length == 2) {
+        for (Routes route : routeList) {
+            if (route != null && route.getNexthop() != null && route.getDestination() != null) {
                 boolean isLockAcquired = false;
-                String nextHop = parts[0];
-                String destination = parts[1];
+                String nextHop = String.valueOf(route.getNexthop().getValue());
+                String destination = String.valueOf(route.getDestination().getValue());
 
                 String tapPortName = NeutronvpnUtils.getNeutronPortNamefromPortFixedIp(broker, nextHop);
                 logger.trace("Adding extra route with nexthop {}, destination {}, ifName {}", nextHop,
@@ -778,20 +776,18 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable {
                     }
                 }
             } else {
-                logger.error("Incorrect input received for extra route. {}", parts);
+                logger.error("Incorrect input received for extra route. {}", route);
             }
         }
         return adjList;
     }
 
-    protected void removeAdjacencyforExtraRoute(List<String> routeList) {
-        for (String route : routeList) {
-            // assuming extra route is strictly in the format "nexthop destination" > "10.1.1.10 40.0.1.0/24"
-            String[] parts = route.split(" ");
-            if (parts.length == 2) {
+    protected void removeAdjacencyforExtraRoute(List<Routes> routeList) {
+        for (Routes route : routeList) {
+            if (route != null && route.getNexthop() != null && route.getDestination() != null) {
                 boolean isLockAcquired = false;
-                String nextHop = parts[0];
-                String destination = parts[1];
+                String nextHop = String.valueOf(route.getNexthop().getValue());
+                String destination = String.valueOf(route.getDestination().getValue());
 
                 String tapPortName = NeutronvpnUtils.getNeutronPortNamefromPortFixedIp(broker, nextHop);
                 logger.trace("Removing extra route with nexthop {}, destination {}, ifName {}", nextHop,
@@ -811,7 +807,7 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable {
                     }
                 }
             } else {
-                logger.error("Incorrect input received for extra route. {}", parts);
+                logger.error("Incorrect input received for extra route. {}", route);
             }
         }
     }