Default Tunnels deleted from config 66/78766/6
authorVishal Thapar <vthapar@redhat.com>
Thu, 13 Dec 2018 17:01:46 +0000 (22:31 +0530)
committerVishal Thapar <vthapar@redhat.com>
Wed, 19 Dec 2018 04:47:47 +0000 (04:47 +0000)
When configuring integration bridge, we copy
bridge parameters from operational to configuration
to avoid overwriting them. If any tunnel ports were
added to config before we copyBridgeConfig, they
get overwritten and are lost.

Fix is to use a merge instead of put when copying
bridge to config. This operation is done only
during initial bringup, so overhead of using
merge is acceptable.

JIRA: NETVIRT-1541

Change-Id: I003032883ebae5e405b4d7b849fb2043179f63ff
Signed-off-by: Vishal Thapar <vthapar@redhat.com>
elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanBridgeManager.java

index cef926b432ee0c018fc9817e6d63cec5333b0a35..c6065d7862c6e6788cff8babefb6211048646b5f 100644 (file)
@@ -21,13 +21,15 @@ import java.util.Random;
 import javax.annotation.Nullable;
 import javax.inject.Inject;
 import javax.inject.Singleton;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker;
 import org.opendaylight.genius.interfacemanager.globals.IfmConstants;
 import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
 import org.opendaylight.genius.itm.globals.ITMConstants;
 import org.opendaylight.genius.mdsalutil.MDSALUtil;
 import org.opendaylight.netvirt.elanmanager.api.IElanBridgeManager;
-import org.opendaylight.ovsdb.utils.mdsal.utils.MdsalUtils;
 import org.opendaylight.ovsdb.utils.southbound.utils.SouthboundUtils;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.config.rev150710.ElanConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathId;
@@ -69,7 +71,7 @@ public class ElanBridgeManager implements IElanBridgeManager {
     private static final String OTHER_CONFIG_HWADDR = "hwaddr";
     private static final String OTHER_CONFIG_DISABLE_IN_BAND = "disable-in-band";
 
-    private final MdsalUtils mdsalUtils;
+    private final DataBroker dataBroker;
     private final IInterfaceManager interfaceManager;
     private final SouthboundUtils southboundUtils;
     private final Random random;
@@ -82,13 +84,13 @@ public class ElanBridgeManager implements IElanBridgeManager {
      * @param elanConfig the elan configuration
      * @param interfaceManager InterfaceManager
      * @param southboundUtils southboutUtils
-     * @param mdsalUtils mdsalUtils
+     * @param dataBroker DataBroker
      */
     @Inject
     public ElanBridgeManager(ElanConfig elanConfig, IInterfaceManager interfaceManager,
-            SouthboundUtils southboundUtils, MdsalUtils mdsalUtils) {
+            SouthboundUtils southboundUtils, DataBroker dataBroker) {
         //TODO: ClusterAware!!!??
-        this.mdsalUtils = mdsalUtils;
+        this.dataBroker = dataBroker;
         this.interfaceManager = interfaceManager;
         this.southboundUtils = southboundUtils;
         this.random = new Random(System.currentTimeMillis());
@@ -262,7 +264,12 @@ public class ElanBridgeManager implements IElanBridgeManager {
         NodeBuilder bridgeNodeBuilder = new NodeBuilder(brIntNode);
         bridgeNodeBuilder.setTerminationPoint(null);
         InstanceIdentifier<Node> brNodeIid = SouthboundUtils.createInstanceIdentifier(brIntNode.getNodeId());
-        this.mdsalUtils.put(LogicalDatastoreType.CONFIGURATION, brNodeIid, bridgeNodeBuilder.build());
+        try {
+            SingleTransactionDataBroker.syncUpdate(dataBroker, LogicalDatastoreType.CONFIGURATION,
+                brNodeIid, bridgeNodeBuilder.build());
+        } catch (TransactionCommitFailedException e) {
+            LOG.error("Failed to copy Bridge {} to config", brNodeIid, e);
+        }
     }
 
     private void patchBridgeToBrInt(Node intBridgeNode, Node exBridgeNode, String physnetBridgeName) {