Possible fix for OfOverlay overwrite (#2). 81/21481/1
authorThomas Bachman <tbachman@yahoo.com>
Sat, 30 May 2015 11:36:59 +0000 (07:36 -0400)
committerThomas Bachman <tbachman@yahoo.com>
Sat, 30 May 2015 11:38:26 +0000 (07:38 -0400)
This is an attempt to fix an overwrite of data
in the Inventory Node's OfOverlay augmentation.
It changes the writes of the entire augmentation
to just a write of the tunnel elements.

Change-Id: I5a22dd31381558300544dfb3fcc154f18d71e337
Signed-off-by: Thomas Bachman <tbachman@yahoo.com>
neutron-ovsdb/src/main/java/org/opendaylight/groupbasedpolicy/neutron/ovsdb/util/InventoryHelper.java

index f7e60d33f5b712f6135c76e125746982aee0f2cd..9056c92aa922ada5ff3b0855d3272af2b3631ac4 100644 (file)
@@ -29,6 +29,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.ExternalInterfacesKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.Tunnel;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.TunnelBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.TunnelKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
@@ -216,6 +217,19 @@ public class InventoryHelper {
         submitToDs(transaction);
     }
 
+    private static void addTunnelToOfOverlayAugmentation(Tunnel tunnel, String nodeIdString, DataBroker dataBroker) {
+        InstanceIdentifier<Tunnel> ofOverlayNodeIid = InstanceIdentifier.builder(
+                Nodes.class)
+            .child(Node.class, new NodeKey(new NodeId(nodeIdString)))
+            .augmentation(OfOverlayNodeConfig.class)
+            .child(Tunnel.class, new TunnelKey(tunnel.getKey()))
+            .build();
+
+        WriteTransaction transaction = dataBroker.newReadWriteTransaction();
+        transaction.merge(LogicalDatastoreType.CONFIGURATION, ofOverlayNodeIid, tunnel, true);
+        submitToDs(transaction);
+    }
+
     /**
      * Update the {@link OfOverlayConfig} of an Inventory Node
      * using the new tunnel state.
@@ -266,14 +280,9 @@ public class InventoryHelper {
             }
         }
         if (tunnelsUpdated == true) {
-            OfOverlayNodeConfigBuilder ofOverlayBuilder = null;
-            if (ofConfig == null) {
-                ofOverlayBuilder = new OfOverlayNodeConfigBuilder();
-            } else {
-                ofOverlayBuilder = new OfOverlayNodeConfigBuilder(ofConfig);
+            for (Tunnel tunnel: tunnelList) {
+                addTunnelToOfOverlayAugmentation(tunnel, nodeIdString, dataBroker);
             }
-            ofOverlayBuilder.setTunnel(tunnelList);
-            addOfOverlayAugmentation(ofOverlayBuilder.build(), nodeIdString, dataBroker);
         }
     }
 }