Committed by
Pavlin Radoslavov
ONOS-393 - In a multi ONOS system, a ink may not yet be known about.
[Merged from master] Change-Id: Ife53b41ec9ff577e7e5c80bbd8a25f89e08942cf (cherry picked from commit 7bbeb3fe)
Showing
2 changed files
with
40 additions
and
43 deletions
... | @@ -15,9 +15,6 @@ | ... | @@ -15,9 +15,6 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.net.link.impl; | 16 | package org.onosproject.net.link.impl; |
17 | 17 | ||
18 | -import static com.google.common.base.Preconditions.checkNotNull; | ||
19 | -import static org.slf4j.LoggerFactory.getLogger; | ||
20 | - | ||
21 | import java.util.Set; | 18 | import java.util.Set; |
22 | 19 | ||
23 | import org.apache.felix.scr.annotations.Activate; | 20 | import org.apache.felix.scr.annotations.Activate; |
... | @@ -29,7 +26,6 @@ import org.apache.felix.scr.annotations.Service; | ... | @@ -29,7 +26,6 @@ import org.apache.felix.scr.annotations.Service; |
29 | import org.onosproject.event.AbstractListenerRegistry; | 26 | import org.onosproject.event.AbstractListenerRegistry; |
30 | import org.onosproject.event.EventDeliveryService; | 27 | import org.onosproject.event.EventDeliveryService; |
31 | import org.onosproject.net.ConnectPoint; | 28 | import org.onosproject.net.ConnectPoint; |
32 | -import org.onosproject.net.Device; | ||
33 | import org.onosproject.net.DeviceId; | 29 | import org.onosproject.net.DeviceId; |
34 | import org.onosproject.net.Link; | 30 | import org.onosproject.net.Link; |
35 | import org.onosproject.net.Link.State; | 31 | import org.onosproject.net.Link.State; |
... | @@ -55,6 +51,9 @@ import com.google.common.base.Predicate; | ... | @@ -55,6 +51,9 @@ import com.google.common.base.Predicate; |
55 | import com.google.common.collect.FluentIterable; | 51 | import com.google.common.collect.FluentIterable; |
56 | import com.google.common.collect.Sets; | 52 | import com.google.common.collect.Sets; |
57 | 53 | ||
54 | +import static com.google.common.base.Preconditions.checkNotNull; | ||
55 | +import static org.slf4j.LoggerFactory.getLogger; | ||
56 | + | ||
58 | /** | 57 | /** |
59 | * Provides basic implementation of the link SB & NB APIs. | 58 | * Provides basic implementation of the link SB & NB APIs. |
60 | */ | 59 | */ |
... | @@ -274,20 +273,6 @@ public class LinkManager | ... | @@ -274,20 +273,6 @@ public class LinkManager |
274 | // Removes all links in the specified set and emits appropriate events. | 273 | // Removes all links in the specified set and emits appropriate events. |
275 | private void removeLinks(Set<Link> links, boolean isSoftRemove) { | 274 | private void removeLinks(Set<Link> links, boolean isSoftRemove) { |
276 | for (Link link : links) { | 275 | for (Link link : links) { |
277 | - final Device srcDevice = deviceService.getDevice(link.src().deviceId()); | ||
278 | - final Device dstDevice = deviceService.getDevice(link.dst().deviceId()); | ||
279 | - if (srcDevice != null && | ||
280 | - dstDevice != null && | ||
281 | - !srcDevice.type().equals(dstDevice.type())) { | ||
282 | - //TODO this is awful. need to be fixed so that we don't down | ||
283 | - // configured links. perhaps add a mechanism to figure out the | ||
284 | - // state of this link | ||
285 | - log.info("Ignoring removal of link as device types are " + | ||
286 | - "different {} {} ", | ||
287 | - link.src() , | ||
288 | - link.dst()); | ||
289 | - continue; | ||
290 | - } | ||
291 | LinkEvent event = isSoftRemove ? | 276 | LinkEvent event = isSoftRemove ? |
292 | store.removeOrDownLink(link.src(), link.dst()) : | 277 | store.removeOrDownLink(link.src(), link.dst()) : |
293 | store.removeLink(link.src(), link.dst()); | 278 | store.removeLink(link.src(), link.dst()); | ... | ... |
... | @@ -15,11 +15,20 @@ | ... | @@ -15,11 +15,20 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.store.link.impl; | 16 | package org.onosproject.store.link.impl; |
17 | 17 | ||
18 | -import com.google.common.base.Function; | 18 | +import java.io.IOException; |
19 | -import com.google.common.collect.FluentIterable; | 19 | +import java.util.Collections; |
20 | -import com.google.common.collect.HashMultimap; | 20 | +import java.util.HashMap; |
21 | -import com.google.common.collect.ImmutableList; | 21 | +import java.util.HashSet; |
22 | -import com.google.common.collect.SetMultimap; | 22 | +import java.util.Map; |
23 | +import java.util.Map.Entry; | ||
24 | +import java.util.Objects; | ||
25 | +import java.util.Set; | ||
26 | +import java.util.concurrent.ConcurrentHashMap; | ||
27 | +import java.util.concurrent.ConcurrentMap; | ||
28 | +import java.util.concurrent.ExecutorService; | ||
29 | +import java.util.concurrent.Executors; | ||
30 | +import java.util.concurrent.ScheduledExecutorService; | ||
31 | +import java.util.concurrent.TimeUnit; | ||
23 | 32 | ||
24 | import org.apache.commons.lang3.RandomUtils; | 33 | import org.apache.commons.lang3.RandomUtils; |
25 | import org.apache.felix.scr.annotations.Activate; | 34 | import org.apache.felix.scr.annotations.Activate; |
... | @@ -28,6 +37,7 @@ import org.apache.felix.scr.annotations.Deactivate; | ... | @@ -28,6 +37,7 @@ import org.apache.felix.scr.annotations.Deactivate; |
28 | import org.apache.felix.scr.annotations.Reference; | 37 | import org.apache.felix.scr.annotations.Reference; |
29 | import org.apache.felix.scr.annotations.ReferenceCardinality; | 38 | import org.apache.felix.scr.annotations.ReferenceCardinality; |
30 | import org.apache.felix.scr.annotations.Service; | 39 | import org.apache.felix.scr.annotations.Service; |
40 | +import org.onlab.util.KryoNamespace; | ||
31 | import org.onosproject.cluster.ClusterService; | 41 | import org.onosproject.cluster.ClusterService; |
32 | import org.onosproject.cluster.ControllerNode; | 42 | import org.onosproject.cluster.ControllerNode; |
33 | import org.onosproject.cluster.NodeId; | 43 | import org.onosproject.cluster.NodeId; |
... | @@ -57,28 +67,20 @@ import org.onosproject.store.cluster.messaging.MessageSubject; | ... | @@ -57,28 +67,20 @@ import org.onosproject.store.cluster.messaging.MessageSubject; |
57 | import org.onosproject.store.impl.Timestamped; | 67 | import org.onosproject.store.impl.Timestamped; |
58 | import org.onosproject.store.serializers.KryoSerializer; | 68 | import org.onosproject.store.serializers.KryoSerializer; |
59 | import org.onosproject.store.serializers.impl.DistributedStoreSerializers; | 69 | import org.onosproject.store.serializers.impl.DistributedStoreSerializers; |
60 | -import org.onlab.util.KryoNamespace; | ||
61 | import org.slf4j.Logger; | 70 | import org.slf4j.Logger; |
62 | 71 | ||
63 | -import java.io.IOException; | 72 | +import com.google.common.base.Function; |
64 | -import java.util.Collections; | 73 | +import com.google.common.collect.FluentIterable; |
65 | -import java.util.HashMap; | 74 | +import com.google.common.collect.HashMultimap; |
66 | -import java.util.HashSet; | 75 | +import com.google.common.collect.ImmutableList; |
67 | -import java.util.Map; | 76 | +import com.google.common.collect.SetMultimap; |
68 | -import java.util.Map.Entry; | ||
69 | -import java.util.Objects; | ||
70 | -import java.util.Set; | ||
71 | -import java.util.concurrent.ConcurrentHashMap; | ||
72 | -import java.util.concurrent.ConcurrentMap; | ||
73 | -import java.util.concurrent.ExecutorService; | ||
74 | -import java.util.concurrent.Executors; | ||
75 | -import java.util.concurrent.ScheduledExecutorService; | ||
76 | -import java.util.concurrent.TimeUnit; | ||
77 | 77 | ||
78 | import static com.google.common.base.Preconditions.checkNotNull; | 78 | import static com.google.common.base.Preconditions.checkNotNull; |
79 | import static com.google.common.base.Predicates.notNull; | 79 | import static com.google.common.base.Predicates.notNull; |
80 | import static com.google.common.collect.Multimaps.synchronizedSetMultimap; | 80 | import static com.google.common.collect.Multimaps.synchronizedSetMultimap; |
81 | import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor; | 81 | import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor; |
82 | +import static org.onlab.util.Tools.minPriority; | ||
83 | +import static org.onlab.util.Tools.namedThreads; | ||
82 | import static org.onosproject.cluster.ControllerNodeToNodeId.toNodeId; | 84 | import static org.onosproject.cluster.ControllerNodeToNodeId.toNodeId; |
83 | import static org.onosproject.net.DefaultAnnotations.merge; | 85 | import static org.onosproject.net.DefaultAnnotations.merge; |
84 | import static org.onosproject.net.DefaultAnnotations.union; | 86 | import static org.onosproject.net.DefaultAnnotations.union; |
... | @@ -87,10 +89,10 @@ import static org.onosproject.net.Link.State.INACTIVE; | ... | @@ -87,10 +89,10 @@ import static org.onosproject.net.Link.State.INACTIVE; |
87 | import static org.onosproject.net.Link.Type.DIRECT; | 89 | import static org.onosproject.net.Link.Type.DIRECT; |
88 | import static org.onosproject.net.Link.Type.INDIRECT; | 90 | import static org.onosproject.net.Link.Type.INDIRECT; |
89 | import static org.onosproject.net.LinkKey.linkKey; | 91 | import static org.onosproject.net.LinkKey.linkKey; |
90 | -import static org.onosproject.net.link.LinkEvent.Type.*; | 92 | +import static org.onosproject.net.link.LinkEvent.Type.LINK_ADDED; |
93 | +import static org.onosproject.net.link.LinkEvent.Type.LINK_REMOVED; | ||
94 | +import static org.onosproject.net.link.LinkEvent.Type.LINK_UPDATED; | ||
91 | import static org.onosproject.store.link.impl.GossipLinkStoreMessageSubjects.LINK_ANTI_ENTROPY_ADVERTISEMENT; | 95 | import static org.onosproject.store.link.impl.GossipLinkStoreMessageSubjects.LINK_ANTI_ENTROPY_ADVERTISEMENT; |
92 | -import static org.onlab.util.Tools.minPriority; | ||
93 | -import static org.onlab.util.Tools.namedThreads; | ||
94 | import static org.slf4j.LoggerFactory.getLogger; | 96 | import static org.slf4j.LoggerFactory.getLogger; |
95 | 97 | ||
96 | /** | 98 | /** |
... | @@ -236,7 +238,12 @@ public class GossipLinkStore | ... | @@ -236,7 +238,12 @@ public class GossipLinkStore |
236 | Set<Link> egress = new HashSet<>(); | 238 | Set<Link> egress = new HashSet<>(); |
237 | for (LinkKey linkKey : srcLinks.get(src.deviceId())) { | 239 | for (LinkKey linkKey : srcLinks.get(src.deviceId())) { |
238 | if (linkKey.src().equals(src)) { | 240 | if (linkKey.src().equals(src)) { |
239 | - egress.add(links.get(linkKey)); | 241 | + Link link = links.get(linkKey); |
242 | + if (link != null) { | ||
243 | + egress.add(link); | ||
244 | + } else { | ||
245 | + log.debug("Egress link for {} was null, skipped", linkKey); | ||
246 | + } | ||
240 | } | 247 | } |
241 | } | 248 | } |
242 | return egress; | 249 | return egress; |
... | @@ -247,7 +254,12 @@ public class GossipLinkStore | ... | @@ -247,7 +254,12 @@ public class GossipLinkStore |
247 | Set<Link> ingress = new HashSet<>(); | 254 | Set<Link> ingress = new HashSet<>(); |
248 | for (LinkKey linkKey : dstLinks.get(dst.deviceId())) { | 255 | for (LinkKey linkKey : dstLinks.get(dst.deviceId())) { |
249 | if (linkKey.dst().equals(dst)) { | 256 | if (linkKey.dst().equals(dst)) { |
250 | - ingress.add(links.get(linkKey)); | 257 | + Link link = links.get(linkKey); |
258 | + if (link != null) { | ||
259 | + ingress.add(link); | ||
260 | + } else { | ||
261 | + log.debug("Ingress link for {} was null, skipped", linkKey); | ||
262 | + } | ||
251 | } | 263 | } |
252 | } | 264 | } |
253 | return ingress; | 265 | return ingress; | ... | ... |
-
Please register or login to post a comment