package org.opendaylight.ovsdb.openstack.netvirt.impl;
+import java.net.UnknownHostException;
import java.util.Map;
import java.util.Set;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
-import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.ovsdb.lib.OvsdbClient;
import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbInventoryListener;
import org.opendaylight.ovsdb.southbound.SouthboundConstants;
+import org.opendaylight.ovsdb.southbound.SouthboundMapper;
+import org.opendaylight.ovsdb.southbound.ovsdb.transact.TransactUtils;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
+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.ovsdb.node.attributes.ConnectionInfo;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
import org.slf4j.LoggerFactory;
/**
- * Integration tests for southbound-impl
+ * MDSAL dataChangeListener for the OVSDB Southbound
*
* @author Sam Hague (shague@redhat.com)
*/
public class OvsdbDataChangeListener implements DataChangeListener, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(OvsdbDataChangeListener.class);
private DataBroker dataBroker = null;
- private static final TopologyId OVSDB_TOPOLOGY_ID = new TopologyId(new Uri("ovsdb:1"));
private ListenerRegistration<DataChangeListener> registration;
public OvsdbDataChangeListener (DataBroker dataBroker) {
.child(Node.class);
registration =
dataBroker.registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, path, this,
- AsyncDataBroker.DataChangeScope.SUBTREE);
+ DataChangeScope.SUBTREE);
}
@Override
@Override
public void onDataChanged(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
- for (Map.Entry<InstanceIdentifier<?>, DataObject> created : changes.getCreatedData().entrySet()) {
- if (created.getValue() instanceof Node) {
+ LOG.trace("onDataChanged: {}", changes);
+
+ updateConnections(changes);
+ }
+
+ private Node getOvsdbNode(ConnectionInfo connectionInfo) {
+ Node node = MdsalUtils.read(LogicalDatastoreType.OPERATIONAL,
+ SouthboundMapper.createInstanceIdentifier(connectionInfo));
+ return node;
+ }
+
+ public static <T extends DataObject> Map<InstanceIdentifier<T>,T> extractCreated(
+ AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes,Class<T> klazz) {
+ return TransactUtils.extractCreated(changes, klazz);
+ }
+ private void updateConnections(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
+ for (Map.Entry<InstanceIdentifier<?>, DataObject> created : changes.getCreatedData().entrySet()) {
+ // TODO validate we have the correct kind of InstanceIdentifier
+ if (created.getValue() instanceof OvsdbNodeAugmentation) {
+ Map<InstanceIdentifier<Node>,Node> nodeMap = TransactUtils.extractCreated(changes, Node.class);
+ for (Map.Entry<InstanceIdentifier<Node>, Node> ovsdbNode: nodeMap.entrySet()) {
+ notifyNodeAdded(ovsdbNode.getValue());
+ }
}
}
}