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.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
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.network.topology.Topology;
.child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
.child(Node.class)
.augmentation(OvsdbNodeAugmentation.class);
- registration = db.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, path, this, DataChangeScope.ONE);
+ registration =
+ db.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, path, this, DataChangeScope.ONE);
}
@Override
public void onDataChanged(
AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
- LOG.info("Received change to ovsdbNode: {}", changes);
- for( Entry<InstanceIdentifier<?>, DataObject> created : changes.getCreatedData().entrySet()) {
- // TODO validate we have the correct kind of InstanceIdentifier
- if(created.getValue() instanceof OvsdbNodeAugmentation) {
- try {
- cm.connect((OvsdbNodeAugmentation)created.getValue());
- } catch (UnknownHostException e) {
- LOG.warn("Failed to connect to ovsdbNode", e);
+ LOG.info("Received change to ovsdbNode: {}", changes);
+ for (Entry<InstanceIdentifier<?>, DataObject> created : changes.getCreatedData().entrySet()) {
+ // TODO validate we have the correct kind of InstanceIdentifier
+ if (created.getValue() instanceof OvsdbNodeAugmentation) {
+ try {
+ cm.connect((OvsdbNodeAugmentation) created.getValue());
+ } catch (UnknownHostException e) {
+ LOG.warn("Failed to connect to ovsdbNode", e);
+ }
}
- }
- }
- // TODO handle case of updates to ovsdb nodes as needed
+ }
Map<InstanceIdentifier<?>, DataObject> originalDataObject = changes.getOriginalData();
Set<InstanceIdentifier<?>> iID = changes.getRemovedPaths();
for (InstanceIdentifier instanceIdentifier : iID) {
if (originalDataObject.get(instanceIdentifier) instanceof OvsdbNodeAugmentation) {
try {
- cm.disconnect((OvsdbNodeAugmentation)originalDataObject.get(instanceIdentifier));
+ cm.disconnect((OvsdbNodeAugmentation) originalDataObject.get(instanceIdentifier));
} catch (UnknownHostException e) {
LOG.warn("Failed to disconnect ovsdbNode", e);
}
}
}
+
+ for (Entry<InstanceIdentifier<?>, DataObject> updated : changes.getUpdatedData().entrySet()) {
+ if (updated.getValue() instanceof OvsdbNodeAugmentation) {
+ OvsdbNodeAugmentation value = (OvsdbNodeAugmentation) updated.getValue();
+ OvsdbClient client = cm.getClient(value);
+ if (client == null) {
+ for (Entry<InstanceIdentifier<?>, DataObject> original : changes.getOriginalData().entrySet()) {
+ if (original.getValue() instanceof OvsdbNodeAugmentation) {
+ try {
+ cm.disconnect((OvsdbNodeAugmentation) original.getValue());
+ cm.connect(value);
+ } catch (UnknownHostException e) {
+ LOG.warn("Failed to disconnect to ovsdbNode", e);
+ }
+ }
+ }
+ }
+ }
+ }
}
@Override