Fix the path not found issue in pseudowire
- Use getPaths instead of getDisjointPaths
- Add more debug log that prints all paths obtained from topology service
Change-Id: Ic195633b99261baec39962f0e99bc7b7082755c4
diff --git a/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java b/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
index 6d5d0b2..0725e1b 100644
--- a/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
+++ b/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
@@ -84,7 +84,6 @@
import org.onosproject.net.packet.PacketContext;
import org.onosproject.net.packet.PacketProcessor;
import org.onosproject.net.packet.PacketService;
-import org.onosproject.net.topology.PathService;
import org.onosproject.net.topology.TopologyService;
import org.onosproject.routeservice.ResolvedRoute;
import org.onosproject.routeservice.RouteEvent;
@@ -153,9 +152,6 @@
private NeighbourResolutionService neighbourResolutionService;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- public PathService pathService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
CoreService coreService;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
@@ -186,7 +182,7 @@
MulticastRouteService multicastRouteService;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- TopologyService topologyService;
+ public TopologyService topologyService;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
RouteService routeService;
diff --git a/src/main/java/org/onosproject/segmentrouting/pwaas/L2TunnelHandler.java b/src/main/java/org/onosproject/segmentrouting/pwaas/L2TunnelHandler.java
index 012628b..2675734 100644
--- a/src/main/java/org/onosproject/segmentrouting/pwaas/L2TunnelHandler.java
+++ b/src/main/java/org/onosproject/segmentrouting/pwaas/L2TunnelHandler.java
@@ -27,8 +27,8 @@
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DefaultLink;
import org.onosproject.net.DeviceId;
-import org.onosproject.net.DisjointPath;
import org.onosproject.net.Link;
+import org.onosproject.net.Path;
import org.onosproject.net.PortNumber;
import org.onosproject.net.config.NetworkConfigEvent;
import org.onosproject.net.flow.DefaultTrafficSelector;
@@ -1329,15 +1329,17 @@
* @return the path
*/
private List<Link> getPath(ConnectPoint srcCp, ConnectPoint dstCp) {
+ /* TODO We retrieve a set of paths in case of a link failure, what happens
+ * if the TopologyService gets the link notification AFTER us and has not updated the paths?
+ *
+ * TODO This has the potential to act on old topology.
+ * Maybe we should make SRManager be a listener on topology events instead raw link events.
+ */
+ Set<Path> paths = srManager.topologyService.getPaths(
+ srManager.topologyService.currentTopology(),
+ srcCp.deviceId(), dstCp.deviceId());
- /* We retrieve a set of disjoint paths.
- * We perform that in case of a link failure, what happens
- * if the PathService gets the link notification AFTER us and
- * has not updated the paths?
- */
- Set<DisjointPath> paths = srManager
- .pathService
- .getDisjointPaths(srcCp.elementId(), dstCp.elementId());
+ log.debug("Paths obtained from topology service {}", paths);
// We randomly pick a path.
if (paths.isEmpty()) {
@@ -1346,7 +1348,10 @@
int size = paths.size();
int index = RandomUtils.nextInt(0, size);
- return Iterables.get(paths, index).links();
+ List<Link> result = Iterables.get(paths, index).links();
+ log.debug("Randomly picked a path {}", result);
+
+ return result;
}
/**