/** * Detect modifications of OVSDB termination points in the given node. * * @param mod Modification of node subtree. */ private void scanTerminationPoints( @Nonnull DataObjectModification<Node> mod) { for (DataObjectModification<?> child: mod.getModifiedChildren()) { Class<?> type = child.getDataType(); if (TerminationPoint.class.equals(type)) { @SuppressWarnings("unchecked") DataObjectModification<TerminationPoint> tmod = (DataObjectModification<TerminationPoint>)child; DataObjectModification<OvsdbTerminationPointAugmentation> omod = tmod.getModifiedAugmentation( OvsdbTerminationPointAugmentation.class); if (omod != null) { setModifiedTerminationPoint(omod); } } } }
private void disconnect(@Nonnull Collection<DataTreeModification<Node>> changes) { for (DataTreeModification<Node> change : changes) { if (change.getRootNode().getModificationType() == DataObjectModification.ModificationType.DELETE) { DataObjectModification<OvsdbNodeAugmentation> ovsdbNodeModification = change.getRootNode().getModifiedAugmentation(OvsdbNodeAugmentation.class); if (ovsdbNodeModification != null && ovsdbNodeModification.getDataBefore() != null) { OvsdbNodeAugmentation ovsdbNode = ovsdbNodeModification.getDataBefore(); 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); } } } } }
private void connect(@Nonnull Collection<DataTreeModification<Node>> changes) { for (DataTreeModification<Node> change : changes) { if (change.getRootNode().getModificationType() == DataObjectModification.ModificationType.WRITE || change .getRootNode().getModificationType() == DataObjectModification.ModificationType.SUBTREE_MODIFIED) { DataObjectModification<OvsdbNodeAugmentation> ovsdbNodeModification = change.getRootNode().getModifiedAugmentation(OvsdbNodeAugmentation.class); if (ovsdbNodeModification != null && ovsdbNodeModification.getDataBefore() == null && ovsdbNodeModification.getDataAfter() != null && ovsdbNodeModification.getDataAfter().getConnectionInfo() != null) { OvsdbNodeAugmentation ovsdbNode = ovsdbNodeModification.getDataAfter(); ConnectionInfo key = ovsdbNode.getConnectionInfo(); InstanceIdentifier<Node> iid = cm.getInstanceIdentifier(key); if ( iid != null) { LOG.warn("Connection to device {} already exists. Plugin does not allow multiple connections " + "to same device, hence dropping the request {}", key, ovsdbNode); } else { try { InstanceIdentifier<Node> instanceIdentifier = change.getRootPath().getRootIdentifier(); cm.connect(instanceIdentifier, ovsdbNode); LOG.info("OVSDB node has been connected: {}",ovsdbNode); } catch (UnknownHostException | ConnectException e) { LOG.warn("Failed to connect to ovsdbNode", e); } } } } } }
private void updateConnections(@Nonnull Collection<DataTreeModification<Node>> changes) { for (DataTreeModification<Node> change : changes) { if (change.getRootNode().getModificationType() == DataObjectModification.ModificationType.WRITE || change .getRootNode().getModificationType() == DataObjectModification.ModificationType.SUBTREE_MODIFIED) { DataObjectModification<OvsdbNodeAugmentation> ovsdbNodeModification = change.getRootNode().getModifiedAugmentation(OvsdbNodeAugmentation.class); if (ovsdbNodeModification != null && ovsdbNodeModification.getDataBefore() != null && ovsdbNodeModification.getDataAfter() != null && ovsdbNodeModification.getDataAfter().getConnectionInfo() != null) { OvsdbClient client = cm.getClient(ovsdbNodeModification.getDataAfter().getConnectionInfo()); if (client == null) { if (ovsdbNodeModification.getDataBefore() != null) { try { cm.disconnect(ovsdbNodeModification.getDataBefore()); cm.connect(change.getRootPath().getRootIdentifier(), ovsdbNodeModification .getDataAfter()); } catch (UnknownHostException | ConnectException e) { LOG.warn("Error disconnecting from or connecting to ovsdbNode", e); } } } } } } }