From 7a9fe630668412d4778872cfc34dd353bb9673d4 Mon Sep 17 00:00:00 2001 From: Sharad Mishra Date: Wed, 12 Aug 2015 13:53:14 -0400 Subject: [PATCH] Fix for defect 4135 https://bugs.opendaylight.org/show_bug.cgi?id=4135 If integration bridge or external bridge exist prior to connecting to ODL, then the pre-existing bridge is not added. But the side effect is that the controller is not set on this bridge. Current code checks to see if the bridge already exists on the node. This patch adds a check to see if the bridge exists on CONFIG datastore. If the bridge does not exist on config, it indicates that the bridge existed prior to ODL connection, and it adds the bridge. Signed-off-by: Sharad Mishra --- .../ovsdb/openstack/netvirt/api/Southbound.java | 2 ++ .../netvirt/impl/BridgeConfigurationManagerImpl.java | 4 +++- .../ovsdb/openstack/netvirt/impl/SouthboundImpl.java | 10 ++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Southbound.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Southbound.java index b0a59fd40d..7a8f6e6a59 100644 --- a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Southbound.java +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Southbound.java @@ -9,6 +9,7 @@ package org.opendaylight.ovsdb.openstack.netvirt.api; import java.util.List; import java.util.Map; + import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation; @@ -76,4 +77,5 @@ public interface Southbound { Long getOFPort(OvsdbTerminationPointAugmentation port); Long getOFPort(Node bridgeNode, String portName); DataBroker getDatabroker(); + OvsdbBridgeAugmentation getBridgeFromConfig(Node ovsdbNode, String bridgeName); } diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/BridgeConfigurationManagerImpl.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/BridgeConfigurationManagerImpl.java index 81e8b21e3c..a9e84bad2d 100644 --- a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/BridgeConfigurationManagerImpl.java +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/BridgeConfigurationManagerImpl.java @@ -10,6 +10,7 @@ package org.opendaylight.ovsdb.openstack.netvirt.impl; import org.opendaylight.neutron.spi.NeutronNetwork; import org.opendaylight.ovsdb.openstack.netvirt.ConfigInterface; +import org.opendaylight.ovsdb.openstack.netvirt.MdsalHelper; import org.opendaylight.ovsdb.openstack.netvirt.NetworkHandler; import org.opendaylight.ovsdb.openstack.netvirt.api.BridgeConfigurationManager; import org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService; @@ -457,7 +458,8 @@ public class BridgeConfigurationManagerImpl implements BridgeConfigurationManage */ private boolean addBridge(Node ovsdbNode, String bridgeName) throws Exception { boolean rv = true; - if (!southbound.isBridgeOnOvsdbNode(ovsdbNode, bridgeName)) { + if ((!southbound.isBridgeOnOvsdbNode(ovsdbNode, bridgeName)) || + (southbound.getBridgeFromConfig(ovsdbNode, bridgeName) == null)) { rv = southbound.addBridge(ovsdbNode, bridgeName, getControllerTarget(ovsdbNode)); } return rv; diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SouthboundImpl.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SouthboundImpl.java index 0f68198c73..22934ea409 100644 --- a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SouthboundImpl.java +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SouthboundImpl.java @@ -721,4 +721,14 @@ public class SouthboundImpl implements Southbound { } return ofPort; } + public OvsdbBridgeAugmentation getBridgeFromConfig(Node node, String bridge) { + OvsdbBridgeAugmentation ovsdbBridgeAugmentation = null; + InstanceIdentifier bridgeIid = + MdsalHelper.createInstanceIdentifier(node.getKey(), bridge); + Node bridgeNode = mdsalUtils.read(LogicalDatastoreType.CONFIGURATION, bridgeIid); + if (bridgeNode != null) { + ovsdbBridgeAugmentation = bridgeNode.getAugmentation(OvsdbBridgeAugmentation.class); + } + return ovsdbBridgeAugmentation; + } } -- 2.36.6