Fixing ONOS-39 to allow configured links to be marked as durable.

Change-Id: I97b920bf5f597ddb8b64ecc5c4c3769527ad5260
diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/link/impl/GossipLinkStore.java b/core/store/dist/src/main/java/org/onlab/onos/store/link/impl/GossipLinkStore.java
index e82742a..9810d7a 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/link/impl/GossipLinkStore.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/link/impl/GossipLinkStore.java
@@ -65,6 +65,7 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.Map.Entry;
 import java.util.concurrent.ConcurrentHashMap;
@@ -448,8 +449,12 @@
                 // outdated remove request, ignore
                 return null;
             }
+            Link link = links.get(key);
+            if (isDurable(link)) {
+                return null;
+            }
             removedLinks.put(key, timestamp);
-            Link link = links.remove(key);
+            links.remove(key);
             linkDescriptions.clear();
             if (link != null) {
                 srcLinks.remove(link.src().deviceId(), key);
@@ -460,6 +465,11 @@
         }
     }
 
+    // Indicates if the link has been marked as durable via annotations.
+    private boolean isDurable(Link link) {
+        return link != null && Objects.equals(link.annotations().value("durable"), "true");
+    }
+
     private static <K, V> SetMultimap<K, V> createSynchronizedHashMultiMap() {
         return synchronizedSetMultimap(HashMultimap.<K, V>create());
     }