BUG-1287: migrate bgp-topology-provider 93/8693/14
authorMilos Fabian <milfabia@cisco.com>
Mon, 21 Jul 2014 12:18:47 +0000 (14:18 +0200)
committerDana Kutenicsova <dkutenic@cisco.com>
Mon, 28 Jul 2014 15:03:43 +0000 (17:03 +0200)
Data store has a new set of APIs, which are more efficient. This is a
straightforward migration, without taking advantage of the full APIs
available.

Change-Id: I5d82dd8ed0cb95f2075593713f253bd9abc5b686
Signed-off-by: Robert Varga <rovarga@cisco.com>
Signed-off-by: Milos Fabian <milfabia@cisco.com>
14 files changed:
bgp/controller-config/src/main/resources/initial/41-bgp-example.xml
bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/AbstractReachabilityTopologyBuilder.java
bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/AbstractTopologyBuilder.java
bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/Ipv4ReachabilityTopologyBuilder.java
bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/Ipv6ReachabilityTopologyBuilder.java
bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/LinkstateTopologyBuilder.java
bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/LocRIBListener.java
bgp/topology-provider/src/main/java/org/opendaylight/controller/config/yang/bgp/topology/provider/Ipv4ReachabilityTopologyBuilderModule.java
bgp/topology-provider/src/main/java/org/opendaylight/controller/config/yang/bgp/topology/provider/Ipv6ReachabilityTopologyBuilderModule.java
bgp/topology-provider/src/main/java/org/opendaylight/controller/config/yang/bgp/topology/provider/LinkstateTopologyBuilderModule.java
bgp/topology-provider/src/main/yang/odl-bgp-topology-provider-cfg.yang
bgp/topology-provider/src/test/java/org/opendaylight/controller/config/yang/bgp/topology/provider/Ipv4ReachabilityTopologyBuilderModuleTest.java
bgp/topology-provider/src/test/java/org/opendaylight/controller/config/yang/bgp/topology/provider/Ipv6ReachabilityTopologyBuilderModuleTest.java
bgp/topology-provider/src/test/java/org/opendaylight/controller/config/yang/bgp/topology/provider/LinkstateTopologyBuilderModuleTest.java

index 6c2a8ccc611decc41b1f1995a220f01080bb9c18..c5a00de12686ed12168a76baa45efe55ed51467a 100644 (file)
                     <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>
index b0eb67fdd41898fb13ab5b2948c47b4d02922001..2dc3cf0946083b6c49ec63f17a15751a5e045efb 100644 (file)
@@ -7,10 +7,13 @@
  */
 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;
@@ -42,7 +45,7 @@ import org.slf4j.LoggerFactory;
 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);
     }
@@ -67,23 +70,35 @@ abstract class AbstractReachabilityTopologyBuilder<T extends Route> extends Abst
         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);
         }
     }
 
@@ -92,32 +107,30 @@ abstract class AbstractReachabilityTopologyBuilder<T extends Route> extends Abst
     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);
     }
index e34aa465661a1c6de48474c06b185b9a0a8e570b..661424ff0f429232e212f69df7323c3975a1f761 100644 (file)
@@ -7,10 +7,10 @@
  */
 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;
@@ -18,12 +18,13 @@ import java.util.Set;
 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;
@@ -39,19 +40,17 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.
 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);
@@ -62,16 +61,21 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements AutoCl
 
         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
@@ -87,11 +91,11 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements AutoCl
         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;
     }
 
@@ -110,23 +114,24 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements AutoCl
     }
 
     @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));
@@ -140,10 +145,10 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements AutoCl
             }
         }
 
-        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
@@ -154,16 +159,16 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements AutoCl
     }
 
     @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);
@@ -171,18 +176,5 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements AutoCl
             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;
-        }
     }
 }
index 12e09156257c6bbcb2f7b7d25fa7311de8704d8f..94711bab4bb776da15e87c68ee5c1a4561d364f1 100644 (file)
@@ -7,7 +7,7 @@
  */
 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;
@@ -15,7 +15,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.
 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);
     }
index 1c4e8c5c8851c40e039ea46de0f9580193c8adc5..30802597eed0e59357c2b1ba56192a5d68d31ce7 100644 (file)
@@ -7,7 +7,7 @@
  */
 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;
@@ -15,7 +15,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.
 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);
     }
index 9f32bb3b4b627e18fc334035e76cbee63e963b14..064e655c1c9526a7206ae8bc668a321d1fd7db57 100644 (file)
@@ -11,7 +11,6 @@ import com.google.common.base.Function;
 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;
@@ -20,9 +19,10 @@ import java.util.HashSet;
 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;
@@ -103,7 +103,6 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.ospf.topology.rev
 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;
@@ -164,7 +163,7 @@ public final class LinkstateTopologyBuilder extends AbstractTopologyBuilder<Link
          * @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());
@@ -173,7 +172,7 @@ public final class LinkstateTopologyBuilder extends AbstractTopologyBuilder<Link
              * 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()) {
@@ -197,7 +196,7 @@ public final class LinkstateTopologyBuilder extends AbstractTopologyBuilder<Link
 
             // 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;
         }
@@ -254,7 +253,7 @@ public final class LinkstateTopologyBuilder extends AbstractTopologyBuilder<Link
     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);
     }
@@ -347,7 +346,7 @@ public final class LinkstateTopologyBuilder extends AbstractTopologyBuilder<Link
         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));
@@ -448,13 +447,13 @@ public final class LinkstateTopologyBuilder extends AbstractTopologyBuilder<Link
         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();
@@ -513,19 +512,14 @@ public final class LinkstateTopologyBuilder extends AbstractTopologyBuilder<Link
         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) {
@@ -536,10 +530,10 @@ public final class LinkstateTopologyBuilder extends AbstractTopologyBuilder<Link
         }
     }
 
-    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);
@@ -631,7 +625,7 @@ public final class LinkstateTopologyBuilder extends AbstractTopologyBuilder<Link
                 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();
@@ -687,7 +681,7 @@ public final class LinkstateTopologyBuilder extends AbstractTopologyBuilder<Link
         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) {
@@ -698,7 +692,7 @@ public final class LinkstateTopologyBuilder extends AbstractTopologyBuilder<Link
         }
     }
 
-    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) {
@@ -761,7 +755,7 @@ public final class LinkstateTopologyBuilder extends AbstractTopologyBuilder<Link
         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) {
@@ -774,7 +768,7 @@ public final class LinkstateTopologyBuilder extends AbstractTopologyBuilder<Link
     }
 
     @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);
 
@@ -793,7 +787,7 @@ public final class LinkstateTopologyBuilder extends AbstractTopologyBuilder<Link
     }
 
     @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);
 
index c6618cdf3cff0f3b593ecc891fc79000faa9e114..d442c65bed184987c21d829692e5cc8bc4b89670 100644 (file)
@@ -9,8 +9,8 @@ package org.opendaylight.bgpcep.bgp.topology.provider;
 
 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;
 
@@ -22,5 +22,5 @@ public interface LocRIBListener extends EventListener {
      * @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);
 }
index 721a3f8b60afc4f17fce69a050777042648400fb..8357bfab0a311839c3e3ebdfb3b8e120121f76f0 100644 (file)
 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;
@@ -34,18 +36,17 @@ import org.slf4j.LoggerFactory;
 /**
  *
  */
-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);
     }
 
@@ -59,7 +60,7 @@ public final class Ipv4ReachabilityTopologyBuilderModule extends
     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 {
@@ -68,7 +69,7 @@ public final class Ipv4ReachabilityTopologyBuilderModule extends
             }
 
             @Override
-            public void close() throws InterruptedException, ExecutionException {
+            public void close() throws InterruptedException, ExecutionException, TransactionCommitFailedException {
                 try {
                     r.close();
                 } finally {
index 9f5050d6a2c4924c315a88c0df44cb6ef3e83091..f153bebda94806b3a4f066fd1865a09c75738fc5 100644 (file)
 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;
@@ -34,18 +36,17 @@ import org.slf4j.LoggerFactory;
 /**
  *
  */
-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);
     }
 
@@ -59,7 +60,7 @@ public final class Ipv6ReachabilityTopologyBuilderModule extends
     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 {
@@ -68,7 +69,7 @@ public final class Ipv6ReachabilityTopologyBuilderModule extends
             }
 
             @Override
-            public void close() throws InterruptedException, ExecutionException {
+            public void close() throws InterruptedException, ExecutionException, TransactionCommitFailedException {
                 try {
                     r.close();
                 } finally {
index b547b9ed1deb20e592508d6b07517e3f5b361e11..1c8ccc8887814373a50c9aec154b50fe51b16e55 100644 (file)
 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;
@@ -34,18 +36,17 @@ import org.slf4j.LoggerFactory;
 /**
  *
  */
-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);
     }
 
@@ -59,7 +60,7 @@ public final class LinkstateTopologyBuilderModule extends
     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 {
@@ -68,7 +69,7 @@ public final class LinkstateTopologyBuilderModule extends
             }
 
             @Override
-            public void close() throws InterruptedException, ExecutionException {
+            public void close() throws InterruptedException, ExecutionException, TransactionCommitFailedException {
                 try {
                     r.close();
                 } finally {
index 8c6960b134702b487d8c541f44793b0480da6b42..8846c53ac84c35e16b148ac031a01dd3aea49f34 100644 (file)
@@ -44,7 +44,7 @@ module odl-bgp-topology-provider-cfg {
                 uses config:service-ref {
                     refine type {
                         mandatory true;
-                        config:required-identity mdsal:binding-data-broker;
+                        config:required-identity mdsal:binding-async-data-broker;
                     }
                 }
             }
@@ -79,7 +79,7 @@ module odl-bgp-topology-provider-cfg {
                 uses config:service-ref {
                     refine type {
                         mandatory true;
-                        config:required-identity mdsal:binding-data-broker;
+                        config:required-identity mdsal:binding-async-data-broker;
                     }
                 }
             }
@@ -114,7 +114,7 @@ module odl-bgp-topology-provider-cfg {
                 uses config:service-ref {
                     refine type {
                         mandatory true;
-                        config:required-identity mdsal:binding-data-broker;
+                        config:required-identity mdsal:binding-async-data-broker;
                     }
                 }
             }
index 337d7c8cff30ad4968d0fd14062004b2c78298d3..ecdc80ad5411475da9fcd6252f7aca48f997c8ff 100644 (file)
@@ -54,7 +54,7 @@ public class Ipv4ReachabilityTopologyBuilderModuleTest extends AbstractRIBImplMo
     public void testCreateBean() throws Exception {
         final CommitStatus status = createIpv4ReachabilityTopoBuilderModuleInstance();
         assertBeanCount(1, FACTORY_NAME);
-        assertStatus(status, 16, 0, 0);
+        assertStatus(status, 15, 0, 0);
     }
 
     @Test
@@ -64,7 +64,7 @@ public class Ipv4ReachabilityTopologyBuilderModuleTest extends AbstractRIBImplMo
         assertBeanCount(1, FACTORY_NAME);
         final CommitStatus status = transaction.commit();
         assertBeanCount(1, FACTORY_NAME);
-        assertStatus(status, 0, 0, 16);
+        assertStatus(status, 0, 0, 15);
     }
 
     @Test
@@ -77,7 +77,7 @@ public class Ipv4ReachabilityTopologyBuilderModuleTest extends AbstractRIBImplMo
         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 {
@@ -90,7 +90,7 @@ public class Ipv4ReachabilityTopologyBuilderModuleTest extends AbstractRIBImplMo
         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();
index 3ab1aaf31893625e925a8b63cbe7116a83a79570..b05aff1641928e562f2fe60d95862546bc6979d9 100644 (file)
@@ -54,7 +54,7 @@ public class Ipv6ReachabilityTopologyBuilderModuleTest extends AbstractRIBImplMo
     public void testCreateBean() throws Exception {
         final CommitStatus status = createIpv6ReachabilityTopoBuilderModuleInstance();
         assertBeanCount(1, FACTORY_NAME);
-        assertStatus(status, 16, 0, 0);
+        assertStatus(status, 15, 0, 0);
     }
 
     @Test
@@ -64,7 +64,7 @@ public class Ipv6ReachabilityTopologyBuilderModuleTest extends AbstractRIBImplMo
         assertBeanCount(1, FACTORY_NAME);
         final CommitStatus status = transaction.commit();
         assertBeanCount(1, FACTORY_NAME);
-        assertStatus(status, 0, 0, 16);
+        assertStatus(status, 0, 0, 15);
     }
 
     @Test
@@ -77,7 +77,7 @@ public class Ipv6ReachabilityTopologyBuilderModuleTest extends AbstractRIBImplMo
         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 {
@@ -90,7 +90,7 @@ public class Ipv6ReachabilityTopologyBuilderModuleTest extends AbstractRIBImplMo
         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();
index b3152c460533ead1b68994b043d0317160b04e50..b934007bc703386f9cd342cbe94be1ac9bdd2ba2 100644 (file)
@@ -54,7 +54,7 @@ public class LinkstateTopologyBuilderModuleTest extends AbstractRIBImplModuleTes
     public void testCreateBean() throws Exception {
         final CommitStatus status = createLinkstateTopologyBuilderModuleInstance();
         assertBeanCount(1, FACTORY_NAME);
-        assertStatus(status, 16, 0, 0);
+        assertStatus(status, 15, 0, 0);
     }
 
     @Test
@@ -64,7 +64,7 @@ public class LinkstateTopologyBuilderModuleTest extends AbstractRIBImplModuleTes
         assertBeanCount(1, FACTORY_NAME);
         final CommitStatus status = transaction.commit();
         assertBeanCount(1, FACTORY_NAME);
-        assertStatus(status, 0, 0, 16);
+        assertStatus(status, 0, 0, 15);
     }
 
     @Test
@@ -77,7 +77,7 @@ public class LinkstateTopologyBuilderModuleTest extends AbstractRIBImplModuleTes
         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 {
@@ -90,7 +90,7 @@ public class LinkstateTopologyBuilderModuleTest extends AbstractRIBImplModuleTes
         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();