Sahil Lele
Committed by Gerrit Code Review

@ONOS-2379 Improve the efficiency of blackhole solution by reusing shortest path…

…s to the same src for each src/dst pair

Change-Id: I680c94ce2693000acdd06b5d8d762219eb9a320f
...@@ -73,7 +73,9 @@ import org.osgi.service.component.ComponentContext; ...@@ -73,7 +73,9 @@ import org.osgi.service.component.ComponentContext;
73 import org.slf4j.Logger; 73 import org.slf4j.Logger;
74 74
75 import java.util.Dictionary; 75 import java.util.Dictionary;
76 +import java.util.HashMap;
76 import java.util.List; 77 import java.util.List;
78 +import java.util.Map;
77 import java.util.Objects; 79 import java.util.Objects;
78 import java.util.Set; 80 import java.util.Set;
79 81
...@@ -692,6 +694,8 @@ public class ReactiveForwarding { ...@@ -692,6 +694,8 @@ public class ReactiveForwarding {
692 Set<FlowEntry> rules = getFlowRulesFrom(egress); 694 Set<FlowEntry> rules = getFlowRulesFrom(egress);
693 Set<SrcDstPair> pairs = findSrcDstPairs(rules); 695 Set<SrcDstPair> pairs = findSrcDstPairs(rules);
694 696
697 + Map<DeviceId, Set<Path>> srcPaths = new HashMap<>();
698 +
695 for (SrcDstPair sd: pairs) { 699 for (SrcDstPair sd: pairs) {
696 // get the edge deviceID for the src host 700 // get the edge deviceID for the src host
697 DeviceId srcId = hostService.getHost(HostId.hostId(sd.src)).location().deviceId(); 701 DeviceId srcId = hostService.getHost(HostId.hostId(sd.src)).location().deviceId();
...@@ -700,8 +704,11 @@ public class ReactiveForwarding { ...@@ -700,8 +704,11 @@ public class ReactiveForwarding {
700 704
701 cleanFlowRules(sd, egress.deviceId()); 705 cleanFlowRules(sd, egress.deviceId());
702 706
703 - Set<Path> shortestPaths = 707 + Set<Path> shortestPaths = srcPaths.get(srcId);
704 - topologyService.getPaths(topologyService.currentTopology(), egress.deviceId(), srcId); 708 + if (shortestPaths == null) {
709 + shortestPaths = topologyService.getPaths(topologyService.currentTopology(), egress.deviceId(), srcId);
710 + srcPaths.put(srcId, shortestPaths);
711 + }
705 backTrackBadNodes(shortestPaths, dstId, sd); 712 backTrackBadNodes(shortestPaths, dstId, sd);
706 } 713 }
707 } 714 }
......