[CORD-2532] IllegalArgumentException in OFDPA pipeliner
Rationale: PW transit groups need to be filtered out
when retry hash and bucket correction happen (if mpls
ecmp is not supported)
Change-Id: I162ddb3d4d8760777b0cbd5bf250d6fcef8302df
diff --git a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultGroupHandler.java b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultGroupHandler.java
index 2c4fb5e..cd20ecb 100644
--- a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultGroupHandler.java
+++ b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/grouphandler/DefaultGroupHandler.java
@@ -247,6 +247,9 @@
Set<DestinationSetNextObjectiveStoreKey> dsKeySet = dsNextObjStore.entrySet()
.stream()
.filter(entry -> entry.getKey().deviceId().equals(deviceId))
+ // Filter out PW transit groups or include them if MPLS ECMP is supported
+ .filter(entry -> !entry.getKey().destinationSet().mplsSet() ||
+ (entry.getKey().destinationSet().mplsSet() && srManager.getMplsEcmp()))
.filter(entry -> entry.getValue().containsNextHop(link.dst().deviceId()))
.map(entry -> entry.getKey())
.collect(Collectors.toSet());
@@ -325,7 +328,7 @@
* a hashed group. User must ensure that all the ports & labels are meant
* same neighbor (ie. dstMac).
*
- * @param portLables a collection of port & label combinations to add
+ * @param portLabels a collection of port & label combinations to add
* to the hash group identified by the nextId
* @param dstMac destination mac address of next-hop
* @param nextId id for next-objective to which buckets will be added
@@ -376,7 +379,7 @@
* a hash group. User must ensure that all the ports & labels are meant
* same neighbor (ie. dstMac).
*
- * @param portLables a collection of port & label combinations to remove
+ * @param portLabels a collection of port & label combinations to remove
* from the hash group identified by the nextId
* @param dstMac destination mac address of next-hop
* @param nextId id for next-objective from which buckets will be removed
@@ -1185,6 +1188,9 @@
if (e.getValue().nextId() != objectiveId) {
continue;
}
+ // Right now it is just used in TunnelHandler
+ // remember in future that PW transit groups could
+ // be Indirect groups
NextObjective.Builder nextObjBuilder = DefaultNextObjective
.builder().withId(objectiveId)
.withType(NextObjective.Type.HASHED).fromApp(appId);
@@ -1343,6 +1349,9 @@
Set<DestinationSetNextObjectiveStoreKey> dsKeySet = dsNextObjStore.entrySet()
.stream()
.filter(entry -> entry.getKey().deviceId().equals(deviceId))
+ // Filter out PW transit groups or include them if MPLS ECMP is supported
+ .filter(entry -> !entry.getKey().destinationSet().mplsSet() ||
+ (entry.getKey().destinationSet().mplsSet() && srManager.getMplsEcmp()))
.map(entry -> entry.getKey())
.collect(Collectors.toSet());
for (DestinationSetNextObjectiveStoreKey dsKey : dsKeySet) {
@@ -1411,4 +1420,4 @@
}
}
-}
\ No newline at end of file
+}