Minor bugfix in Topology Manager 36/4536/2
authorYevgeny Khodorkovsky <ykhodork@cisco.com>
Tue, 21 Jan 2014 23:13:08 +0000 (15:13 -0800)
committerYevgeny Khodorkovsky <ykhodork@cisco.com>
Wed, 22 Jan 2014 19:52:43 +0000 (11:52 -0800)
- This fixes an incorrect assumption that subsequent edge-ADDED updates
  will always have equal edge properties

Change-Id: Ib124a4c260d7fce6bb8464f267c2e88cf0b35384
Signed-off-by: Yevgeny Khodorkovsky <ykhodork@cisco.com>
opendaylight/topologymanager/implementation/src/main/java/org/opendaylight/controller/topologymanager/internal/TopologyManagerImpl.java

index 45a8a5880b70982d83748a3e3d2392dd3e93de1f..b0570fb7f9b6eed29384ac4c0280202df1fd4a5f 100644 (file)
@@ -574,36 +574,38 @@ public class TopologyManagerImpl implements
     private TopoEdgeUpdate edgeUpdate(Edge e, UpdateType type, Set<Property> props) {
         switch (type) {
         case ADDED:
-            // Avoid redundant update as notifications trigger expensive tasks
-            if (edgesDB.containsKey(e)) {
-                log.trace("Skipping redundant edge addition: {}", e);
-                return null;
-            }
-
-            // Ensure that head node connector exists
-            if (!headNodeConnectorExist(e)) {
-                log.warn("Ignore edge that contains invalid node connector: {}", e);
-                return null;
-            }
-
-            // Check if nodeConnectors of the edge were correctly categorized
-            // by OF plugin
-            crossCheckNodeConnectors(e);
 
-            // Make sure the props are non-null
+            // Make sure the props are non-null or create a copy
             if (props == null) {
                 props = new HashSet<Property>();
             } else {
                 props = new HashSet<Property>(props);
             }
 
-            //in case of node switch-over to a different cluster controller,
-            //let's retain edge props
             Set<Property> currentProps = this.edgesDB.get(e);
-            if (currentProps != null){
+            if (currentProps != null) {
+
+                if (currentProps.equals(props)) {
+                    // Avoid redundant updates as notifications trigger expensive tasks
+                    log.trace("Skipping redundant edge addition: {}", e);
+                    return null;
+                }
+
+                // In case of node switch-over to a different cluster controller,
+                // let's retain edge props (e.g. creation time)
                 props.addAll(currentProps);
             }
 
+            // Ensure that head node connector exists
+            if (!headNodeConnectorExist(e)) {
+                log.warn("Ignore edge that contains invalid node connector: {}", e);
+                return null;
+            }
+
+            // Check if nodeConnectors of the edge were correctly categorized
+            // by protocol plugin
+            crossCheckNodeConnectors(e);
+
             // Now make sure there is the creation timestamp for the
             // edge, if not there, stamp with the first update
             boolean found_create = false;