ONOS-1786: Updates group buckets when link status is changed.
- Add null check for port map when creating new groups
Change-Id: I92b494d91e908011f2c08be850ccde648e647a09
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 cb295db..1d9f4ec 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
@@ -186,17 +186,19 @@
tBuilder.pushMpls().setMpls(MplsLabel.mplsLabel(ns
.getEdgeLabel()));
}
- /*
- * GroupBucket removeBucket = DefaultGroupBucket.
- * createSelectGroupBucket(tBuilder.build()); GroupBuckets
- * removeBuckets = new GroupBuckets( Arrays.asList(removeBucket));
- * log.debug("portDown in device{}: " +
- * "groupService.removeBucketsFromGroup " + "for neighborset{}",
- * deviceId, ns); groupService.removeBucketsFromGroup(deviceId,
- * getGroupKey(ns), removeBuckets, getGroupKey(ns), appId);
- */
- //TODO: Use next objective API to update the previously created
- //next objectives.
+
+ Integer nextId = deviceNextObjectiveIds.get(getGroupKey(ns));
+ if (nextId != null) {
+ NextObjective.Builder nextObjBuilder = DefaultNextObjective
+ .builder().withType(NextObjective.Type.SIMPLE).withId(nextId).fromApp(appId);
+
+ nextObjBuilder.addTreatment(tBuilder.build());
+
+ NextObjective nextObjective = nextObjBuilder.remove();
+
+ flowObjectiveService.next(deviceId, nextObjective);
+ }
+
}
devicePortMap.get(portDeviceMap.get(port)).remove(port);
@@ -333,6 +335,11 @@
.builder().withId(nextId)
.withType(NextObjective.Type.HASHED).fromApp(appId);
for (DeviceId d : ns.getDeviceIds()) {
+ if (devicePortMap.get(d) == null) {
+ log.warn("Device {} is not in the port map yet", d);
+ return;
+ }
+
for (PortNumber sp : devicePortMap.get(d)) {
TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment
.builder();
@@ -341,7 +348,7 @@
.setEthSrc(nodeMacAddr);
if (ns.getEdgeLabel() != NeighborSet.NO_EDGE_LABEL) {
tBuilder.pushMpls().setMpls(MplsLabel.mplsLabel(ns
- .getEdgeLabel()));
+ .getEdgeLabel()));
}
nextObjBuilder.addTreatment(tBuilder.build());
}