Ray Milkey
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)
...@@ -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;
......