User provided bridge external-ids not making to operational/OVSDB. 36/19636/2
authorSharad Mishra <sharad.d.mishra@intel.com>
Tue, 5 May 2015 07:20:50 +0000 (00:20 -0700)
committerSharad Mishra <sharad.d.mishra@intel.com>
Tue, 5 May 2015 09:50:36 +0000 (02:50 -0700)
When setting up a new bridge with user provided external-ids to
config datastore, these external-ids get dropped and only the iid
shows up as bridge external-id in ovsdb/oper datastore. This patch
fixes that issue.

Change-Id: I04676e166cab96323aff0ce5747a950c111da99c
Signed-off-by: Sharad Mishra <sharad.d.mishra@intel.com>
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeUpdateCommand.java

index 4625aec4c984e6405055f1dcde57a99ec7e09122..92a82a04e18f219d7442851e46dea0d21f94b910 100644 (file)
@@ -28,6 +28,7 @@ import org.opendaylight.ovsdb.southbound.SouthboundMapper;
 import org.opendaylight.ovsdb.southbound.SouthboundUtil;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeInternal;
 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.ovsdb.bridge.attributes.BridgeExternalIds;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.BridgeOtherConfigs;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
@@ -72,7 +73,7 @@ public class BridgeUpdateCommand extends AbstractTransactCommand {
         Bridge bridge = TyperUtils.getTypedRowWrapper(transaction.getDatabaseSchema(), Bridge.class);
         setFailMode(bridge, ovsdbManagedNode);
         setDataPathType(bridge, ovsdbManagedNode);
-        setOpenDaylightIidExternalId(bridge, iid);
+        setOpenDaylightExternalIds(bridge, iid, ovsdbManagedNode);
         setOpenDaylightOtherConfig(bridge, ovsdbManagedNode);
         if (!operationalBridgeOptional.isPresent()) {
             setName(bridge, ovsdbManagedNode,operationalBridgeOptional);
@@ -109,13 +110,23 @@ public class BridgeUpdateCommand extends AbstractTransactCommand {
 
 
 
-    private void setOpenDaylightIidExternalId(Bridge bridge,
-            InstanceIdentifier<OvsdbBridgeAugmentation> iid) {
+    private void setOpenDaylightExternalIds(Bridge bridge, InstanceIdentifier<OvsdbBridgeAugmentation> iid,
+            OvsdbBridgeAugmentation ovsdbManagedNode) {
         // Set the iid external_id
-        Map<String,String> externalIds = new HashMap<String,String>();
-        externalIds.put(SouthboundConstants.IID_EXTERNAL_ID_KEY,
-                SouthboundUtil.serializeInstanceIdentifier(iid));
-        bridge.setExternalIds(externalIds);
+        Map<String, String> externalIdMap = new HashMap<String, String>();
+        externalIdMap.put(SouthboundConstants.IID_EXTERNAL_ID_KEY, SouthboundUtil.serializeInstanceIdentifier(iid));
+        // Set user provided external ids
+        List<BridgeExternalIds> bridgeExternalId = ovsdbManagedNode.getBridgeExternalIds();
+        if (bridgeExternalId != null) {
+            for (BridgeExternalIds externalId : bridgeExternalId) {
+                externalIdMap.put(externalId.getBridgeExternalIdKey(), externalId.getBridgeExternalIdValue());
+            }
+        }
+        try {
+            bridge.setExternalIds(ImmutableMap.copyOf(externalIdMap));
+        } catch (NullPointerException e) {
+            LOG.warn("Incomplete bridge external Id", e);
+        }
     }