import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.unimgr.impl.UnimgrConstants;
import org.opendaylight.unimgr.impl.UnimgrMapper;
import org.opendaylight.unimgr.impl.UnimgrUtils;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
import org.slf4j.LoggerFactory;
import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
public class EvcDeleteCommand extends AbstractDeleteCommand {
&& optionalDestinationOvsdbNode.isPresent()) {
Node sourceOvsdbNode = optionalSourceOvsdNode.get();
Node destinationOvsdbNode = optionalDestinationOvsdbNode.get();
- OvsdbNodeAugmentation sourceOvsdbNodeAugmentation =
- sourceOvsdbNode.getAugmentation(OvsdbNodeAugmentation.class);
- OvsdbNodeAugmentation destinationOvsdbNodeAugmentation =
- destinationOvsdbNode.getAugmentation(OvsdbNodeAugmentation.class);
- InstanceIdentifier<Node> sourceBridgeIid =
- sourceOvsdbNodeAugmentation
- .getManagedNodeEntry()
- .iterator()
- .next()
- .getBridgeRef()
- .getValue()
- .firstIdentifierOf(Node.class);
- InstanceIdentifier<Node> destinationBridgeIid =
- destinationOvsdbNodeAugmentation
- .getManagedNodeEntry()
- .iterator()
- .next()
- .getBridgeRef()
- .getValue()
- .firstIdentifierOf(Node.class);
- Optional<Node> optionalSourceBridgeNode = UnimgrUtils.readNode(dataBroker,
- LogicalDatastoreType.OPERATIONAL,
- sourceBridgeIid);
- Optional<Node> optionalDestinationBridgeNode = UnimgrUtils.readNode(dataBroker,
- LogicalDatastoreType.OPERATIONAL,
- destinationBridgeIid);
- if (optionalSourceBridgeNode.isPresent()
- && optionalDestinationBridgeNode.isPresent()) {
- Node sourceBridgeNode = optionalSourceBridgeNode.get();
- Node destinationBridgeNode = optionalSourceBridgeNode.get();
- TpId sourceTp = sourceBridgeNode.getTerminationPoint().iterator().next().getTpId();
- TpId destTp = destinationBridgeNode.getTerminationPoint().iterator().next().getTpId();
- InstanceIdentifier<?> sourceTpIid = UnimgrMapper.getTerminationPointIid(sourceBridgeNode,
- sourceTp);
- InstanceIdentifier<?> destinationTpIid = UnimgrMapper.getTerminationPointIid(destinationBridgeNode,
- destTp);
- UnimgrUtils.deleteNode(dataBroker, sourceTpIid, LogicalDatastoreType.CONFIGURATION);
- UnimgrUtils.deleteNode(dataBroker, destinationTpIid, LogicalDatastoreType.CONFIGURATION);
- UnimgrUtils.deleteNode(dataBroker, sourceTpIid, LogicalDatastoreType.OPERATIONAL);
- UnimgrUtils.deleteNode(dataBroker, destinationTpIid, LogicalDatastoreType.OPERATIONAL);
- } else {
- LOG.info("Unable to retrieve the Ovsdb Bridge node source and/or destination.");
+ OvsdbNodeAugmentation sourceOvsdbNodeAugmentation = sourceOvsdbNode
+ .getAugmentation(OvsdbNodeAugmentation.class);
+ OvsdbNodeAugmentation destinationOvsdbNodeAugmentation = destinationOvsdbNode
+ .getAugmentation(OvsdbNodeAugmentation.class);
+ InstanceIdentifier<Node> sourceBridgeIid = sourceOvsdbNodeAugmentation.getManagedNodeEntry()
+ .iterator().next().getBridgeRef().getValue().firstIdentifierOf(Node.class);
+ InstanceIdentifier<Node> destinationBridgeIid = destinationOvsdbNodeAugmentation
+ .getManagedNodeEntry().iterator().next().getBridgeRef().getValue()
+ .firstIdentifierOf(Node.class);
+ CheckedFuture<Void, TransactionCommitFailedException> deleteOperNodeResult = UnimgrUtils
+ .deleteNode(dataBroker, sourceBridgeIid, LogicalDatastoreType.CONFIGURATION);
+ CheckedFuture<Void, TransactionCommitFailedException> deleteConfigNodeResult = UnimgrUtils
+ .deleteNode(dataBroker, destinationBridgeIid, LogicalDatastoreType.CONFIGURATION);
+ try {
+ deleteOperNodeResult.checkedGet();
+ deleteConfigNodeResult.checkedGet();
+ if (deleteOperNodeResult.isDone() && deleteConfigNodeResult.isDone()) {
+ UnimgrUtils.createBridgeNode(dataBroker, sourceOvsdbIid,
+ sourceUniNode.getAugmentation(UniAugmentation.class),
+ UnimgrConstants.DEFAULT_BRIDGE_NAME);
+ UnimgrUtils.createBridgeNode(dataBroker, destOvsdbIid,
+ destUniNode.getAugmentation(UniAugmentation.class),
+ UnimgrConstants.DEFAULT_BRIDGE_NAME);
+ }
+ } catch (TransactionCommitFailedException e) {
+ LOG.error("Unable to delete bridges.");
}
} else {
LOG.info("Unable to retrieve the Ovsdb node source and/or destination.");
if(uniAug != null) {
LOG.info("Uni Augmentation present.");
OvsdbNodeRef ovsNdRef = uniAug.getOvsdbNodeRef();
- InstanceIdentifier<Node> iidNode = (InstanceIdentifier<Node>) ovsNdRef.getValue();
+ InstanceIdentifier<Node> iidNode = ovsNdRef.getValue().firstIdentifierOf(Node.class);
Optional<Node> optNode = UnimgrUtils.readNode(dataBroker, LogicalDatastoreType.OPERATIONAL, iidNode);
if (optNode.isPresent()) {
Node ovsdbNode = optNode.get();
UnimgrUtils.deletePath(dataBroker, iidBridgeNode);
LOG.info("Received a request to remove a UNI BridgeNode ", iidBridgeNode);
}
- UnimgrUtils.deletePath(dataBroker, iidNode);
LOG.info("Received a request to remove an UNI ", removedUniIid);
UnimgrUtils.deletePath(dataBroker, LogicalDatastoreType.OPERATIONAL, removedUniIid);
}
else {LOG.info("Received Uni Augmentation is null", removedUniIid);}
}
}
- else {LOG.info("Removed UNIs is empty.");}
}
}
transaction.submit();
}
+ public <D extends org.opendaylight.yangtools.yang.binding.DataObject> boolean delete(
+ DataBroker dataBroker,
+ final LogicalDatastoreType store,
+ final InstanceIdentifier<D> path) {
+ boolean result = false;
+ final WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
+ transaction.delete(store, path);
+ CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
+ try {
+ future.checkedGet();
+ result = true;
+ } catch (TransactionCommitFailedException e) {
+ LOG.warn("Failed to delete {} ", path, e);
+ }
+ return result;
+ }
+
public static CheckedFuture<Void,
TransactionCommitFailedException>
deleteTerminationPoint(DataBroker dataBroker,
deleteNode(DataBroker dataBroker,
InstanceIdentifier<?> genericNode,
LogicalDatastoreType store) {
+ LOG.info("Received a request to delete node {}", genericNode);
WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
transaction.delete(store, genericNode);
return transaction.submit();