- ConnectionInfo key = ovsdbNode.getConnectionInfo();
- InstanceIdentifier<Node> iid = cm.getInstanceIdentifier(key);
- try {
- LOG.info("Disconnecting from {}", ovsdbNode);
- cm.disconnect(ovsdbNode);
- cm.stopConnectionReconciliationIfActive(iid.firstIdentifierOf(Node.class), ovsdbNode);
- } catch (UnknownHostException e) {
- LOG.warn("Failed to disconnect ovsdbNode", e);
+ if (ovsdbNode != null) {
+ ConnectionInfo key = ovsdbNode.getConnectionInfo();
+ InstanceIdentifier<Node> iid = cm.getInstanceIdentifier(key);
+ try {
+ cm.disconnect(ovsdbNode);
+ LOG.info("OVSDB node has been disconnected:{}", ovsdbNode);
+ cm.stopConnectionReconciliationIfActive(iid.firstIdentifierOf(Node.class), ovsdbNode);
+ } catch (UnknownHostException e) {
+ LOG.warn("Failed to disconnect ovsdbNode", e);
+ }
+ }
+ }
+ }
+
+ if (change.getRootNode().getModificationType() == DataObjectModification.ModificationType.WRITE) {
+ DataObjectModification<OvsdbNodeAugmentation> ovsdbNodeModification =
+ change.getRootNode().getModifiedAugmentation(OvsdbNodeAugmentation.class);
+ if (ovsdbNodeModification != null) {
+ DataObjectModification<ConnectionInfo> connectionInfoDOM =
+ ovsdbNodeModification.getModifiedChildContainer(ConnectionInfo.class);
+ if (connectionInfoDOM != null) {
+ if (connectionInfoDOM.getModificationType() == DataObjectModification.ModificationType.DELETE) {
+ ConnectionInfo key = connectionInfoDOM.getDataBefore();
+ if (key != null) {
+ InstanceIdentifier<Node> iid = cm.getInstanceIdentifier(key);
+ try {
+ OvsdbNodeAugmentation ovsdbNode = ovsdbNodeModification.getDataBefore();
+ cm.disconnect(ovsdbNode);
+ LOG.warn("OVSDB node {} has been disconnected, because connection-info related to "
+ + "the node is removed by user, but node still exist.", ovsdbNode);
+ cm.stopConnectionReconciliationIfActive(iid.firstIdentifierOf(Node.class),
+ ovsdbNode);
+ } catch (UnknownHostException e) {
+ LOG.warn("Failed to disconnect ovsdbNode", e);
+ }
+ }
+ }