diff --git a/core/api/src/main/java/org/onlab/onos/net/topology/DefaultGraphDescription.java b/core/api/src/main/java/org/onlab/onos/net/topology/DefaultGraphDescription.java index ca64d1d47d..5e4d05055e 100644 --- a/core/api/src/main/java/org/onlab/onos/net/topology/DefaultGraphDescription.java +++ b/core/api/src/main/java/org/onlab/onos/net/topology/DefaultGraphDescription.java @@ -15,14 +15,18 @@ */ package org.onlab.onos.net.topology; +import static org.slf4j.LoggerFactory.getLogger; + import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; + import org.onlab.onos.net.AbstractDescription; import org.onlab.onos.net.ConnectPoint; import org.onlab.onos.net.Device; import org.onlab.onos.net.DeviceId; import org.onlab.onos.net.Link; import org.onlab.onos.net.SparseAnnotations; +import org.slf4j.Logger; import java.util.Map; @@ -32,6 +36,8 @@ import java.util.Map; public class DefaultGraphDescription extends AbstractDescription implements GraphDescription { + private static final Logger log = getLogger(DefaultGraphDescription.class); + private final long nanos; private final ImmutableSet vertexes; private final ImmutableSet edges; @@ -87,8 +93,12 @@ public class DefaultGraphDescription extends AbstractDescription private ImmutableSet buildEdges(Iterable links) { ImmutableSet.Builder edges = ImmutableSet.builder(); for (Link link : links) { - edges.add(new DefaultTopologyEdge(vertexOf(link.src()), - vertexOf(link.dst()), link)); + try { + edges.add(new DefaultTopologyEdge(vertexOf(link.src()), + vertexOf(link.dst()), link)); + } catch (IllegalArgumentException e) { + log.debug("Ignoring {}, missing vertex", link, e); + } } return edges.build(); } diff --git a/core/api/src/test/java/org/onlab/onos/net/topology/DefaultGraphDescriptionTest.java b/core/api/src/test/java/org/onlab/onos/net/topology/DefaultGraphDescriptionTest.java index 4b229d855d..5ff936719e 100644 --- a/core/api/src/test/java/org/onlab/onos/net/topology/DefaultGraphDescriptionTest.java +++ b/core/api/src/test/java/org/onlab/onos/net/topology/DefaultGraphDescriptionTest.java @@ -16,6 +16,7 @@ package org.onlab.onos.net.topology; import com.google.common.collect.ImmutableSet; + import org.junit.Test; import org.onlab.onos.net.DefaultDevice; import org.onlab.onos.net.Device; @@ -47,9 +48,13 @@ public class DefaultGraphDescriptionTest { assertEquals("incorrect edge count", 2, desc.edges().size()); } - @Test(expected = IllegalArgumentException.class) + @Test public void missingVertex() { - new DefaultGraphDescription(4321L, ImmutableSet.of(DEV1, DEV3), - ImmutableSet.of(L1, L2)); + GraphDescription desc = new DefaultGraphDescription(4321L, + ImmutableSet.of(DEV1, DEV3), + ImmutableSet.of(L1, L2)); + assertEquals("incorrect time", 4321L, desc.timestamp()); + assertEquals("incorrect vertex count", 2, desc.vertexes().size()); + assertEquals("incorrect edge count", 0, desc.edges().size()); } } diff --git a/core/api/src/test/java/org/onlab/onos/net/topology/DefaultTopologyEdgeTest.java b/core/api/src/test/java/org/onlab/onos/net/topology/DefaultTopologyEdgeTest.java index bf34e1c858..9984315d3d 100644 --- a/core/api/src/test/java/org/onlab/onos/net/topology/DefaultTopologyEdgeTest.java +++ b/core/api/src/test/java/org/onlab/onos/net/topology/DefaultTopologyEdgeTest.java @@ -48,7 +48,9 @@ public class DefaultTopologyEdgeTest { static final ProviderId PID = new ProviderId("foo", "bar"); + /** D1:P1 -> D2:P1. */ static final Link L1 = new DefaultLink(PID, CP1, CP2, Link.Type.INDIRECT); + /** D2:P1 -> D1:P2. */ static final Link L2 = new DefaultLink(PID, CP3, CP4, Link.Type.INDIRECT); @Test diff --git a/core/net/src/main/java/org/onlab/onos/net/topology/impl/DefaultTopologyProvider.java b/core/net/src/main/java/org/onlab/onos/net/topology/impl/DefaultTopologyProvider.java index a3e0d6c3fc..214fdffcb5 100644 --- a/core/net/src/main/java/org/onlab/onos/net/topology/impl/DefaultTopologyProvider.java +++ b/core/net/src/main/java/org/onlab/onos/net/topology/impl/DefaultTopologyProvider.java @@ -203,6 +203,7 @@ public class DefaultTopologyProvider extends AbstractProvider buildTopology(reasons); } catch (Exception e) { log.warn("Unable to compute topology due to: {}", e.getMessage()); + log.debug("Unable to compute topology", e); } } }