Bug 3310 Bug 3316: Fix for iids for bridges 41/21141/2
authorEd Warnicke <hagbard@gmail.com>
Thu, 21 May 2015 20:55:25 +0000 (13:55 -0700)
committerSam Hague <shague@redhat.com>
Wed, 3 Jun 2015 21:41:47 +0000 (21:41 +0000)
Change-Id: Ieabaa7040cbcdc8e72a2aae21a9181667c543880
Signed-off-by: Ed Warnicke <hagbard@gmail.com>
(cherry picked from commit 004394b0b3da86ddb506c757b8c5f110d916b02a)

southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundMapper.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeUpdateCommand.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/TransactUtils.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommand.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbPortUpdateCommand.java
southbound/southbound-it/src/test/java/org/opendaylight/ovsdb/southbound/it/SouthboundIT.java

index 7eecd667fdc49d1f50f7e67da1bec6c4038c54e4..7e051ecc0a23ee530129f4e509f0266eb82ca392 100644 (file)
@@ -35,7 +35,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathTypeSystem;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeBase;
 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.OvsdbBridgeName;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolBase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntryBuilder;
@@ -96,7 +95,23 @@ public class SouthboundMapper {
     }
 
     public static InstanceIdentifier<Node> createInstanceIdentifier(OvsdbConnectionInstance client,Bridge bridge) {
-        return createInstanceIdentifier(createManagedNodeId(client, new OvsdbBridgeName(bridge.getName())));
+        InstanceIdentifier<Node> iid;
+        if (bridge.getExternalIdsColumn() != null
+                && bridge.getExternalIdsColumn().getData() != null
+                && bridge.getExternalIdsColumn().getData().containsKey(SouthboundConstants.IID_EXTERNAL_ID_KEY)) {
+            String iidString = bridge.getExternalIdsColumn().getData().get(SouthboundConstants.IID_EXTERNAL_ID_KEY);
+            iid = (InstanceIdentifier<Node>) SouthboundUtil.deserializeInstanceIdentifier(iidString);
+        } else {
+            String nodeString = client.getNodeKey().getNodeId().getValue()
+                    + "/bridge/" + bridge.getName();
+            NodeId nodeId = new NodeId(new Uri(nodeString));
+            NodeKey nodeKey = new NodeKey(nodeId);
+            iid = InstanceIdentifier.builder(NetworkTopology.class)
+                    .child(Topology.class,new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+                    .child(Node.class,nodeKey)
+                    .build();
+        }
+        return iid;
     }
 
     public static NodeId createManagedNodeId(InstanceIdentifier<Node> iid) {
@@ -104,11 +119,6 @@ public class SouthboundMapper {
         return nodeKey.getNodeId();
     }
 
-    public static NodeId createManagedNodeId(OvsdbConnectionInstance client, OvsdbBridgeName bridgeName) {
-        return new NodeId(client.getNodeId().getValue()
-                + "/" + SouthboundConstants.BRIDGE_URI_PREFIX + "/" + bridgeName.getValue());
-    }
-
     public static InetAddress createInetAddress(IpAddress ip) throws UnknownHostException {
         if (ip.getIpv4Address() != null) {
             return InetAddress.getByName(ip.getIpv4Address().getValue());
index 7c60b77a31ea1bb6b5a93d6be6970ed1ba0095b5..b5f9eadc98d8b90d3a30d73747e016106437554f 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
 import static org.opendaylight.ovsdb.lib.operations.Operations.op;
 
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -17,6 +18,7 @@ import java.util.Map.Entry;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
 import org.opendaylight.ovsdb.lib.notation.UUID;
 import org.opendaylight.ovsdb.lib.operations.Insert;
+import org.opendaylight.ovsdb.lib.operations.Mutate;
 import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
 import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
 import org.opendaylight.ovsdb.lib.schema.typed.TyperUtils;
@@ -30,6 +32,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re
 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.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
@@ -93,6 +96,7 @@ public class BridgeUpdateCommand extends AbstractTransactCommand {
             transaction.add(op.update(bridge)
                     .where(extraBridge.getNameColumn().getSchema().opEqual(existingBridgeName))
                     .build());
+            stampInstanceIdentifier(transaction, iid.firstIdentifierOf(Node.class),existingBridgeName);
         }
     }
 
@@ -191,4 +195,18 @@ public class BridgeUpdateCommand extends AbstractTransactCommand {
         }
     }
 
+    private void stampInstanceIdentifier(TransactionBuilder transaction,InstanceIdentifier<Node> iid,
+            String bridgeName) {
+        Bridge bridge = TyperUtils.getTypedRowWrapper(transaction.getDatabaseSchema(), Bridge.class);
+        bridge.setName(bridgeName);
+        bridge.setExternalIds(Collections.<String,String>emptyMap());
+        Mutate mutate = TransactUtils.stampInstanceIdentifierMutation(transaction,
+                iid,
+                bridge.getSchema(),
+                bridge.getExternalIdsColumn().getSchema());
+        transaction.add(mutate
+                .where(bridge.getNameColumn().getSchema().opEqual(bridgeName))
+                .build());
+    }
+
 }
\ No newline at end of file
index 20839eab03dc229a8dd3c98dd27a5efe740753f5..25d875b6631acc39915a37fe08f888843ba9844f 100644 (file)
@@ -171,6 +171,13 @@ public class TransactUtils {
     public static <T  extends TableSchema<T>> void stampInstanceIdentifier(TransactionBuilder transaction,
             InstanceIdentifier<?> iid, TableSchema<T> tableSchema,
             ColumnSchema<T, Map<String,String>> columnSchema) {
+        transaction.add(stampInstanceIdentifierMutation(transaction,iid,
+                tableSchema,columnSchema));
+    }
+
+    public static <T  extends TableSchema<T>> Mutate<T> stampInstanceIdentifierMutation(TransactionBuilder transaction,
+            InstanceIdentifier<?> iid, TableSchema<T> tableSchema,
+            ColumnSchema<T, Map<String,String>> columnSchema) {
         Map<String,String> externalIdsMap = ImmutableMap.of(SouthboundConstants.IID_EXTERNAL_ID_KEY,
                 SouthboundUtil.serializeInstanceIdentifier(iid));
         Mutate<T> mutate = op.mutate(tableSchema)
@@ -183,6 +190,6 @@ public class TransactUtils {
         List<Mutation> mutations = Lists.newArrayList(Sets.newHashSet(deleteIidMutation));
         mutations.addAll(mutate.getMutations());
         mutate.setMutations(mutations);
-        transaction.add(mutate);
+        return mutate;
     }
 }
index 395757edb0264127089534d752443accf8e74d3b..a02c5c44cf604876fa686a8cbcd0d9632b0fd389 100644 (file)
@@ -49,6 +49,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
@@ -89,8 +90,7 @@ public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand {
             transaction.merge(LogicalDatastoreType.OPERATIONAL, connectionIId, connectionNode);
 
             // Update the bridge node with whatever data we are getting
-            InstanceIdentifier<Node> bridgeIid =
-                    SouthboundMapper.createInstanceIdentifier(getOvsdbConnectionInstance(),bridge);
+            InstanceIdentifier<Node> bridgeIid = getInstanceIdentifier(bridge);
             Node bridgeNode = buildBridgeNode(bridge);
             transaction.merge(LogicalDatastoreType.OPERATIONAL, bridgeIid, bridgeNode);
             deleteEntries(transaction, protocolEntriesToRemove(bridgeIid,bridge));
@@ -219,9 +219,7 @@ public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand {
 
     private Node buildBridgeNode(Bridge bridge) {
         NodeBuilder bridgeNodeBuilder = new NodeBuilder();
-        InstanceIdentifier<Node> bridgeIid =
-                SouthboundMapper.createInstanceIdentifier(getOvsdbConnectionInstance(),bridge);
-        NodeId bridgeNodeId = SouthboundMapper.createManagedNodeId(bridgeIid);
+        NodeId bridgeNodeId = getNodeId(bridge);
         bridgeNodeBuilder.setNodeId(bridgeNodeId);
         OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = new OvsdbBridgeAugmentationBuilder();
         ovsdbBridgeAugmentationBuilder.setBridgeName(new OvsdbBridgeName(bridge.getName()));
@@ -366,4 +364,13 @@ public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand {
             }
         }
     }
+    private InstanceIdentifier<Node> getInstanceIdentifier(Bridge bridge) {
+        return SouthboundMapper.createInstanceIdentifier(getOvsdbConnectionInstance(),
+                bridge);
+    }
+
+    private NodeId getNodeId(Bridge bridge) {
+        NodeKey nodeKey = getInstanceIdentifier(bridge).firstKeyOf(Node.class, NodeKey.class);
+        return nodeKey.getNodeId();
+    }
 }
index 408c677064f39cb22f839a8f524845fa6536fb40..7d99c90e545363adc9c8de4ffa073d3defcaf103 100644 (file)
@@ -35,7 +35,6 @@ import org.opendaylight.ovsdb.southbound.SouthboundMapper;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
 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.OvsdbBridgeName;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbPortInterfaceAttributes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
@@ -103,13 +102,12 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand {
         for (Entry<UUID, Port> portUpdate : portUpdatedRows.entrySet()) {
             String portName = null;
             portName = portUpdate.getValue().getNameColumn().getData();
-            Optional<String> bridgeName = getTerminationPointBridge(portUpdate.getKey());
-            if (!bridgeName.isPresent()) {
-                bridgeName = getTerminationPointBridge( transaction, node, portName);
+            Optional<InstanceIdentifier<Node>> bridgeIid = getTerminationPointBridge(portUpdate.getKey());
+            if (!bridgeIid.isPresent()) {
+                bridgeIid = getTerminationPointBridge( transaction, node, portName);
             }
-            if (bridgeName.isPresent()) {
-                NodeId bridgeId = SouthboundMapper.createManagedNodeId(
-                        getOvsdbConnectionInstance(), new OvsdbBridgeName(bridgeName.get()));
+            if (bridgeIid.isPresent()) {
+                NodeId bridgeId = SouthboundMapper.createManagedNodeId(bridgeIid.get());
                 TerminationPointKey tpKey = new TerminationPointKey(new TpId(portName));
                 InstanceIdentifier<TerminationPoint> tpPath = InstanceIdentifier
                         .create(NetworkTopology.class)
@@ -121,11 +119,11 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand {
                 tpBuilder.setTpId(tpKey.getTpId());
                 OvsdbTerminationPointAugmentationBuilder tpAugmentationBuilder =
                         new OvsdbTerminationPointAugmentationBuilder();
-                buildTerminationPoint(tpAugmentationBuilder,portUpdate.getValue(),bridgeName.get());
+                buildTerminationPoint(tpAugmentationBuilder,portUpdate.getValue());
                 UUID interfaceUUID = (UUID)portUpdate.getValue().getInterfacesColumn().getData().toArray()[0];
                 if (interfaceUpdatedRows.containsKey(interfaceUUID)) {
                     buildTerminationPoint(tpAugmentationBuilder,
-                            interfaceUpdatedRows.get(interfaceUUID), bridgeName.get());
+                            interfaceUpdatedRows.get(interfaceUUID));
                     interfaceUpdatedRows.remove(interfaceUUID);
                     interfaceOldRows.remove(interfaceUUID);
                 }
@@ -142,10 +140,9 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand {
         for (Entry<UUID, Interface> interfaceUpdate : interfaceUpdatedRows.entrySet()) {
             String interfaceName = null;
             interfaceName = interfaceUpdatedRows.get(interfaceUpdate.getKey()).getNameColumn().getData();
-            Optional<String> bridgeName = getTerminationPointBridge( transaction, node, interfaceName);
-            if (bridgeName.isPresent()) {
-                NodeId bridgeId = SouthboundMapper.createManagedNodeId(
-                        getOvsdbConnectionInstance(), new OvsdbBridgeName(bridgeName.get()));
+            Optional<InstanceIdentifier<Node>> bridgeIid = getTerminationPointBridge( transaction, node, interfaceName);
+            if (bridgeIid.isPresent()) {
+                NodeId bridgeId = SouthboundMapper.createManagedNodeId(bridgeIid.get());
                 TerminationPointKey tpKey = new TerminationPointKey(new TpId(interfaceName));
                 InstanceIdentifier<TerminationPoint> tpPath = InstanceIdentifier
                         .create(NetworkTopology.class)
@@ -157,7 +154,7 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand {
                 tpBuilder.setTpId(tpKey.getTpId());
                 OvsdbTerminationPointAugmentationBuilder tpAugmentationBuilder =
                         new OvsdbTerminationPointAugmentationBuilder();
-                buildTerminationPoint(tpAugmentationBuilder, interfaceUpdate.getValue(),bridgeName.get());
+                buildTerminationPoint(tpAugmentationBuilder, interfaceUpdate.getValue());
                 tpBuilder.addAugmentation(OvsdbTerminationPointAugmentation.class, tpAugmentationBuilder.build());
                 transaction.merge(LogicalDatastoreType.OPERATIONAL,
                         tpPath, tpBuilder.build());
@@ -166,7 +163,7 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand {
 
     }
     private void buildTerminationPoint(OvsdbTerminationPointAugmentationBuilder tpAugmentationBuilder,
-            Port portUpdate, String bridgeName) {
+            Port portUpdate) {
 
         tpAugmentationBuilder
                 .setName(portUpdate.getName());
@@ -176,13 +173,13 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand {
     }
 
     private void buildTerminationPoint(OvsdbTerminationPointAugmentationBuilder tpAugmentationBuilder,
-            Interface interfaceUpdate, String bridgeName) {
+            Interface interfaceUpdate) {
 
         tpAugmentationBuilder
                 .setName(interfaceUpdate.getName());
         tpAugmentationBuilder.setInterfaceUuid(new Uuid(
                 interfaceUpdate.getUuid().toString()));
-        updateInterfaces(interfaceUpdate, bridgeName, tpAugmentationBuilder);
+        updateInterfaces(interfaceUpdate, tpAugmentationBuilder);
     }
 
     private Optional<Node> readNode(final ReadWriteTransaction transaction, final InstanceIdentifier<Node> nodePath) {
@@ -198,15 +195,16 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand {
         return node;
     }
 
-    private Optional<String> getTerminationPointBridge( UUID portUUID) {
+    private Optional<InstanceIdentifier<Node>> getTerminationPointBridge( UUID portUUID) {
         for (UUID bridgeUUID : this.bridgeUpdatedRows.keySet()) {
             if (this.bridgeUpdatedRows.get(bridgeUUID).getPortsColumn().getData().contains(portUUID)) {
-                return Optional.of(this.bridgeUpdatedRows.get(bridgeUUID).getNameColumn().getData());
+                return Optional.of(SouthboundMapper.createInstanceIdentifier(getOvsdbConnectionInstance(),
+                        this.bridgeUpdatedRows.get(bridgeUUID)));
             }
         }
         return Optional.absent();
     }
-    private Optional<String> getTerminationPointBridge(
+    private Optional<InstanceIdentifier<Node>> getTerminationPointBridge(
             final ReadWriteTransaction transaction, Node node, String tpName) {
         OvsdbNodeAugmentation ovsdbNode = node.getAugmentation(OvsdbNodeAugmentation.class);
         List<ManagedNodeEntry> managedNodes = ovsdbNode.getManagedNodeEntry();
@@ -220,18 +218,18 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand {
             if (managedNode.getTerminationPoint().contains(tpBuilder.build())) {
                 OvsdbBridgeAugmentation ovsdbNodeAugment
                     = managedNode.getAugmentation(OvsdbBridgeAugmentation.class);
-                return Optional.of(ovsdbNodeAugment.getBridgeName().getValue());
+                return Optional.of((InstanceIdentifier<Node>)managedNodeEntry.getBridgeRef().getValue());
             }
         }
         return Optional.absent();
     }
 
     private void updateInterfaces(Interface interfaceUpdate,
-            final String bridge, final OvsdbTerminationPointAugmentationBuilder ovsdbTerminationPointBuilder) {
+            final OvsdbTerminationPointAugmentationBuilder ovsdbTerminationPointBuilder) {
 
         Column<GenericTableSchema, String> typeColumn = interfaceUpdate.getTypeColumn();
         String type = typeColumn.getData();
-        updateInterface(interfaceUpdate, bridge, type, ovsdbTerminationPointBuilder);
+        updateInterface(interfaceUpdate, type,ovsdbTerminationPointBuilder);
     }
 
     private void updatePort(final Port port,
@@ -245,15 +243,15 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand {
     }
 
     private void updateInterface(final Interface interf,
-            final String bridge, final String type,
+            final String type,
             final OvsdbTerminationPointAugmentationBuilder ovsdbTerminationPointBuilder) {
 
         ovsdbTerminationPointBuilder.setInterfaceUuid(
                 new Uuid(interf.getUuid().toString()));
         ovsdbTerminationPointBuilder.setInterfaceType(
                 SouthboundMapper.createInterfaceType(type));
-        updateOfPort(interf, bridge, ovsdbTerminationPointBuilder);
-        updateOfPortRequest(interf, bridge, ovsdbTerminationPointBuilder);
+        updateOfPort(interf, ovsdbTerminationPointBuilder);
+        updateOfPortRequest(interf, ovsdbTerminationPointBuilder);
         updateInterfaceExternalIds(interf, ovsdbTerminationPointBuilder);
         updateOptions(interf, ovsdbTerminationPointBuilder);
         updateInterfaceOtherConfig(interf, ovsdbTerminationPointBuilder);
@@ -313,7 +311,6 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand {
     }
 
     private void updateOfPort(final Interface interf,
-            final String bridge,
             final OvsdbTerminationPointAugmentationBuilder ovsdbTerminationPointBuilder) {
 
         Set<Long> ofPorts = interf.getOpenFlowPortColumn().getData();
@@ -325,13 +322,12 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand {
                     .setOfport(ofPort);
             } else {
                 LOG.debug("Received negative value for ofPort from ovsdb for {} {} {}",
-                        bridge, interf.getName(),ofPort);
+                        interf.getName(),ofPort);
             }
         }
     }
 
     private void updateOfPortRequest(final Interface interf,
-            final String bridge,
             final OvsdbTerminationPointAugmentationBuilder ovsdbTerminationPointBuilder) {
 
         Set<Long> ofPortRequests = null;
@@ -348,7 +344,7 @@ public class OvsdbPortUpdateCommand extends AbstractTransactionCommand {
                     .setOfportRequest(ofPort);
             } else {
                 LOG.debug("Received negative value for ofPort from ovsdb for {} {} {}",
-                        bridge, interf.getName(),ofPort);
+                        interf.getName(),ofPort);
             }
         }
     }
index 84737406387748fc40c8634916949feae5e6ad9c..41d0b31d61160a108803f1863ce2bddc10cda500 100644 (file)
@@ -382,7 +382,7 @@ public class SouthboundIT extends AbstractMdsalTestBase {
                     LOG.info("Found a DPDK node; adding a corresponding netdev device");
                     InstanceIdentifier<Node> bridgeIid = createInstanceIdentifier(connectionInfo,
                             new OvsdbBridgeName(SouthboundITConstants.BRIDGE_NAME));
-                    NodeId bridgeNodeId = SouthboundMapper.createManagedNodeId(bridgeIid);
+                    NodeId bridgeNodeId = createManagedNodeId(bridgeIid);
                     addBridge(connectionInfo, bridgeIid, SouthboundITConstants.BRIDGE_NAME, bridgeNodeId, false, null,
                             true, dpType, null, null);
 
@@ -763,7 +763,7 @@ public class SouthboundIT extends AbstractMdsalTestBase {
         Assert.assertTrue(addBridge(connectionInfo, SouthboundITConstants.BRIDGE_NAME));
         OvsdbBridgeAugmentation bridge = getBridge(connectionInfo);
         Assert.assertNotNull(bridge);
-        NodeId nodeId = SouthboundMapper.createManagedNodeId(createInstanceIdentifier(
+        NodeId nodeId = createManagedNodeId(createInstanceIdentifier(
                 connectionInfo, bridge.getBridgeName()));
         OvsdbTerminationPointAugmentationBuilder ovsdbTerminationBuilder =
                 createGenericOvsdbTerminationPointAugmentationBuilder();
@@ -1025,7 +1025,7 @@ public class SouthboundIT extends AbstractMdsalTestBase {
                 Assert.assertTrue(addBridge(connectionInfo, null,
                         testBridgeName, null, true, SouthboundConstants.OVSDB_FAIL_MODE_MAP.inverse().get("secure"),
                         true, null, null, null));
-                testBridgeNodeId = SouthboundMapper.createManagedNodeId(createInstanceIdentifier(
+                testBridgeNodeId = createManagedNodeId(createInstanceIdentifier(
                         connectionInfo, new OvsdbBridgeName(testBridgeName)));
                 tpCreateAugmentationBuilder = createGenericOvsdbTerminationPointAugmentationBuilder();
                 tpCreateAugmentationBuilder.setName(testPortName);
@@ -1053,7 +1053,7 @@ public class SouthboundIT extends AbstractMdsalTestBase {
                 tpUpdateAugmentationBuilder.setPortExternalIds(updateToInputExternalIds);
                 portIid = SouthboundMapper.createInstanceIdentifier(testBridgeNodeId);
                 portUpdateNodeBuilder = new NodeBuilder();
-                portUpdateNodeId = SouthboundMapper.createManagedNodeId(portIid);
+                portUpdateNodeId = createManagedNodeId(portIid);
                 portUpdateNodeBuilder.setNodeId(portUpdateNodeId);
                 tpUpdateBuilder = new TerminationPointBuilder();
                 tpUpdateBuilder.setKey(new TerminationPointKey(new TpId(testPortName)));
@@ -1317,7 +1317,7 @@ public class SouthboundIT extends AbstractMdsalTestBase {
                 Assert.assertTrue(addBridge(connectionInfo, null,
                         testBridgeName, null, true, SouthboundConstants.OVSDB_FAIL_MODE_MAP.inverse().get("secure"),
                         true, null, null, null));
-                testBridgeNodeId = SouthboundMapper.createManagedNodeId(createInstanceIdentifier(
+                testBridgeNodeId = createManagedNodeId(createInstanceIdentifier(
                         connectionInfo, new OvsdbBridgeName(testBridgeName)));
                 tpCreateAugmentationBuilder = createGenericOvsdbTerminationPointAugmentationBuilder();
                 tpCreateAugmentationBuilder.setName(testPortName);
@@ -1347,7 +1347,7 @@ public class SouthboundIT extends AbstractMdsalTestBase {
                 tpUpdateAugmentationBuilder.setInterfaceExternalIds(updateToInputExternalIds);
                 portIid = SouthboundMapper.createInstanceIdentifier(testBridgeNodeId);
                 portUpdateNodeBuilder = new NodeBuilder();
-                portUpdateNodeId = SouthboundMapper.createManagedNodeId(portIid);
+                portUpdateNodeId = createManagedNodeId(portIid);
                 portUpdateNodeBuilder.setNodeId(portUpdateNodeId);
                 tpUpdateBuilder = new TerminationPointBuilder();
                 tpUpdateBuilder.setKey(new TerminationPointKey(new TpId(testPortName)));
@@ -1615,7 +1615,7 @@ public class SouthboundIT extends AbstractMdsalTestBase {
                 Assert.assertTrue(addBridge(connectionInfo, null,
                         testBridgeName, null, true, SouthboundConstants.OVSDB_FAIL_MODE_MAP.inverse().get("secure"),
                         true, null, null, null));
-                testBridgeNodeId = SouthboundMapper.createManagedNodeId(createInstanceIdentifier(
+                testBridgeNodeId = createManagedNodeId(createInstanceIdentifier(
                         connectionInfo, new OvsdbBridgeName(testBridgeName)));
                 tpCreateAugmentationBuilder = createGenericOvsdbTerminationPointAugmentationBuilder();
                 tpCreateAugmentationBuilder.setName(testPortName);
@@ -1645,7 +1645,7 @@ public class SouthboundIT extends AbstractMdsalTestBase {
                 tpUpdateAugmentationBuilder.setOptions(updateToInputOptions);
                 portIid = SouthboundMapper.createInstanceIdentifier(testBridgeNodeId);
                 portUpdateNodeBuilder = new NodeBuilder();
-                portUpdateNodeId = SouthboundMapper.createManagedNodeId(portIid);
+                portUpdateNodeId = createManagedNodeId(portIid);
                 portUpdateNodeBuilder.setNodeId(portUpdateNodeId);
                 tpUpdateBuilder = new TerminationPointBuilder();
                 tpUpdateBuilder.setKey(new TerminationPointKey(new TpId(testPortName)));
@@ -1912,7 +1912,7 @@ public class SouthboundIT extends AbstractMdsalTestBase {
                 Assert.assertTrue(addBridge(connectionInfo, null,
                         testBridgeName, null, true, SouthboundConstants.OVSDB_FAIL_MODE_MAP.inverse().get("secure"),
                         true, null, null, null));
-                testBridgeNodeId = SouthboundMapper.createManagedNodeId(createInstanceIdentifier(
+                testBridgeNodeId = createManagedNodeId(createInstanceIdentifier(
                         connectionInfo, new OvsdbBridgeName(testBridgeName)));
                 tpCreateAugmentationBuilder = createGenericOvsdbTerminationPointAugmentationBuilder();
                 tpCreateAugmentationBuilder.setName(testPortName);
@@ -1950,7 +1950,7 @@ public class SouthboundIT extends AbstractMdsalTestBase {
                 tpUpdateAugmentationBuilder.setInterfaceOtherConfigs(updateToInputOtherConfigs);
                 portIid = SouthboundMapper.createInstanceIdentifier(testBridgeNodeId);
                 portUpdateNodeBuilder = new NodeBuilder();
-                portUpdateNodeId = SouthboundMapper.createManagedNodeId(portIid);
+                portUpdateNodeId = createManagedNodeId(portIid);
                 portUpdateNodeBuilder.setNodeId(portUpdateNodeId);
                 tpUpdateBuilder = new TerminationPointBuilder();
                 tpUpdateBuilder.setKey(new TerminationPointKey(new TpId(testPortName)));
@@ -2221,7 +2221,7 @@ public class SouthboundIT extends AbstractMdsalTestBase {
                 Assert.assertTrue(addBridge(connectionInfo, null,
                         testBridgeName, null, true, SouthboundConstants.OVSDB_FAIL_MODE_MAP.inverse().get("secure"),
                         true, null, null, null));
-                testBridgeNodeId = SouthboundMapper.createManagedNodeId(createInstanceIdentifier(
+                testBridgeNodeId = createManagedNodeId(createInstanceIdentifier(
                         connectionInfo, new OvsdbBridgeName(testBridgeName)));
                 tpCreateAugmentationBuilder = createGenericOvsdbTerminationPointAugmentationBuilder();
                 tpCreateAugmentationBuilder.setName(testPortName);
@@ -2259,7 +2259,7 @@ public class SouthboundIT extends AbstractMdsalTestBase {
                 tpUpdateAugmentationBuilder.setPortOtherConfigs(updateToInputOtherConfigs);
                 portIid = SouthboundMapper.createInstanceIdentifier(testBridgeNodeId);
                 portUpdateNodeBuilder = new NodeBuilder();
-                portUpdateNodeId = SouthboundMapper.createManagedNodeId(portIid);
+                portUpdateNodeId = createManagedNodeId(portIid);
                 portUpdateNodeBuilder.setNodeId(portUpdateNodeId);
                 tpUpdateBuilder = new TerminationPointBuilder();
                 tpUpdateBuilder.setKey(new TerminationPointKey(new TpId(testPortName)));
@@ -2314,7 +2314,7 @@ public class SouthboundIT extends AbstractMdsalTestBase {
         Assert.assertTrue(addBridge(connectionInfo, SouthboundITConstants.BRIDGE_NAME));
         OvsdbBridgeAugmentation bridge = getBridge(connectionInfo, SouthboundITConstants.BRIDGE_NAME);
         Assert.assertNotNull(bridge);
-        NodeId nodeId = SouthboundMapper.createManagedNodeId(createInstanceIdentifier(
+        NodeId nodeId = createManagedNodeId(createInstanceIdentifier(
                 connectionInfo, bridge.getBridgeName()));
         OvsdbTerminationPointAugmentationBuilder ovsdbTerminationBuilder =
                 createGenericOvsdbTerminationPointAugmentationBuilder();
@@ -2347,7 +2347,7 @@ public class SouthboundIT extends AbstractMdsalTestBase {
         tpUpdateAugmentationBuilder.setVlanTag(new VlanId(UPDATED_VLAN_ID));
         InstanceIdentifier<Node> portIid = SouthboundMapper.createInstanceIdentifier(testBridgeNodeId);
         NodeBuilder portUpdateNodeBuilder = new NodeBuilder();
-        NodeId portUpdateNodeId = SouthboundMapper.createManagedNodeId(portIid);
+        NodeId portUpdateNodeId = createManagedNodeId(portIid);
         portUpdateNodeBuilder.setNodeId(portUpdateNodeId);
         TerminationPointBuilder tpUpdateBuilder = new TerminationPointBuilder();
         tpUpdateBuilder.setKey(new TerminationPointKey(new TpId(portName)));
@@ -2390,7 +2390,7 @@ public class SouthboundIT extends AbstractMdsalTestBase {
             Assert.assertTrue(addBridge(connectionInfo, SouthboundITConstants.BRIDGE_NAME));
             OvsdbBridgeAugmentation bridge = getBridge(connectionInfo);
             Assert.assertNotNull(bridge);
-            NodeId nodeId = SouthboundMapper.createManagedNodeId(createInstanceIdentifier(
+            NodeId nodeId = createManagedNodeId(createInstanceIdentifier(
                     connectionInfo, bridge.getBridgeName()));
             OvsdbTerminationPointAugmentationBuilder ovsdbTerminationBuilder =
                     createGenericOvsdbTerminationPointAugmentationBuilder();
@@ -2420,7 +2420,7 @@ public class SouthboundIT extends AbstractMdsalTestBase {
             tpUpdateAugmentationBuilder.setVlanMode(UPDATED_VLAN_MODE);
             InstanceIdentifier<Node> portIid = SouthboundMapper.createInstanceIdentifier(testBridgeNodeId);
             NodeBuilder portUpdateNodeBuilder = new NodeBuilder();
-            NodeId portUpdateNodeId = SouthboundMapper.createManagedNodeId(portIid);
+            NodeId portUpdateNodeId = createManagedNodeId(portIid);
             portUpdateNodeBuilder.setNodeId(portUpdateNodeId);
             TerminationPointBuilder tpUpdateBuilder = new TerminationPointBuilder();
             tpUpdateBuilder.setKey(new TerminationPointKey(new TpId(portName)));
@@ -2501,7 +2501,7 @@ public class SouthboundIT extends AbstractMdsalTestBase {
             Assert.assertTrue(addBridge(connectionInfo, SouthboundITConstants.BRIDGE_NAME));
             OvsdbBridgeAugmentation bridge = getBridge(connectionInfo);
             Assert.assertNotNull(bridge);
-            NodeId nodeId = SouthboundMapper.createManagedNodeId(createInstanceIdentifier(
+            NodeId nodeId = createManagedNodeId(createInstanceIdentifier(
                     connectionInfo, bridge.getBridgeName()));
             OvsdbTerminationPointAugmentationBuilder ovsdbTerminationBuilder =
                     createGenericOvsdbTerminationPointAugmentationBuilder();
@@ -2535,7 +2535,7 @@ public class SouthboundIT extends AbstractMdsalTestBase {
             tpUpdateAugmentationBuilder.setTrunks(UPDATED_TRUNKS);
             InstanceIdentifier<Node> portIid = SouthboundMapper.createInstanceIdentifier(testBridgeNodeId);
             NodeBuilder portUpdateNodeBuilder = new NodeBuilder();
-            NodeId portUpdateNodeId = SouthboundMapper.createManagedNodeId(portIid);
+            NodeId portUpdateNodeId = createManagedNodeId(portIid);
             portUpdateNodeBuilder.setNodeId(portUpdateNodeId);
             TerminationPointBuilder tpUpdateBuilder = new TerminationPointBuilder();
             tpUpdateBuilder.setKey(new TerminationPointKey(new TpId(portName)));
@@ -3126,5 +3126,10 @@ public class SouthboundIT extends AbstractMdsalTestBase {
         ovsdbNodeBuilder.setConnectionInfo(key);
         return ovsdbNodeBuilder.build();
     }
+
+    public static NodeId createManagedNodeId(InstanceIdentifier<Node> iid) {
+        NodeKey nodeKey = iid.firstKeyOf(Node.class, NodeKey.class);
+        return nodeKey.getNodeId();
+    }
 }