ONOS-1791 : Populates MPLS rules also at edge routers
- Adds check for mastership when updating group description.
Change-Id: I536bcec595b8727689de11eb41e4b2f86cabb936
diff --git a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/DefaultRoutingHandler.java b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/DefaultRoutingHandler.java
index cbad910..7bb8899 100644
--- a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/DefaultRoutingHandler.java
+++ b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/DefaultRoutingHandler.java
@@ -124,9 +124,12 @@
synchronized (populationStatus) {
if (populationStatus == Status.STARTED) {
+ log.warn("Previous rule population is not finished.");
return true;
}
+ log.info("Starts rule population from link change");
+
Set<ArrayList<DeviceId>> routeChanges;
populationStatus = Status.STARTED;
if (linkFail == null) {
@@ -138,7 +141,7 @@
}
if (routeChanges.isEmpty()) {
- log.debug("No route changes for the link status change");
+ log.info("No route changes for the link status change");
populationStatus = Status.SUCCEEDED;
return true;
}
@@ -164,6 +167,9 @@
ECMPShortestPathGraph ecmpSpg = new ECMPShortestPathGraph(link.get(0), srManager);
if (populateEcmpRoutingRules(link.get(0), ecmpSpg)) {
currentEcmpSpgMap.put(link.get(0), ecmpSpg);
+ } else {
+ log.warn("Failed to populate the flow ruls from {} to all", link.get(0));
+ return false;
}
continue;
}
@@ -358,8 +364,7 @@
}
// If both target switch and dest switch are edge routers, then set IP
- // rule
- // for both subnet and router IP.
+ // rule for both subnet and router IP.
if (config.isEdgeDevice(targetSw) && config.isEdgeDevice(destSw)) {
List<Ip4Prefix> subnets = config.getSubnets(destSw);
result = rulePopulator.populateIpRuleForSubnet(targetSw,
@@ -377,7 +382,7 @@
return false;
}
- // TODO: If the target switch is an edge router, then set IP rules for the router IP.
+ // If the target switch is an edge router, then set IP rules for the router IP.
} else if (config.isEdgeDevice(targetSw)) {
Ip4Address routerIp = config.getRouterIp(destSw);
IpPrefix routerIpPrefix = IpPrefix.valueOf(routerIp, IpPrefix.MAX_INET_MASK_LENGTH);
@@ -385,13 +390,12 @@
if (!result) {
return false;
}
+ }
- // TODO: If the target switch is an transit router, then set MPLS rules only.
- } else if (!config.isEdgeDevice(targetSw)) {
- result = rulePopulator.populateMplsRule(targetSw, destSw, nextHops);
- if (!result) {
- return false;
- }
+ // Populates MPLS rules to all routers
+ result = rulePopulator.populateMplsRule(targetSw, destSw, nextHops);
+ if (!result) {
+ return false;
}
return true;
diff --git a/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java b/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java
index 068582c..5c92ef6 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java
@@ -463,8 +463,8 @@
GroupBuckets newBuckets,
GroupKey newAppCookie) {
// Check if group update to be done by a remote instance
- if (mastershipService.
- getLocalRole(deviceId) != MastershipRole.MASTER) {
+ if (mastershipService.getMasterFor(deviceId) != null &&
+ mastershipService.getLocalRole(deviceId) != MastershipRole.MASTER) {
GroupStoreMessage groupOp = GroupStoreMessage.
createGroupUpdateRequestMsg(deviceId,
oldAppCookie,