From f433f95e1bddc600ed6b8a1eb61c99513e45fecb Mon Sep 17 00:00:00 2001 From: Charles Chan Date: Thu, 15 Mar 2018 16:41:10 -0700 Subject: [PATCH] Duplicated flow obj requests are sent in occasion of ROUTE_REMOVED event Change-Id: I7ad9aa8f27203684921356689805b4092f138d78 --- .../java/org/onosproject/segmentrouting/RouteHandler.java | 5 ++--- .../org/onosproject/segmentrouting/HostHandlerTest.java | 2 +- .../segmentrouting/MockDefaultRoutingHandler.java | 6 +++++- .../org/onosproject/segmentrouting/RouteHandlerTest.java | 2 +- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/RouteHandler.java b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/RouteHandler.java index 21870ee569..a8de07025a 100644 --- a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/RouteHandler.java +++ b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/RouteHandler.java @@ -222,9 +222,8 @@ public class RouteHandler { locations.forEach(location -> { log.debug("RouteRemoved. removeSubnet {}, {}", location, prefix); srManager.deviceConfiguration.removeSubnet(location, prefix); - log.debug("RouteRemoved. revokeRoute {}, {}, {}, {}", location, prefix, nextHopMac, nextHopVlan); - srManager.defaultRoutingHandler.revokeRoute(location.deviceId(), prefix, - nextHopMac, nextHopVlan, location.port()); + // We don't need to call revokeRoute again since revokeSubnet will remove the prefix + // from all devices, including the ones that next hop attaches to. // Also remove redirection flows on the pair device if exists. Optional pairDeviceId = srManager.getPairDeviceId(location.deviceId()); diff --git a/apps/segmentrouting/app/src/test/java/org/onosproject/segmentrouting/HostHandlerTest.java b/apps/segmentrouting/app/src/test/java/org/onosproject/segmentrouting/HostHandlerTest.java index e33a36da51..b6ec070d00 100644 --- a/apps/segmentrouting/app/src/test/java/org/onosproject/segmentrouting/HostHandlerTest.java +++ b/apps/segmentrouting/app/src/test/java/org/onosproject/segmentrouting/HostHandlerTest.java @@ -205,7 +205,7 @@ public class HostHandlerTest { srManager.deviceConfiguration = new DeviceConfiguration(srManager); srManager.flowObjectiveService = new MockFlowObjectiveService(BRIDGING_TABLE, NEXT_TABLE); srManager.routingRulePopulator = new MockRoutingRulePopulator(srManager, ROUTING_TABLE); - srManager.defaultRoutingHandler = new MockDefaultRoutingHandler(srManager, SUBNET_TABLE); + srManager.defaultRoutingHandler = new MockDefaultRoutingHandler(srManager, SUBNET_TABLE, ROUTING_TABLE); srManager.interfaceService = new MockInterfaceService(INTERFACES); srManager.mastershipService = new MockMastershipService(LOCAL_DEVICES); srManager.hostService = new MockHostService(HOSTS); diff --git a/apps/segmentrouting/app/src/test/java/org/onosproject/segmentrouting/MockDefaultRoutingHandler.java b/apps/segmentrouting/app/src/test/java/org/onosproject/segmentrouting/MockDefaultRoutingHandler.java index ec07238a8a..d31be2fbac 100644 --- a/apps/segmentrouting/app/src/test/java/org/onosproject/segmentrouting/MockDefaultRoutingHandler.java +++ b/apps/segmentrouting/app/src/test/java/org/onosproject/segmentrouting/MockDefaultRoutingHandler.java @@ -27,11 +27,14 @@ import java.util.Set; */ public class MockDefaultRoutingHandler extends DefaultRoutingHandler { private Map> subnetTable; + private Map routingTable; MockDefaultRoutingHandler(SegmentRoutingManager srManager, - Map> subnetTable) { + Map> subnetTable, + Map routingTable) { super(srManager); this.subnetTable = subnetTable; + this.routingTable = routingTable; } @Override @@ -56,6 +59,7 @@ public class MockDefaultRoutingHandler extends DefaultRoutingHandler { subnetTable.remove(entry.getKey()); } } + routingTable.entrySet().removeIf(e -> subnets.contains(e.getKey().ipPrefix)); return true; } } \ No newline at end of file diff --git a/apps/segmentrouting/app/src/test/java/org/onosproject/segmentrouting/RouteHandlerTest.java b/apps/segmentrouting/app/src/test/java/org/onosproject/segmentrouting/RouteHandlerTest.java index 843ba6bd2b..36a9e79d82 100644 --- a/apps/segmentrouting/app/src/test/java/org/onosproject/segmentrouting/RouteHandlerTest.java +++ b/apps/segmentrouting/app/src/test/java/org/onosproject/segmentrouting/RouteHandlerTest.java @@ -145,7 +145,7 @@ public class RouteHandlerTest { srManager.deviceConfiguration = createMock(DeviceConfiguration.class); srManager.flowObjectiveService = new MockFlowObjectiveService(BRIDGING_TABLE, NEXT_TABLE); srManager.routingRulePopulator = new MockRoutingRulePopulator(srManager, ROUTING_TABLE); - srManager.defaultRoutingHandler = new MockDefaultRoutingHandler(srManager, SUBNET_TABLE); + srManager.defaultRoutingHandler = new MockDefaultRoutingHandler(srManager, SUBNET_TABLE, ROUTING_TABLE); srManager.interfaceService = new MockInterfaceService(INTERFACES); srManager.mastershipService = new MockMastershipService(LOCAL_DEVICES); hostService = new MockHostService(HOSTS);