<type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:bgp:topology:provider">prefix:bgp-reachability-ipv4</type>
<name>example-ipv4-topology</name>
<data-provider>
- <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-data-broker</type>
+ <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-async-data-broker</type>
<name>binding-data-broker</name>
</data-provider>
<local-rib>
<type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:bgp:topology:provider">prefix:bgp-reachability-ipv6</type>
<name>example-ipv6-topology</name>
<data-provider>
- <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-data-broker</type>
+ <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-async-data-broker</type>
<name>binding-data-broker</name>
</data-provider>
<local-rib>
<type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:bgp:topology:provider">prefix:bgp-linkstate-topology</type>
<name>example-linkstate-topology</name>
<data-provider>
- <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-data-broker</type>
+ <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-async-data-broker</type>
<name>binding-data-broker</name>
</data-provider>
<local-rib>
*/
package org.opendaylight.bgpcep.bgp.topology.provider;
+import com.google.common.base.Optional;
import java.util.ArrayList;
-
-import org.opendaylight.controller.md.sal.common.api.data.DataModification;
-import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
+import java.util.concurrent.ExecutionException;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.protocol.bgp.rib.RibReference;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.Route;
abstract class AbstractReachabilityTopologyBuilder<T extends Route> extends AbstractTopologyBuilder<T> {
private static final Logger LOG = LoggerFactory.getLogger(AbstractReachabilityTopologyBuilder.class);
- protected AbstractReachabilityTopologyBuilder(final DataProviderService dataProvider, final RibReference locRibReference,
+ protected AbstractReachabilityTopologyBuilder(final DataBroker dataProvider, final RibReference locRibReference,
final TopologyId topologyId, final Class<T> idClass) {
super(dataProvider, locRibReference, topologyId, new TopologyTypesBuilder().build(), idClass);
}
return getInstanceIdentifier().builder().child(Node.class, new NodeKey(ni)).augmentation(Node1.class).toInstance();
}
- private InstanceIdentifier<Node1> ensureNodePresent(final DataModification<InstanceIdentifier<?>, DataObject> trans, final NodeId ni) {
+ private static <T extends DataObject> T read(final ReadTransaction t, final InstanceIdentifier<T> id) {
+ final Optional<T> o;
+ try {
+ o = t.read(LogicalDatastoreType.OPERATIONAL, id).get();
+ } catch (InterruptedException | ExecutionException e) {
+ LOG.warn("Failed to read {}, assuming non-existent", id, e);
+ return null;
+ }
+
+ return (T)o.orNull();
+ }
+
+ private InstanceIdentifier<Node1> ensureNodePresent(final ReadWriteTransaction trans, final NodeId ni) {
final InstanceIdentifier<Node1> nii = nodeInstanceId(ni);
LOG.debug("Looking for pre-existing node at {}", nii);
- if (trans.readOperationalData(nii) == null) {
+ if (read(trans, nii) == null) {
LOG.debug("Create a new node at {}", nii);
- trans.putOperationalData(nii, new Node1Builder().setIgpNodeAttributes(
+ trans.put(LogicalDatastoreType.OPERATIONAL, nii, new Node1Builder().setIgpNodeAttributes(
new IgpNodeAttributesBuilder().setPrefix(new ArrayList<Prefix>()).build()).build());
}
return nii;
}
- private void removeEmptyNode(final DataModification<InstanceIdentifier<?>, DataObject> trans, final InstanceIdentifier<Node1> nii) {
- final Node1 node = (Node1) trans.readOperationalData(nii);
+ private void removeEmptyNode(final ReadWriteTransaction trans, final InstanceIdentifier<Node1> nii) {
+ final Node1 node = read(trans, nii);
if (node != null && node.getIgpNodeAttributes().getPrefix().isEmpty()) {
- trans.removeOperationalData(nii);
+ trans.delete(LogicalDatastoreType.OPERATIONAL, nii);
}
}
protected abstract IpPrefix getPrefix(final T value);
@Override
- protected final void createObject(final DataModification<InstanceIdentifier<?>, DataObject> trans, final InstanceIdentifier<T> id,
- final T value) {
+ protected final void createObject(final ReadWriteTransaction trans, final InstanceIdentifier<T> id, final T value) {
final NodeId ni = advertizingNode(getAttributes(value));
final InstanceIdentifier<Node1> nii = ensureNodePresent(trans, ni);
final IpPrefix prefix = getPrefix(value);
final PrefixKey pk = new PrefixKey(prefix);
- trans.putOperationalData(
+ trans.put(LogicalDatastoreType.OPERATIONAL,
nii.builder().child(
org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.nt.l3.unicast.igp.topology.rev131021.igp.node.attributes.IgpNodeAttributes.class).child(
- Prefix.class, pk).toInstance(), new PrefixBuilder().setKey(pk).setPrefix(prefix).build());
+ Prefix.class, pk).toInstance(), new PrefixBuilder().setKey(pk).setPrefix(prefix).build());
}
@Override
- protected final void removeObject(final DataModification<InstanceIdentifier<?>, DataObject> trans, final InstanceIdentifier<T> id,
- final T value) {
+ protected final void removeObject(final ReadWriteTransaction trans, final InstanceIdentifier<T> id, final T value) {
final NodeId ni = advertizingNode(getAttributes(value));
final InstanceIdentifier<Node1> nii = nodeInstanceId(ni);
final IpPrefix prefix = getPrefix(value);
final PrefixKey pk = new PrefixKey(prefix);
- trans.removeOperationalData(nii.builder().child(
+ trans.delete(LogicalDatastoreType.OPERATIONAL, nii.builder().child(
org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.nt.l3.unicast.igp.topology.rev131021.igp.node.attributes.IgpNodeAttributes.class).child(
- Prefix.class, pk).toInstance());
+ Prefix.class, pk).toInstance());
removeEmptyNode(trans, nii);
}
*/
package org.opendaylight.bgpcep.bgp.topology.provider;
+import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.JdkFutureAdapters;
import java.util.HashSet;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import org.opendaylight.bgpcep.topology.TopologyReference;
-import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
-import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent;
-import org.opendaylight.controller.md.sal.common.api.data.DataModification;
-import org.opendaylight.controller.sal.binding.api.data.DataChangeListener;
-import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
-import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+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.protocol.bgp.rib.RibReference;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.Route;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.bgp.rib.rib.LocRib;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.TopologyTypes;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.common.RpcResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public abstract class AbstractTopologyBuilder<T extends Route> implements AutoCloseable, DataChangeListener, LocRIBListener,
- TopologyReference {
+public abstract class AbstractTopologyBuilder<T extends Route> implements AutoCloseable, DataChangeListener, LocRIBListener, TopologyReference {
private static final Logger LOG = LoggerFactory.getLogger(AbstractTopologyBuilder.class);
private final RibReference locRibReference;
private final InstanceIdentifier<Topology> topology;
- private final DataProviderService dataProvider;
+ private final DataBroker dataProvider;
private final Class<T> idClass;
- protected AbstractTopologyBuilder(final DataProviderService dataProvider, final RibReference locRibReference,
+ protected AbstractTopologyBuilder(final DataBroker dataProvider, final RibReference locRibReference,
final TopologyId topologyId, final TopologyTypes types, final Class<T> idClass) {
this.dataProvider = Preconditions.checkNotNull(dataProvider);
this.locRibReference = Preconditions.checkNotNull(locRibReference);
LOG.debug("Initiating topology builder from {} at {}", locRibReference, this.topology);
- DataModificationTransaction t = dataProvider.beginTransaction();
- Object o = t.readOperationalData(this.topology);
- Preconditions.checkState(o == null, "Data provider conflict detected on object {}", this.topology);
+ final ReadWriteTransaction t = dataProvider.newReadWriteTransaction();
+ final Optional<Topology> o;
+ try {
+ o = t.read(LogicalDatastoreType.OPERATIONAL, this.topology).get();
+ } catch (InterruptedException | ExecutionException e) {
+ throw new IllegalStateException("Failed to read topology " + topology, e);
+ }
+ Preconditions.checkState(!o.isPresent(), "Data provider conflict detected on object {}", this.topology);
- t.putOperationalData(this.topology,
+ t.put(LogicalDatastoreType.OPERATIONAL, this.topology,
new TopologyBuilder().setKey(tk).setServerProvided(Boolean.TRUE).setTopologyTypes(types).build());
- Futures.addCallback(JdkFutureAdapters.listenInPoolThread(t.commit()), new FutureCallback<RpcResult<TransactionStatus>>() {
+ Futures.addCallback(t.submit(), new FutureCallback<Void>() {
@Override
- public void onSuccess(final RpcResult<TransactionStatus> result) {
- LOG.trace("Change committed successfully");
+ public void onSuccess(final Void result) {
+ LOG.trace("Transaction {} committed successfully", t.getIdentifier());
}
@Override
return this.locRibReference.getInstanceIdentifier().builder().child(LocRib.class).child(Tables.class, new TablesKey(afi, safi)).toInstance();
}
- protected abstract void createObject(DataModification<InstanceIdentifier<?>, DataObject> trans, InstanceIdentifier<T> id, T value);
+ protected abstract void createObject(ReadWriteTransaction trans, InstanceIdentifier<T> id, T value);
- protected abstract void removeObject(DataModification<InstanceIdentifier<?>, DataObject> trans, InstanceIdentifier<T> id, T value);
+ protected abstract void removeObject(ReadWriteTransaction trans, InstanceIdentifier<T> id, T value);
- public final DataProviderService getDataProvider() {
+ public final DataBroker getDataProvider() {
return this.dataProvider;
}
}
@Override
- public final void onLocRIBChange(final DataModification<InstanceIdentifier<?>, DataObject> trans,
- final DataChangeEvent<InstanceIdentifier<?>, DataObject> event) {
- LOG.debug("Received data change {} event with transaction {}", event, trans);
+ public final void onLocRIBChange(final ReadWriteTransaction trans,
+ final AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> event) {
+ LOG.debug("Received data change {} event with transaction {}", event, trans.getIdentifier());
+ // FIXME: speed this up
final Set<InstanceIdentifier<T>> ids = new HashSet<>();
- for (final InstanceIdentifier<?> i : event.getRemovedOperationalData()) {
+ for (final InstanceIdentifier<?> i : event.getRemovedPaths()) {
addIdentifier(i, "remove", ids);
}
- for (final InstanceIdentifier<?> i : event.getUpdatedOperationalData().keySet()) {
+ for (final InstanceIdentifier<?> i : event.getUpdatedData().keySet()) {
addIdentifier(i, "update", ids);
}
- for (final InstanceIdentifier<?> i : event.getCreatedOperationalData().keySet()) {
+ for (final InstanceIdentifier<?> i : event.getCreatedData().keySet()) {
addIdentifier(i, "create", ids);
}
- final Map<InstanceIdentifier<?>, DataObject> o = event.getOriginalOperationalData();
- final Map<InstanceIdentifier<?>, DataObject> n = event.getUpdatedOperationalData();
+ final Map<InstanceIdentifier<?>, ? extends DataObject> o = event.getOriginalData();
+ final Map<InstanceIdentifier<?>, DataObject> n = event.getUpdatedData();
for (final InstanceIdentifier<T> i : ids) {
final T oldValue = this.idClass.cast(o.get(i));
final T newValue = this.idClass.cast(n.get(i));
}
}
- Futures.addCallback(JdkFutureAdapters.listenInPoolThread(trans.commit()), new FutureCallback<RpcResult<TransactionStatus>>() {
+ Futures.addCallback(trans.submit(), new FutureCallback<Void>() {
@Override
- public void onSuccess(final RpcResult<TransactionStatus> result) {
- LOG.trace("Change committed successfully");
+ public void onSuccess(final Void result) {
+ LOG.trace("Transaction {} committed successfully", trans.getIdentifier());
}
@Override
}
@Override
- public final void close() throws InterruptedException, ExecutionException {
+ public final void close() throws TransactionCommitFailedException {
LOG.info("Shutting down builder for {}", getInstanceIdentifier());
- final DataModificationTransaction trans = this.dataProvider.beginTransaction();
- trans.removeOperationalData(getInstanceIdentifier());
- trans.commit().get();
+ final WriteTransaction trans = this.dataProvider.newWriteOnlyTransaction();
+ trans.delete(LogicalDatastoreType.OPERATIONAL, getInstanceIdentifier());
+ trans.submit().checkedGet();
}
@Override
- public final void onDataChanged(final DataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
- final DataModificationTransaction trans = this.dataProvider.beginTransaction();
+ public final void onDataChanged(final AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
+ final ReadWriteTransaction trans = this.dataProvider.newReadWriteTransaction();
try {
onLocRIBChange(trans, change);
LOG.warn("Data change {} was not completely propagated to listener {}", change, this, e);
return;
}
-
- switch (trans.getStatus()) {
- case COMMITED:
- case SUBMITED:
- break;
- case NEW:
- LOG.warn("Data change {} transaction {} was not committed by builder {}", change, trans, this);
- break;
- case CANCELED:
- case FAILED:
- LOG.error("Data change {} transaction {} failed to commit", change, trans);
- break;
- }
}
}
*/
package org.opendaylight.bgpcep.bgp.topology.provider;
-import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.protocol.bgp.rib.RibReference;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.tables.routes.ipv4.routes._case.ipv4.routes.Ipv4Route;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
public final class Ipv4ReachabilityTopologyBuilder extends AbstractReachabilityTopologyBuilder<Ipv4Route> {
- public Ipv4ReachabilityTopologyBuilder(final DataProviderService dataProvider, final RibReference locRibReference,
+ public Ipv4ReachabilityTopologyBuilder(final DataBroker dataProvider, final RibReference locRibReference,
final TopologyId topologyId) {
super(dataProvider, locRibReference, topologyId, Ipv4Route.class);
}
*/
package org.opendaylight.bgpcep.bgp.topology.provider;
-import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.protocol.bgp.rib.RibReference;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.tables.routes.ipv6.routes._case.ipv6.routes.Ipv6Route;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
public final class Ipv6ReachabilityTopologyBuilder extends AbstractReachabilityTopologyBuilder<Ipv6Route> {
- public Ipv6ReachabilityTopologyBuilder(final DataProviderService dataProvider, final RibReference locRibReference,
+ public Ipv6ReachabilityTopologyBuilder(final DataBroker dataProvider, final RibReference locRibReference,
final TopologyId topologyId) {
super(dataProvider, locRibReference, topologyId, Ipv6Route.class);
}
import com.google.common.base.Preconditions;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
-
import java.math.BigDecimal;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
-
-import org.opendaylight.controller.md.sal.common.api.data.DataModification;
-import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.protocol.bgp.rib.RibReference;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.DomainName;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.ospf.topology.rev131021.ospf.node.attributes.ospf.node.attributes.router.type.InternalBuilder;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.ospf.topology.rev131021.ospf.node.attributes.ospf.node.attributes.router.type.PseudonodeBuilder;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.ospf.topology.rev131021.ospf.prefix.attributes.OspfPrefixAttributesBuilder;
-import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
* @param trans data modification transaction which to use
* @return True if the node has been purged, false otherwise.
*/
- private boolean syncState(final DataModification<InstanceIdentifier<?>, DataObject> trans) {
+ private boolean syncState(final WriteTransaction trans) {
final InstanceIdentifier<Node> nid = getInstanceIdentifier().child(
org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node.class,
this.nb.getKey());
* Transaction's putOperationalData() does a merge. Force it onto a replace
* by removing the data. If we decide to remove the node -- we just skip the put.
*/
- trans.removeOperationalData(nid);
+ trans.delete(LogicalDatastoreType.OPERATIONAL, nid);
if (!this.advertized) {
if (this.tps.isEmpty() && this.prefixes.isEmpty()) {
// Write the node out
final Node n = this.nb.addAugmentation(Node1.class, new Node1Builder().setIgpNodeAttributes(this.inab.build()).build()).build();
- trans.putOperationalData(nid, n);
+ trans.put(LogicalDatastoreType.OPERATIONAL, nid, n);
LOG.debug("Created node {} at {}", n, nid);
return false;
}
private static final Logger LOG = LoggerFactory.getLogger(LinkstateTopologyBuilder.class);
private final Map<NodeId, NodeHolder> nodes = new HashMap<>();
- public LinkstateTopologyBuilder(final DataProviderService dataProvider, final RibReference locRibReference, final TopologyId topologyId) {
+ public LinkstateTopologyBuilder(final DataBroker dataProvider, final RibReference locRibReference, final TopologyId topologyId) {
super(dataProvider, locRibReference, topologyId, new TopologyTypesBuilder().addAugmentation(TopologyTypes1.class,
new TopologyTypes1Builder().build()).build(), LinkstateRoute.class);
}
return buildTp(id, t);
}
- private InstanceIdentifier<?> buildLinkIdentifier(final UriBuilder base, final LinkId id) {
+ private InstanceIdentifier<Link> buildLinkIdentifier(final UriBuilder base, final LinkId id) {
return getInstanceIdentifier().child(
org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Link.class,
new LinkKey(id));
return ret;
}
- private void putNode(final DataModification<InstanceIdentifier<?>, DataObject> trans, final NodeHolder holder) {
+ private void putNode(final WriteTransaction trans, final NodeHolder holder) {
if (holder.syncState(trans)) {
this.nodes.remove(holder.getNodeId());
}
}
- private void createLink(final DataModification<InstanceIdentifier<?>, DataObject> trans, final UriBuilder base,
+ private void createLink(final WriteTransaction trans, final UriBuilder base,
final LinkstateRoute value, final LinkCase l, final Attributes attributes) {
final LinkAttributes la = ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.bgp.rib.rib.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.linkstate.route.attributes.attribute.type.LinkCase) attributes.getAugmentation(
Attributes1.class).getAttributeType()).getLinkAttributes();
LOG.debug("Created TP {} as link destination", dstTp);
putNode(trans, dnh);
- final InstanceIdentifier<?> lid = buildLinkIdentifier(base, lb.getLinkId());
+ final InstanceIdentifier<Link> lid = buildLinkIdentifier(base, lb.getLinkId());
final Link link = lb.build();
- /*
- * Transaction's putOperationalData() does a merge. Force it onto a replace
- * by removing the data.
- */
- trans.removeOperationalData(lid);
- trans.putOperationalData(lid, link);
+ trans.put(LogicalDatastoreType.OPERATIONAL, lid, link);
LOG.debug("Created link {} at {} for {}", link, lid, l);
}
- private void removeTp(final DataModification<InstanceIdentifier<?>, DataObject> trans, final NodeId node, final TpId tp,
+ private void removeTp(final WriteTransaction trans, final NodeId node, final TpId tp,
final LinkId link, final boolean isRemote) {
final NodeHolder nh = this.nodes.get(node);
if (nh != null) {
}
}
- private void removeLink(final DataModification<InstanceIdentifier<?>, DataObject> trans, final UriBuilder base, final LinkCase l) {
+ private void removeLink(final WriteTransaction trans, final UriBuilder base, final LinkCase l) {
final LinkId id = buildLinkId(base, l);
final InstanceIdentifier<?> lid = buildLinkIdentifier(base, id);
- trans.removeOperationalData(lid);
+ trans.delete(LogicalDatastoreType.OPERATIONAL, lid);
LOG.debug("Removed link {}", lid);
removeTp(trans, buildNodeId(base, l.getLocalNodeDescriptors()), buildLocalTpId(base, l.getLinkDescriptors()), id, false);
ab.build()).build();
}
- private void createNode(final DataModification<InstanceIdentifier<?>, DataObject> trans, final UriBuilder base,
+ private void createNode(final WriteTransaction trans, final UriBuilder base,
final LinkstateRoute value, final NodeCase n, final Attributes attributes) {
final NodeAttributes na = ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.bgp.rib.rib.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.linkstate.route.attributes.attribute.type.NodeCase) attributes.getAugmentation(
Attributes1.class).getAttributeType()).getNodeAttributes();
putNode(trans, nh);
}
- private void removeNode(final DataModification<InstanceIdentifier<?>, DataObject> trans, final UriBuilder base, final NodeCase n) {
+ private void removeNode(final WriteTransaction trans, final UriBuilder base, final NodeCase n) {
final NodeId id = buildNodeId(base, n.getNodeDescriptors());
final NodeHolder nh = this.nodes.get(id);
if (nh != null) {
}
}
- private void createPrefix(final DataModification<InstanceIdentifier<?>, DataObject> trans, final UriBuilder base,
+ private void createPrefix(final WriteTransaction trans, final UriBuilder base,
final LinkstateRoute value, final PrefixCase p, final Attributes attributes) {
final IpPrefix ippfx = p.getIpReachabilityInformation();
if (ippfx == null) {
putNode(trans, nh);
}
- private void removePrefix(final DataModification<InstanceIdentifier<?>, DataObject> trans, final UriBuilder base, final PrefixCase p) {
+ private void removePrefix(final WriteTransaction trans, final UriBuilder base, final PrefixCase p) {
final NodeId node = buildNodeId(base, p.getAdvertisingNodeDescriptors());
final NodeHolder nh = this.nodes.get(node);
if (nh != null) {
}
@Override
- protected void createObject(final DataModification<InstanceIdentifier<?>, DataObject> trans,
+ protected void createObject(final ReadWriteTransaction trans,
final InstanceIdentifier<LinkstateRoute> id, final LinkstateRoute value) {
final UriBuilder base = new UriBuilder(value);
}
@Override
- protected void removeObject(final DataModification<InstanceIdentifier<?>, DataObject> trans,
+ protected void removeObject(final ReadWriteTransaction trans,
final InstanceIdentifier<LinkstateRoute> id, final LinkstateRoute value) {
final UriBuilder base = new UriBuilder(value);
import java.util.EventListener;
-import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent;
-import org.opendaylight.controller.md.sal.common.api.data.DataModification;
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
* @param event Data change event
* @param depth Subscription path depth.
*/
- void onLocRIBChange(DataModification<InstanceIdentifier<?>, DataObject> trans, DataChangeEvent<InstanceIdentifier<?>, DataObject> event);
+ void onLocRIBChange(ReadWriteTransaction trans, AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> event);
}
package org.opendaylight.controller.config.yang.bgp.topology.provider;
import java.util.concurrent.ExecutionException;
-
import org.opendaylight.bgpcep.bgp.topology.provider.Ipv4ReachabilityTopologyBuilder;
import org.opendaylight.bgpcep.topology.DefaultTopologyReference;
import org.opendaylight.controller.config.api.JmxAttributeValidationException;
-import org.opendaylight.controller.sal.binding.api.data.DataChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.Tables;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv4AddressFamily;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.UnicastSubsequentAddressFamily;
/**
*
*/
-public final class Ipv4ReachabilityTopologyBuilderModule extends
- org.opendaylight.controller.config.yang.bgp.topology.provider.AbstractIpv4ReachabilityTopologyBuilderModule {
+public final class Ipv4ReachabilityTopologyBuilderModule extends org.opendaylight.controller.config.yang.bgp.topology.provider.AbstractIpv4ReachabilityTopologyBuilderModule {
private static final Logger LOG = LoggerFactory.getLogger(Ipv4ReachabilityTopologyBuilderModule.class);
public Ipv4ReachabilityTopologyBuilderModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier,
- final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+ final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
super(identifier, dependencyResolver);
}
public Ipv4ReachabilityTopologyBuilderModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier,
- final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
- final Ipv4ReachabilityTopologyBuilderModule oldModule, final java.lang.AutoCloseable oldInstance) {
+ final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
+ final Ipv4ReachabilityTopologyBuilderModule oldModule, final java.lang.AutoCloseable oldInstance) {
super(identifier, dependencyResolver, oldModule, oldInstance);
}
public java.lang.AutoCloseable createInstance() {
final Ipv4ReachabilityTopologyBuilder b = new Ipv4ReachabilityTopologyBuilder(getDataProviderDependency(), getLocalRibDependency(), getTopologyId());
final InstanceIdentifier<Tables> i = b.tableInstanceIdentifier(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class);
- final ListenerRegistration<DataChangeListener> r = getDataProviderDependency().registerDataChangeListener(i, b);
+ final ListenerRegistration<DataChangeListener> r = getDataProviderDependency().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, i, b, DataChangeScope.SUBTREE);
LOG.debug("Registered listener {} on {} (topology {})", b, i, b.getInstanceIdentifier());
final class TopologyReferenceAutocloseable extends DefaultTopologyReference implements AutoCloseable {
}
@Override
- public void close() throws InterruptedException, ExecutionException {
+ public void close() throws InterruptedException, ExecutionException, TransactionCommitFailedException {
try {
r.close();
} finally {
package org.opendaylight.controller.config.yang.bgp.topology.provider;
import java.util.concurrent.ExecutionException;
-
import org.opendaylight.bgpcep.bgp.topology.provider.Ipv6ReachabilityTopologyBuilder;
import org.opendaylight.bgpcep.topology.DefaultTopologyReference;
import org.opendaylight.controller.config.api.JmxAttributeValidationException;
-import org.opendaylight.controller.sal.binding.api.data.DataChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.Tables;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv6AddressFamily;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.UnicastSubsequentAddressFamily;
/**
*
*/
-public final class Ipv6ReachabilityTopologyBuilderModule extends
- org.opendaylight.controller.config.yang.bgp.topology.provider.AbstractIpv6ReachabilityTopologyBuilderModule {
+public final class Ipv6ReachabilityTopologyBuilderModule extends org.opendaylight.controller.config.yang.bgp.topology.provider.AbstractIpv6ReachabilityTopologyBuilderModule {
private static final Logger LOG = LoggerFactory.getLogger(Ipv6ReachabilityTopologyBuilderModule.class);
public Ipv6ReachabilityTopologyBuilderModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier,
- final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+ final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
super(identifier, dependencyResolver);
}
public Ipv6ReachabilityTopologyBuilderModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier,
- final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
- final Ipv6ReachabilityTopologyBuilderModule oldModule, final java.lang.AutoCloseable oldInstance) {
+ final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
+ final Ipv6ReachabilityTopologyBuilderModule oldModule, final java.lang.AutoCloseable oldInstance) {
super(identifier, dependencyResolver, oldModule, oldInstance);
}
public java.lang.AutoCloseable createInstance() {
final Ipv6ReachabilityTopologyBuilder b = new Ipv6ReachabilityTopologyBuilder(getDataProviderDependency(), getLocalRibDependency(), getTopologyId());
final InstanceIdentifier<Tables> i = b.tableInstanceIdentifier(Ipv6AddressFamily.class, UnicastSubsequentAddressFamily.class);
- final ListenerRegistration<DataChangeListener> r = getDataProviderDependency().registerDataChangeListener(i, b);
+ final ListenerRegistration<DataChangeListener> r = getDataProviderDependency().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, i, b, DataChangeScope.SUBTREE);
LOG.debug("Registered listener {} on {} (topology {})", b, i, b.getInstanceIdentifier());
final class TopologyReferenceAutocloseable extends DefaultTopologyReference implements AutoCloseable {
}
@Override
- public void close() throws InterruptedException, ExecutionException {
+ public void close() throws InterruptedException, ExecutionException, TransactionCommitFailedException {
try {
r.close();
} finally {
package org.opendaylight.controller.config.yang.bgp.topology.provider;
import java.util.concurrent.ExecutionException;
-
import org.opendaylight.bgpcep.bgp.topology.provider.LinkstateTopologyBuilder;
import org.opendaylight.bgpcep.topology.DefaultTopologyReference;
import org.opendaylight.controller.config.api.JmxAttributeValidationException;
-import org.opendaylight.controller.sal.binding.api.data.DataChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.LinkstateAddressFamily;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.LinkstateSubsequentAddressFamily;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.Tables;
/**
*
*/
-public final class LinkstateTopologyBuilderModule extends
- org.opendaylight.controller.config.yang.bgp.topology.provider.AbstractLinkstateTopologyBuilderModule {
+public final class LinkstateTopologyBuilderModule extends org.opendaylight.controller.config.yang.bgp.topology.provider.AbstractLinkstateTopologyBuilderModule {
private static final Logger LOG = LoggerFactory.getLogger(LinkstateTopologyBuilderModule.class);
public LinkstateTopologyBuilderModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier,
- final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+ final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
super(identifier, dependencyResolver);
}
public LinkstateTopologyBuilderModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier,
- final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
- final LinkstateTopologyBuilderModule oldModule, final java.lang.AutoCloseable oldInstance) {
+ final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
+ final LinkstateTopologyBuilderModule oldModule, final java.lang.AutoCloseable oldInstance) {
super(identifier, dependencyResolver, oldModule, oldInstance);
}
public java.lang.AutoCloseable createInstance() {
final LinkstateTopologyBuilder b = new LinkstateTopologyBuilder(getDataProviderDependency(), getLocalRibDependency(), getTopologyId());
final InstanceIdentifier<Tables> i = b.tableInstanceIdentifier(LinkstateAddressFamily.class, LinkstateSubsequentAddressFamily.class);
- final ListenerRegistration<DataChangeListener> r = getDataProviderDependency().registerDataChangeListener(i, b);
+ final ListenerRegistration<DataChangeListener> r = getDataProviderDependency().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, i, b, DataChangeScope.SUBTREE);
LOG.debug("Registered listener {} on {} (topology {})", b, i, b.getInstanceIdentifier());
final class TopologyReferenceAutocloseable extends DefaultTopologyReference implements AutoCloseable {
}
@Override
- public void close() throws InterruptedException, ExecutionException {
+ public void close() throws InterruptedException, ExecutionException, TransactionCommitFailedException {
try {
r.close();
} finally {
uses config:service-ref {
refine type {
mandatory true;
- config:required-identity mdsal:binding-data-broker;
+ config:required-identity mdsal:binding-async-data-broker;
}
}
}
uses config:service-ref {
refine type {
mandatory true;
- config:required-identity mdsal:binding-data-broker;
+ config:required-identity mdsal:binding-async-data-broker;
}
}
}
uses config:service-ref {
refine type {
mandatory true;
- config:required-identity mdsal:binding-data-broker;
+ config:required-identity mdsal:binding-async-data-broker;
}
}
}
public void testCreateBean() throws Exception {
final CommitStatus status = createIpv4ReachabilityTopoBuilderModuleInstance();
assertBeanCount(1, FACTORY_NAME);
- assertStatus(status, 16, 0, 0);
+ assertStatus(status, 15, 0, 0);
}
@Test
assertBeanCount(1, FACTORY_NAME);
final CommitStatus status = transaction.commit();
assertBeanCount(1, FACTORY_NAME);
- assertStatus(status, 0, 0, 16);
+ assertStatus(status, 0, 0, 15);
}
@Test
mxBean.setTopologyId(new TopologyId("new-bgp-topology"));
final CommitStatus status = transaction.commit();
assertBeanCount(1, FACTORY_NAME);
- assertStatus(status, 0, 1, 15);
+ assertStatus(status, 0, 1, 14);
}
private CommitStatus createIpv4ReachabilityTopoBuilderModuleInstance() throws Exception {
final Ipv4ReachabilityTopologyBuilderModuleMXBean mxBean = transaction.newMXBeanProxy(ipv4ReachabilityBuilderON,
Ipv4ReachabilityTopologyBuilderModuleMXBean.class);
final ObjectName dataBrokerON = createAsyncDataBrokerInstance(transaction);
- mxBean.setDataProvider(createDataBrokerInstance(transaction));
+ mxBean.setDataProvider(dataBrokerON);
mxBean.setLocalRib(createRIBImplModuleInstance(transaction, dataBrokerON));
mxBean.setTopologyId(topologyId);
return transaction.commit();
public void testCreateBean() throws Exception {
final CommitStatus status = createIpv6ReachabilityTopoBuilderModuleInstance();
assertBeanCount(1, FACTORY_NAME);
- assertStatus(status, 16, 0, 0);
+ assertStatus(status, 15, 0, 0);
}
@Test
assertBeanCount(1, FACTORY_NAME);
final CommitStatus status = transaction.commit();
assertBeanCount(1, FACTORY_NAME);
- assertStatus(status, 0, 0, 16);
+ assertStatus(status, 0, 0, 15);
}
@Test
mxBean.setTopologyId(new TopologyId("new-bgp-topology"));
final CommitStatus status = transaction.commit();
assertBeanCount(1, FACTORY_NAME);
- assertStatus(status, 0, 1, 15);
+ assertStatus(status, 0, 1, 14);
}
private CommitStatus createIpv6ReachabilityTopoBuilderModuleInstance() throws Exception {
final Ipv6ReachabilityTopologyBuilderModuleMXBean mxBean = transaction.newMXBeanProxy(ipv6ReachabilityBuilderON,
Ipv6ReachabilityTopologyBuilderModuleMXBean.class);
final ObjectName dataBrokerON = createAsyncDataBrokerInstance(transaction);
- mxBean.setDataProvider(createDataBrokerInstance(transaction));
+ mxBean.setDataProvider(dataBrokerON);
mxBean.setLocalRib(createRIBImplModuleInstance(transaction, dataBrokerON));
mxBean.setTopologyId(topologyId);
return transaction.commit();
public void testCreateBean() throws Exception {
final CommitStatus status = createLinkstateTopologyBuilderModuleInstance();
assertBeanCount(1, FACTORY_NAME);
- assertStatus(status, 16, 0, 0);
+ assertStatus(status, 15, 0, 0);
}
@Test
assertBeanCount(1, FACTORY_NAME);
final CommitStatus status = transaction.commit();
assertBeanCount(1, FACTORY_NAME);
- assertStatus(status, 0, 0, 16);
+ assertStatus(status, 0, 0, 15);
}
@Test
mxBean.setTopologyId(new TopologyId("new-bgp-topology"));
final CommitStatus status = transaction.commit();
assertBeanCount(1, FACTORY_NAME);
- assertStatus(status, 0, 1, 15);
+ assertStatus(status, 0, 1, 14);
}
private CommitStatus createLinkstateTopologyBuilderModuleInstance() throws Exception {
final LinkstateTopologyBuilderModuleMXBean mxBean = transaction.newMXBeanProxy(linkstateTopoBuilderON,
LinkstateTopologyBuilderModuleMXBean.class);
final ObjectName dataBrokerON = createAsyncDataBrokerInstance(transaction);
- mxBean.setDataProvider(createDataBrokerInstance(transaction));
+ mxBean.setDataProvider(dataBrokerON);
mxBean.setLocalRib(createRIBImplModuleInstance(transaction, dataBrokerON));
mxBean.setTopologyId(topologyId);
return transaction.commit();