Brian O'Connor

Adding linkVanished to NullLinkProvider when topology changes

ONOS-1287

Change-Id: Iffd19723be4c5b88dd0e3025d729ba2cc3f3faa8
...@@ -19,7 +19,6 @@ import com.google.common.collect.HashMultimap; ...@@ -19,7 +19,6 @@ import com.google.common.collect.HashMultimap;
19 import com.google.common.collect.Lists; 19 import com.google.common.collect.Lists;
20 import com.google.common.collect.Maps; 20 import com.google.common.collect.Maps;
21 import com.google.common.collect.Sets; 21 import com.google.common.collect.Sets;
22 -
23 import org.apache.felix.scr.annotations.Activate; 22 import org.apache.felix.scr.annotations.Activate;
24 import org.apache.felix.scr.annotations.Component; 23 import org.apache.felix.scr.annotations.Component;
25 import org.apache.felix.scr.annotations.Deactivate; 24 import org.apache.felix.scr.annotations.Deactivate;
...@@ -27,6 +26,7 @@ import org.apache.felix.scr.annotations.Modified; ...@@ -27,6 +26,7 @@ import org.apache.felix.scr.annotations.Modified;
27 import org.apache.felix.scr.annotations.Property; 26 import org.apache.felix.scr.annotations.Property;
28 import org.apache.felix.scr.annotations.Reference; 27 import org.apache.felix.scr.annotations.Reference;
29 import org.apache.felix.scr.annotations.ReferenceCardinality; 28 import org.apache.felix.scr.annotations.ReferenceCardinality;
29 +import org.onlab.util.Tools;
30 import org.onosproject.cfg.ComponentConfigService; 30 import org.onosproject.cfg.ComponentConfigService;
31 import org.onosproject.cluster.ClusterService; 31 import org.onosproject.cluster.ClusterService;
32 import org.onosproject.cluster.NodeId; 32 import org.onosproject.cluster.NodeId;
...@@ -48,6 +48,11 @@ import org.onosproject.net.provider.ProviderId; ...@@ -48,6 +48,11 @@ import org.onosproject.net.provider.ProviderId;
48 import org.osgi.service.component.ComponentContext; 48 import org.osgi.service.component.ComponentContext;
49 import org.slf4j.Logger; 49 import org.slf4j.Logger;
50 50
51 +import java.io.BufferedReader;
52 +import java.io.FileReader;
53 +import java.io.IOException;
54 +import java.net.URI;
55 +import java.net.URISyntaxException;
51 import java.util.Dictionary; 56 import java.util.Dictionary;
52 import java.util.List; 57 import java.util.List;
53 import java.util.Set; 58 import java.util.Set;
...@@ -55,11 +60,6 @@ import java.util.concurrent.ConcurrentMap; ...@@ -55,11 +60,6 @@ import java.util.concurrent.ConcurrentMap;
55 import java.util.concurrent.Executors; 60 import java.util.concurrent.Executors;
56 import java.util.concurrent.ScheduledExecutorService; 61 import java.util.concurrent.ScheduledExecutorService;
57 import java.util.concurrent.TimeUnit; 62 import java.util.concurrent.TimeUnit;
58 -import java.io.BufferedReader;
59 -import java.io.FileReader;
60 -import java.io.IOException;
61 -import java.net.URI;
62 -import java.net.URISyntaxException;
63 63
64 import static com.google.common.base.Strings.isNullOrEmpty; 64 import static com.google.common.base.Strings.isNullOrEmpty;
65 import static org.onlab.util.Tools.groupedThreads; 65 import static org.onlab.util.Tools.groupedThreads;
...@@ -280,12 +280,18 @@ public class NullLinkProvider extends AbstractProvider implements LinkProvider { ...@@ -280,12 +280,18 @@ public class NullLinkProvider extends AbstractProvider implements LinkProvider {
280 log.warn("Could not close topology file: {}", e); 280 log.warn("Could not close topology file: {}", e);
281 } 281 }
282 } 282 }
283 + Set<LinkDescription> removedLinks = null;
283 synchronized (linkDescrs) { 284 synchronized (linkDescrs) {
284 if (!read.isEmpty()) { 285 if (!read.isEmpty()) {
286 + removedLinks = Sets.difference(Sets.newHashSet(linkDescrs), read);
285 linkDescrs.clear(); 287 linkDescrs.clear();
286 linkDescrs.addAll(read); 288 linkDescrs.addAll(read);
287 } 289 }
288 } 290 }
291 + if (!Tools.isNullOrEmpty(removedLinks)) {
292 + log.info("Removing {} old link(s)", removedLinks.size());
293 + removedLinks.forEach(providerService::linkVanished);
294 + }
289 } 295 }
290 296
291 // parses a link descriptor to make a LinkDescription 297 // parses a link descriptor to make a LinkDescription
......