From da34f09bacb70791529fb77b240f6f8c8ef09518 Mon Sep 17 00:00:00 2001 From: Anil Vishnoi Date: Fri, 8 May 2015 18:33:15 +0530 Subject: [PATCH] Fixed few things: ** Added support for deleting bridge from config data store to keep configuration sane *.* Fixed bridge creation (it was not creating integration bridge when second compute node connects Change-Id: I4233886f875b188f7d5d7e68fe8e0076b4365d82 Signed-off-by: Anil Vishnoi --- .../ovsdb/openstack/netvirt/MdsalUtils.java | 19 ++++++++---- .../openstack/netvirt/SouthboundEvent.java | 18 +++++++++++ .../openstack/netvirt/SouthboundHandler.java | 30 ++++++++++++++++--- 3 files changed, 57 insertions(+), 10 deletions(-) diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/MdsalUtils.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/MdsalUtils.java index 721eee403..be6f5ae01 100644 --- a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/MdsalUtils.java +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/MdsalUtils.java @@ -210,7 +210,7 @@ public class MdsalUtils { throws InterruptedException, InvalidParameterException { boolean result = false; - LOG.info("addBridge: node: {}, bridgeName: {}, target: {}", ovsdbNode, bridgeName, target); + LOG.info("Add Bridge: node: {}, bridgeName: {}, target: {}", ovsdbNode, bridgeName, target); ConnectionInfo connectionInfo = getConnectionInfo(ovsdbNode); if (connectionInfo != null) { NodeBuilder bridgeNodeBuilder = new NodeBuilder(); @@ -219,7 +219,7 @@ public class MdsalUtils { NodeId bridgeNodeId = SouthboundMapper.createManagedNodeId(bridgeIid); bridgeNodeBuilder.setNodeId(bridgeNodeId); OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = new OvsdbBridgeAugmentationBuilder(); - //ovsdbBridgeAugmentationBuilder.setControllerEntry(setControllerEntries(target)); + ovsdbBridgeAugmentationBuilder.setControllerEntry(createControllerEntries(target)); ovsdbBridgeAugmentationBuilder.setBridgeName(new OvsdbBridgeName(bridgeName)); ovsdbBridgeAugmentationBuilder.setProtocolEntry(createMdsalProtocols()); ovsdbBridgeAugmentationBuilder.setFailMode( @@ -227,17 +227,24 @@ public class MdsalUtils { setManagedByForBridge(ovsdbBridgeAugmentationBuilder, connectionInfo); bridgeNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class, ovsdbBridgeAugmentationBuilder.build()); - result = merge(LogicalDatastoreType.CONFIGURATION, bridgeIid, bridgeNodeBuilder.build()); + result = put(LogicalDatastoreType.CONFIGURATION, bridgeIid, bridgeNodeBuilder.build()); LOG.info("addBridge: result: {}", result); - Thread.sleep(OVSDB_UPDATE_TIMEOUT); - setControllerForBridge(ovsdbNode, bridgeName, target); - Thread.sleep(OVSDB_UPDATE_TIMEOUT); } else { throw new InvalidParameterException("Could not find ConnectionInfo"); } return result; } + public static boolean deleteBridge(Node ovsdbNode) { + boolean result = false; + InstanceIdentifier bridgeIid = + SouthboundMapper.createInstanceIdentifier(ovsdbNode.getNodeId()); + + result = delete(LogicalDatastoreType.CONFIGURATION, bridgeIid); + LOG.info("Delete bridge node: {}, bridgeName: {} result : {}", ovsdbNode, ovsdbNode.getNodeId(),result); + return result; + } + public static OvsdbBridgeAugmentation readBridge(Node node, String name) { OvsdbBridgeAugmentation ovsdbBridgeAugmentation = null; ConnectionInfo connectionInfo = getConnectionInfo(node); diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/SouthboundEvent.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/SouthboundEvent.java index 122d870e8..afcbb8e6c 100644 --- a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/SouthboundEvent.java +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/SouthboundEvent.java @@ -13,6 +13,7 @@ import org.opendaylight.ovsdb.openstack.netvirt.api.Action; 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.OvsdbTerminationPointAugmentation; 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; public class SouthboundEvent extends AbstractEvent { public enum Type { NODE, OPENVSWITCH, BRIDGE, CONTROLLER, PORT } @@ -21,6 +22,7 @@ public class SouthboundEvent extends AbstractEvent { private String tableName; private String uuid; private Object context; + private DataObject augmentationData; private OvsdbBridgeAugmentation bridge; private OvsdbTerminationPointAugmentation port; private String portName; @@ -42,12 +44,21 @@ public class SouthboundEvent extends AbstractEvent { this.port = port; this.portName = portName; } + public SouthboundEvent(Node node, Type type, Action action) { super(HandlerType.SOUTHBOUND, action); this.type = type; this.node = node; } + public SouthboundEvent(Node node, DataObject resourceAugmentationData, Type type, Action action) { + super(HandlerType.SOUTHBOUND, action); + this.type = type; + this.node = node; + this.augmentationData = resourceAugmentationData; + } + + public Type getType() { return type; } @@ -72,11 +83,17 @@ public class SouthboundEvent extends AbstractEvent { public String getPortName() { return portName; } + + public DataObject getAugmentationData() { + return augmentationData; + } + @Override public String toString() { //if (type == Type.NODE) { return "SouthboundEvent [type=" + type + ", action=" + super.getAction() + + ",augmentationData="+augmentationData + ", node=" + node + "]"; //} else { // return "SouthboundEvent [type=" + type + "]"; @@ -91,6 +108,7 @@ public class SouthboundEvent extends AbstractEvent { result = prime * result + ((tableName == null) ? 0 : tableName.hashCode()); result = prime * result + ((type == null) ? 0 : type.hashCode()); result = prime * result + ((uuid == null) ? 0 : uuid.hashCode()); + result = prime * result + ((augmentationData == null) ? 0 : augmentationData.hashCode()); return result; } @Override diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/SouthboundHandler.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/SouthboundHandler.java index 3d99e013d..db89f5905 100644 --- a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/SouthboundHandler.java +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/SouthboundHandler.java @@ -9,15 +9,18 @@ package org.opendaylight.ovsdb.openstack.netvirt; import java.util.List; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.neutron.spi.NeutronNetwork; import org.opendaylight.ovsdb.openstack.netvirt.api.*; import org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter; import org.opendaylight.ovsdb.southbound.SouthboundMapper; 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; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation; 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.node.TerminationPoint; import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -76,18 +79,36 @@ public class SouthboundHandler extends AbstractHandler @Override public void ovsdbUpdate(Node node, DataObject resourceAugmentationData, OvsdbType ovsdbType, Action action) { logger.info("ovsdbUpdate: {} - {} - {}", node, ovsdbType, action); - this.enqueueEvent(new SouthboundEvent(node, ovsdbTypeToSouthboundEventType(ovsdbType), action)); + this.enqueueEvent(new SouthboundEvent(node, resourceAugmentationData, ovsdbTypeToSouthboundEventType(ovsdbType), action)); } public void processOvsdbNodeUpdate(Node node, Action action) { - if (action == Action.ADD) { + switch (action) { + case ADD: logger.info("processOvsdbNodeUpdate {}", node); bridgeConfigurationManager.prepareNode(node); + break; + case UPDATE: + break; + case DELETE: + processNodeDelete(node); + break; + } + if (action == Action.ADD) { } else { logger.info("Not implemented yet: {}", action); } } + private void processNodeDelete(Node node) { + OvsdbNodeAugmentation nodeAugmentation = node.getAugmentation(OvsdbNodeAugmentation.class); + if(nodeAugmentation != null){ + InstanceIdentifier bridgeNodeIid = + MdsalHelper.createInstanceIdentifier(nodeAugmentation.getConnectionInfo(), Constants.INTEGRATION_BRIDGE); + MdsalUtils.delete(LogicalDatastoreType.CONFIGURATION, bridgeNodeIid); + } + } + private void handleInterfaceUpdate (Node node, OvsdbTerminationPointAugmentation tp) { logger.trace("handleInterfaceUpdate node: {}, tp: {}", node, tp); NeutronNetwork network = tenantNetworkManager.getTenantNetwork(tp); @@ -320,8 +341,9 @@ public class SouthboundHandler extends AbstractHandler } } - private void processBridgeDelete(Node node, OvsdbBridgeAugmentation bridge) { - logger.debug("processBridgeUpdate {}, {}", node, bridge); + private void processBridgeDelete(Node bridgeNode, OvsdbBridgeAugmentation bridge) { + logger.debug("Delete bridge from config data store : {}", bridgeNode.getNodeId()); + MdsalUtils.deleteBridge(bridgeNode); } private void processBridgeUpdate(Node node, OvsdbBridgeAugmentation bridge) { -- 2.36.6