Thomas Vachuska

Refactoring to eliminate duplicate DefaultTopology and DefaultTopologyGraph; eli…

…minating a few fixmes.

Change-Id: Ie0e38dbf812bafdb7c94bba5278f0dd9af5be929
...@@ -474,11 +474,10 @@ public class ReactiveForwarding { ...@@ -474,11 +474,10 @@ public class ReactiveForwarding {
474 474
475 // Otherwise, pick a path that does not lead back to where we 475 // Otherwise, pick a path that does not lead back to where we
476 // came from; if no such path, flood and bail. 476 // came from; if no such path, flood and bail.
477 - Path path = pickForwardPath(paths, pkt.receivedFrom().port()); 477 + Path path = pickForwardPathIfPossible(paths, pkt.receivedFrom().port());
478 if (path == null) { 478 if (path == null) {
479 - log.warn("Doh... don't know where to go... {} -> {} received on {}", 479 + log.warn("Don't know where to go from here {} for {} -> {}",
480 - ethPkt.getSourceMAC(), ethPkt.getDestinationMAC(), 480 + pkt.receivedFrom(), ethPkt.getSourceMAC(), ethPkt.getDestinationMAC());
481 - pkt.receivedFrom());
482 flood(context); 481 flood(context);
483 return; 482 return;
484 } 483 }
...@@ -501,14 +500,16 @@ public class ReactiveForwarding { ...@@ -501,14 +500,16 @@ public class ReactiveForwarding {
501 } 500 }
502 501
503 // Selects a path from the given set that does not lead back to the 502 // Selects a path from the given set that does not lead back to the
504 - // specified port. 503 + // specified port if possible.
505 - private Path pickForwardPath(Set<Path> paths, PortNumber notToPort) { 504 + private Path pickForwardPathIfPossible(Set<Path> paths, PortNumber notToPort) {
505 + Path lastPath = null;
506 for (Path path : paths) { 506 for (Path path : paths) {
507 + lastPath = path;
507 if (!path.src().port().equals(notToPort)) { 508 if (!path.src().port().equals(notToPort)) {
508 return path; 509 return path;
509 } 510 }
510 } 511 }
511 - return null; 512 + return lastPath;
512 } 513 }
513 514
514 // Floods the specified packet if permissible. 515 // Floods the specified packet if permissible.
...@@ -734,7 +735,7 @@ public class ReactiveForwarding { ...@@ -734,7 +735,7 @@ public class ReactiveForwarding {
734 Set<Path> pathsFromCurDevice = 735 Set<Path> pathsFromCurDevice =
735 topologyService.getPaths(topologyService.currentTopology(), 736 topologyService.getPaths(topologyService.currentTopology(),
736 curDevice, dstId); 737 curDevice, dstId);
737 - if (pickForwardPath(pathsFromCurDevice, curLink.src().port()) != null) { 738 + if (pickForwardPathIfPossible(pathsFromCurDevice, curLink.src().port()) != null) {
738 break; 739 break;
739 } else { 740 } else {
740 if (i + 1 == pathLinks.size()) { 741 if (i + 1 == pathLinks.size()) {
...@@ -792,8 +793,8 @@ public class ReactiveForwarding { ...@@ -792,8 +793,8 @@ public class ReactiveForwarding {
792 return builder.build(); 793 return builder.build();
793 } 794 }
794 795
795 - // Returns set of flowEntries which were created by this application and which egress from the 796 + // Returns set of flow entries which were created by this application and
796 - // specified connection port 797 + // which egress from the specified connection port
797 private Set<FlowEntry> getFlowRulesFrom(ConnectPoint egress) { 798 private Set<FlowEntry> getFlowRulesFrom(ConnectPoint egress) {
798 ImmutableSet.Builder<FlowEntry> builder = ImmutableSet.builder(); 799 ImmutableSet.Builder<FlowEntry> builder = ImmutableSet.builder();
799 flowRuleService.getFlowEntries(egress.deviceId()).forEach(r -> { 800 flowRuleService.getFlowEntries(egress.deviceId()).forEach(r -> {
......
...@@ -27,6 +27,7 @@ import org.slf4j.Logger; ...@@ -27,6 +27,7 @@ import org.slf4j.Logger;
27 27
28 import java.util.Map; 28 import java.util.Map;
29 29
30 +import static com.google.common.base.Preconditions.checkArgument;
30 import static org.slf4j.LoggerFactory.getLogger; 31 import static org.slf4j.LoggerFactory.getLogger;
31 32
32 /** 33 /**
...@@ -133,9 +134,7 @@ public class DefaultGraphDescription extends AbstractDescription ...@@ -133,9 +134,7 @@ public class DefaultGraphDescription extends AbstractDescription
133 private TopologyVertex vertexOf(ConnectPoint connectPoint) { 134 private TopologyVertex vertexOf(ConnectPoint connectPoint) {
134 DeviceId id = connectPoint.deviceId(); 135 DeviceId id = connectPoint.deviceId();
135 TopologyVertex vertex = vertexesById.get(id); 136 TopologyVertex vertex = vertexesById.get(id);
136 - if (vertex == null) { 137 + checkArgument(vertex != null, "Vertex missing for %s", id);
137 - throw new IllegalArgumentException("Vertex missing for " + id);
138 - }
139 return vertex; 138 return vertex;
140 } 139 }
141 140
......
...@@ -50,7 +50,9 @@ import java.util.Map; ...@@ -50,7 +50,9 @@ import java.util.Map;
50 import java.util.Set; 50 import java.util.Set;
51 51
52 import static com.google.common.base.MoreObjects.toStringHelper; 52 import static com.google.common.base.MoreObjects.toStringHelper;
53 +import static com.google.common.base.Preconditions.checkArgument;
53 import static org.onlab.graph.GraphPathSearch.ALL_PATHS; 54 import static org.onlab.graph.GraphPathSearch.ALL_PATHS;
55 +import static org.onlab.util.Tools.isNullOrEmpty;
54 import static org.onosproject.core.CoreService.CORE_PROVIDER_ID; 56 import static org.onosproject.core.CoreService.CORE_PROVIDER_ID;
55 import static org.onosproject.net.Link.State.ACTIVE; 57 import static org.onosproject.net.Link.State.ACTIVE;
56 import static org.onosproject.net.Link.State.INACTIVE; 58 import static org.onosproject.net.Link.State.INACTIVE;
...@@ -228,15 +230,12 @@ public class DefaultTopology extends AbstractModel implements Topology { ...@@ -228,15 +230,12 @@ public class DefaultTopology extends AbstractModel implements Topology {
228 230
229 // Find the cluster to which the device belongs. 231 // Find the cluster to which the device belongs.
230 TopologyCluster cluster = clustersByDevice().get(connectPoint.deviceId()); 232 TopologyCluster cluster = clustersByDevice().get(connectPoint.deviceId());
231 - if (cluster == null) { 233 + checkArgument(cluster != null, "No cluster found for device %s", connectPoint.deviceId());
232 - throw new IllegalArgumentException("No cluster found for device "
233 - + connectPoint.deviceId());
234 - }
235 234
236 // If the broadcast set is null or empty, or if the point explicitly 235 // If the broadcast set is null or empty, or if the point explicitly
237 - // belongs to it, return true; 236 + // belongs to it, return true.
238 Set<ConnectPoint> points = broadcastSets.get().get(cluster.id()); 237 Set<ConnectPoint> points = broadcastSets.get().get(cluster.id());
239 - return (points == null) || points.isEmpty() || points.contains(connectPoint); 238 + return isNullOrEmpty(points) || points.contains(connectPoint);
240 } 239 }
241 240
242 /** 241 /**
...@@ -250,6 +249,16 @@ public class DefaultTopology extends AbstractModel implements Topology { ...@@ -250,6 +249,16 @@ public class DefaultTopology extends AbstractModel implements Topology {
250 } 249 }
251 250
252 /** 251 /**
252 + * Returns the set of the cluster broadcast points.
253 + *
254 + * @param clusterId cluster identifier
255 + * @return set of cluster broadcast points
256 + */
257 + public Set<ConnectPoint> broadcastPoints(ClusterId clusterId) {
258 + return broadcastSets.get().get(clusterId);
259 + }
260 +
261 + /**
253 * Returns the set of pre-computed shortest paths between source and 262 * Returns the set of pre-computed shortest paths between source and
254 * destination devices. 263 * destination devices.
255 * 264 *
......
...@@ -279,8 +279,7 @@ public class DefaultTopologyProvider extends AbstractProvider ...@@ -279,8 +279,7 @@ public class DefaultTopologyProvider extends AbstractProvider
279 try { 279 try {
280 buildTopology(reasons); 280 buildTopology(reasons);
281 } catch (Exception e) { 281 } catch (Exception e) {
282 - log.warn("Unable to compute topology due to: {}", e.getMessage()); 282 + log.warn("Unable to compute topology", e);
283 - log.debug("Unable to compute topology", e);
284 } 283 }
285 } 284 }
286 } 285 }
......
...@@ -65,7 +65,7 @@ public class DistributedTopologyStore ...@@ -65,7 +65,7 @@ public class DistributedTopologyStore
65 65
66 private volatile DefaultTopology current = 66 private volatile DefaultTopology current =
67 new DefaultTopology(ProviderId.NONE, 67 new DefaultTopology(ProviderId.NONE,
68 - new DefaultGraphDescription(0L, 0L, 68 + new DefaultGraphDescription(0L, System.currentTimeMillis(),
69 Collections.<Device>emptyList(), 69 Collections.<Device>emptyList(),
70 Collections.<Link>emptyList())); 70 Collections.<Link>emptyList()));
71 71
...@@ -147,8 +147,7 @@ public class DistributedTopologyStore ...@@ -147,8 +147,7 @@ public class DistributedTopologyStore
147 } 147 }
148 148
149 // Have the default topology construct self from the description data. 149 // Have the default topology construct self from the description data.
150 - DefaultTopology newTopology = 150 + DefaultTopology newTopology = new DefaultTopology(providerId, graphDescription);
151 - new DefaultTopology(providerId, graphDescription);
152 151
153 // Promote the new topology to current and return a ready-to-send event. 152 // Promote the new topology to current and return a ready-to-send event.
154 synchronized (this) { 153 synchronized (this) {
......