Default Tunnels deleted from config 67/78867/1
authorVishal Thapar <[email protected]>
Thu, 13 Dec 2018 17:01:46 +0000 (22:31 +0530)
committerVishal Thapar <[email protected]>
Wed, 19 Dec 2018 04:47:55 +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 <[email protected]>
(cherry picked from commit df12dde0c70ae3bcf9e5fc6093f49a50e551136a)

elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanBridgeManager.java

index a298366140647d007fe797d1754160bf1aa34fda..19c98dcd3d046e084561807579be730cfece355e 100644 (file)
@@ -20,13 +20,15 @@ import java.util.Optional;
 import java.util.Random;
 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;
@@ -68,7 +70,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;
@@ -81,13 +83,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());
@@ -260,7 +262,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) {