Bump upstreams 20/109920/23
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 23 Jan 2024 06:53:36 +0000 (07:53 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 1 Mar 2024 13:23:34 +0000 (14:23 +0100)
Adopt:
- yangtools-13.0.1
- mdsal-13.0.0
- controller-9.0.0
- aaa-0.19.1
- netconf-7.0.0

Also convert a few classes to simpler constructs than
DataTreeChangeListener, as they typically just need the after-image of a
set of changes.

Change-Id: I23dbc8dcd123beaa57bdbd1256ad73cf7d284207
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
113 files changed:
bgp/benchmark-app/src/main/java/org/opendaylight/protocol/bgp/benchmark/app/AppPeerBenchmark.java
bgp/extensions/evpn/pom.xml
bgp/extensions/mvpn/pom.xml
bgp/extensions/route-target/pom.xml
bgp/openconfig-state/src/main/java/org/opendaylight/protocol/bgp/state/StateProviderImpl.java
bgp/openconfig-state/src/test/java/org/opendaylight/protocol/bgp/state/StateProviderImplTest.java
bgp/rib-impl/pom.xml
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/AbstractPeer.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/AdjRibOutListener.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/ApplicationPeer.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPPeer.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/EffectiveRibInWriter.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/LocRibWriter.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/RIBImpl.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/AppPeer.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BGPClusterSingletonService.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/DefaultBgpDeployer.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/OSGiBgpDeployer.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/RibImpl.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/spi/RIB.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AbstractAddPathTest.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AbstractRIBTestSetup.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/ParserToSalTest.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/SynchronizationAndExceptionTest.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/AbstractConfig.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/AppPeerTest.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpDeployerTest.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeerTest.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/RibImplTest.java
bgp/topology-provider/pom.xml
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/config/BgpTopologyDeployerImpl.java
bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/config/TopologyReferenceSingletonServiceImpl.java
bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/spi/TopologyReferenceSingletonService.java
bgp/topology-provider/src/test/java/org/opendaylight/bgpcep/bgp/topology/provider/LinkstateTopologyBuilderTest.java
binding-parent/pom.xml
bmp/bmp-impl/pom.xml
bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/app/BmpMonitoringStationImpl.java
bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/app/BmpRouterImpl.java
bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/config/BmpDeployerImpl.java
bmp/bmp-impl/src/test/java/org/opendaylight/protocol/bmp/impl/app/BmpMonitorImplTest.java
config-loader/config-loader-impl/src/main/java/org/opendaylight/bgpcep/config/loader/impl/OSGiConfigLoader.java
config-loader/config-loader-impl/src/main/java/org/opendaylight/bgpcep/config/loader/impl/SimpleConfigLoader.java
config-loader/config-loader-impl/src/test/java/org/opendaylight/bgpcep/config/loader/impl/AbstractConfigLoaderTest.java
config-loader/config-loader-impl/src/test/java/org/opendaylight/bgpcep/config/loader/impl/OSGiConfigLoaderTest.java
config-loader/config-loader-impl/src/test/java/org/opendaylight/bgpcep/config/loader/impl/SimpleConfigLoaderTest.java
data-change-counter/src/main/java/org/opendaylight/protocol/data/change/counter/TopologyDataChangeCounter.java
data-change-counter/src/main/java/org/opendaylight/protocol/data/change/counter/TopologyDataChangeCounterDeployer.java
features/odl-bgpcep-bgp-benchmark/src/main/feature/feature.xml
features/odl-bgpcep-bgp-dependencies/src/main/feature/feature.xml
features/odl-bgpcep-bgp-evpn/src/main/feature/feature.xml
features/odl-bgpcep-bgp-labeled-unicast/src/main/feature/feature.xml
features/odl-bgpcep-bgp-linkstate/src/main/feature/feature.xml
features/odl-bgpcep-bgp-openconfig-rp-impl/src/main/feature/feature.xml
features/odl-bgpcep-bgp-openconfig-rp-statement/src/main/feature/feature.xml
features/odl-bgpcep-bgp-parser-api/src/main/feature/feature.xml
features/odl-bgpcep-bgp-rib-api/src/main/feature/feature.xml
features/odl-bgpcep-bgp-rib-impl/pom.xml
features/odl-bgpcep-bgp-rib-impl/src/main/feature/feature.xml
features/odl-bgpcep-bmp-config-loader/src/main/feature/feature.xml
features/odl-bgpcep-concepts/src/main/feature/feature.xml
features/odl-bgpcep-config-loader-impl/src/main/feature/feature.xml
features/odl-bgpcep-config-loader-spi/src/main/feature/feature.xml
features/odl-bgpcep-data-change-counter/src/main/feature/feature.xml
features/odl-bgpcep-graph-api/src/main/feature/feature.xml
features/odl-bgpcep-graph/src/main/feature/feature.xml
features/odl-bgpcep-pcep-impl/pom.xml
features/odl-bgpcep-pcep-impl/src/main/feature/feature.xml
features/odl-bgpcep-pcep-p2mp-te-lsp/src/main/feature/feature.xml
features/odl-bgpcep-programming-api/src/main/feature/feature.xml
features/odl-bgpcep-programming-impl/pom.xml
features/odl-bgpcep-programming-impl/src/main/feature/feature.xml
features/odl-bgpcep-rsvp-api/src/main/feature/feature.xml
features/odl-bgpcep-topology-api/src/main/feature/feature.xml
features/odl-bgpcep-topology-config-loader/src/main/feature/feature.xml
features/odl-bgpcep-topology-tunnel-api/src/main/feature/feature.xml
graph/graph-impl/src/main/java/org/opendaylight/graph/impl/ConnectedGraphServer.java
graph/graph-impl/src/main/java/org/opendaylight/graph/impl/GraphListener.java
parent/pom.xml
pcep/segment-routing/pom.xml
pcep/server/server-provider/src/main/java/org/opendaylight/bgpcep/pcep/server/provider/DefaultPceServerProvider.java
pcep/server/server-provider/src/main/java/org/opendaylight/bgpcep/pcep/server/provider/ManagedTeNode.java
pcep/server/server-provider/src/main/java/org/opendaylight/bgpcep/pcep/server/provider/ManagedTePath.java
pcep/server/server-provider/src/main/java/org/opendaylight/bgpcep/pcep/server/provider/PathComputationImpl.java
pcep/server/server-provider/src/main/java/org/opendaylight/bgpcep/pcep/server/provider/PathManagerListener.java
pcep/server/server-provider/src/main/java/org/opendaylight/bgpcep/pcep/server/provider/PathManagerProvider.java
pcep/server/server-provider/src/main/java/org/opendaylight/bgpcep/pcep/server/provider/PcepTopologyListener.java
pcep/topology/topology-provider/pom.xml
pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/PCEPStatefulPeerProposal.java
pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/PCEPTopologyInstance.java
pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/PCEPTopologySingleton.java
pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/PCEPTopologyTracker.java
pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/TopologyNodeState.java
pcep/topology/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/TopologyStatsRpc.java
pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/PCEPStatefulPeerProposalTest.java
pcep/topology/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/TopologyStatsRpcTest.java
pcep/tunnel/tunnel-provider/pom.xml
pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/CreateTunnelInstructionExecutor.java
pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/DestroyTunnelInstructionExecutor.java
pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/NodeChangedListener.java
pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/PCEPTunnelClusterSingletonService.java
pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/PCEPTunnelTopologyProvider.java
pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunnelProviderDependencies.java
pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunnelProviderDeployer.java
pcep/tunnel/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/UpdateTunnelInstructionExecutor.java
pcep/tunnel/tunnel-provider/src/test/java/org/opendaylight/bgpcep/pcep/tunnel/provider/NodeChangedListenerTest.java
pcep/tunnel/tunnel-provider/src/test/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunnelProgrammingTest.java
programming/impl/pom.xml
programming/impl/src/main/java/org/opendaylight/bgpcep/programming/impl/DefaultInstructionScheduler.java
programming/impl/src/main/java/org/opendaylight/bgpcep/programming/impl/DefaultInstructionSchedulerFactory.java
programming/impl/src/test/java/org/opendaylight/bgpcep/programming/impl/AbstractProgrammingTest.java
programming/spi/pom.xml
programming/spi/src/main/java/org/opendaylight/bgpcep/programming/spi/InstructionScheduler.java

index 526e1b5a8c3895b9e4aa894f2150b8434e1541a1..04cb1bcc94c6ff09b5ce1f61a95ab4267be83899 100644 (file)
@@ -22,9 +22,7 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
-import org.opendaylight.mdsal.binding.api.Transaction;
 import org.opendaylight.mdsal.binding.api.TransactionChain;
-import org.opendaylight.mdsal.binding.api.TransactionChainListener;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
@@ -74,13 +72,14 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.Rpc;
 import org.opendaylight.yangtools.yang.binding.util.BindingMap;
+import org.opendaylight.yangtools.yang.common.Empty;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public final class AppPeerBenchmark implements TransactionChainListener, AutoCloseable {
+public final class AppPeerBenchmark implements FutureCallback<Empty>, AutoCloseable {
 
     private static final Logger LOG = LoggerFactory.getLogger(AppPeerBenchmark.class);
 
@@ -105,7 +104,8 @@ public final class AppPeerBenchmark implements TransactionChainListener, AutoClo
     public AppPeerBenchmark(final DataBroker bindingDataBroker, final RpcProviderService rpcProviderRegistry,
             final String appRibId) {
         this.appRibId = requireNonNull(appRibId);
-        txChain = bindingDataBroker.createMergingTransactionChain(this);
+        txChain = bindingDataBroker.createMergingTransactionChain();
+        txChain.addCallback(this);
 
         appIID = InstanceIdentifier.builder(ApplicationRib.class,
             new ApplicationRibKey(new ApplicationRibId(appRibId))).build();
@@ -141,16 +141,14 @@ public final class AppPeerBenchmark implements TransactionChainListener, AutoClo
     }
 
     @Override
-    public void onTransactionChainFailed(final TransactionChain chain, final Transaction transaction,
-            final Throwable cause) {
-        LOG.error("Broken chain {} in DatastoreBaAbstractWrite, transaction {}", chain, transaction.getIdentifier(),
-            cause);
+    public void onFailure(final Throwable cause) {
+        LOG.error("Broken chain in DatastoreBaAbstractWrite", cause);
         close();
     }
 
     @Override
-    public void onTransactionChainSuccessful(final TransactionChain chain) {
-        LOG.debug("DatastoreBaAbstractWrite closed successfully, chain {}", chain);
+    public void onSuccess(final Empty result) {
+        LOG.debug("DatastoreBaAbstractWrite closed successfully");
     }
 
     @VisibleForTesting
index ef8b2275c8e0c4a6dce583ffe4d6bcc83d0b60fa..7055c88fb5e17b84abab747c899f96ee601c2961 100644 (file)
     <name>${project.artifactId}</name>
 
     <dependencies>
+        <dependency>
+            <groupId>com.github.spotbugs</groupId>
+            <artifactId>spotbugs-annotations</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>com.guicedee.services</groupId>
+            <artifactId>javax.inject</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.kohsuke.metainf-services</groupId>
+            <artifactId>metainf-services</artifactId>
+        </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>bgp-mvpn</artifactId>
             <groupId>org.opendaylight.mdsal</groupId>
             <artifactId>mdsal-rfc8294-netty</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.kohsuke.metainf-services</groupId>
-            <artifactId>metainf-services</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.guicedee.services</groupId>
-            <artifactId>javax.inject</artifactId>
-            <optional>true</optional>
-        </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.service.component.annotations</artifactId>
index 2fb8d8a13625ff76288fd4ca1214e077d35fa505..7a9b0d585a7c6f3a0b047ceb778980804a32f37a 100644 (file)
     <name>${project.artifactId}</name>
 
     <dependencies>
+        <dependency>
+            <groupId>com.github.spotbugs</groupId>
+            <artifactId>spotbugs-annotations</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>com.guicedee.services</groupId>
+            <artifactId>javax.inject</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.kohsuke.metainf-services</groupId>
+            <artifactId>metainf-services</artifactId>
+        </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>bgp-inet</artifactId>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-common-netty</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.kohsuke.metainf-services</groupId>
-            <artifactId>metainf-services</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.guicedee.services</groupId>
-            <artifactId>javax.inject</artifactId>
-            <optional>true</optional>
-        </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.service.component.annotations</artifactId>
index c4b49a74e758a9848a0d9e2bddedbd0f58b27cf6..9fbcc66c6169f3d9011cb9b39758a7ec18fcf252 100644 (file)
     <name>${project.artifactId}</name>
 
     <dependencies>
+        <dependency>
+            <groupId>com.github.spotbugs</groupId>
+            <artifactId>spotbugs-annotations</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>com.guicedee.services</groupId>
+            <artifactId>javax.inject</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.kohsuke.metainf-services</groupId>
+            <artifactId>metainf-services</artifactId>
+        </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>bgp-parser-impl</artifactId>
             <groupId>org.opendaylight.mdsal.model</groupId>
             <artifactId>yang-ext</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.kohsuke.metainf-services</groupId>
-            <artifactId>metainf-services</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.guicedee.services</groupId>
-            <artifactId>javax.inject</artifactId>
-            <optional>true</optional>
-        </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.service.component.annotations</artifactId>
index 79de74d234cdb71d0e581fc7a7bcf456251c7524..7d7571302df621ee8805ec78f8634b40a0f8c72b 100644 (file)
@@ -30,9 +30,7 @@ import javax.inject.Singleton;
 import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.Transaction;
 import org.opendaylight.mdsal.binding.api.TransactionChain;
-import org.opendaylight.mdsal.binding.api.TransactionChainListener;
 import org.opendaylight.mdsal.binding.api.WriteOperations;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.CommitInfo;
@@ -59,6 +57,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.bgp.rib.RibKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.Empty;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Deactivate;
@@ -75,7 +74,7 @@ import org.slf4j.LoggerFactory;
 @Component(service = {})
 @Designate(ocd = StateProviderImpl.Configuration.class)
 @RequireServiceComponentRuntime
-public final class StateProviderImpl implements TransactionChainListener, AutoCloseable {
+public final class StateProviderImpl implements FutureCallback<Empty>, AutoCloseable {
     @ObjectClassDefinition
     public @interface Configuration {
         @AttributeDefinition(description = "Name of the OpenConfig network instance to which to bind")
@@ -130,7 +129,8 @@ public final class StateProviderImpl implements TransactionChainListener, AutoCl
                 .child(NetworkInstance.class, new NetworkInstanceKey(networkInstanceName));
         this.scheduler = scheduler;
 
-        transactionChain = this.dataBroker.createMergingTransactionChain(this);
+        transactionChain = this.dataBroker.createMergingTransactionChain();
+        transactionChain.addCallback(this);
         final TimerTask task = new TimerTask() {
             @Override
             @SuppressWarnings("checkstyle:IllegalCatch")
@@ -229,19 +229,18 @@ public final class StateProviderImpl implements TransactionChainListener, AutoCl
     }
 
     @Override
-    public synchronized void onTransactionChainFailed(final TransactionChain chain, final Transaction transaction,
-            final Throwable cause) {
-        LOG.error("Transaction chain {} failed for tx {}",
-                chain, transaction != null ? transaction.getIdentifier() : null, cause);
+    public synchronized void onFailure(final Throwable cause) {
+        LOG.error("Transaction chain failed", cause);
 
         if (!closed.get()) {
             transactionChain.close();
-            transactionChain = dataBroker.createMergingTransactionChain(this);
+            transactionChain = dataBroker.createMergingTransactionChain();
+            transactionChain.addCallback(this);
         }
     }
 
     @Override
-    public void onTransactionChainSuccessful(final TransactionChain chain) {
-        LOG.debug("Transaction chain {} successful.", chain);
+    public void onSuccess(final Empty result) {
+        LOG.debug("Transaction chain successfu.");
     }
 }
index 651c26e2e0184af6ca68595a0056728df67409d5..cb80ea56b7337cf1d2625337563c934798b061a5 100644 (file)
@@ -278,7 +278,7 @@ public class StateProviderImplTest extends AbstractDataBrokerTest {
             public DOMStore createOperationalDatastore() {
                 realOperStore = new InMemoryDOMDataStore("OPER", getDataTreeChangeListenerExecutor());
                 spiedOperStore = spy(realOperStore);
-                getSchemaService().registerSchemaContextListener(spiedOperStore);
+                getSchemaService().registerSchemaContextListener(spiedOperStore::onModelContextUpdated);
                 return spiedOperStore;
             }
 
index 5250361e94a8e9b630eb8423fdff0e8bf4dd441d..41aac2c58b9aac21e48f9be1c4275a30303ce734 100644 (file)
         </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
-            <artifactId>mdsal-singleton-common-api</artifactId>
+            <artifactId>mdsal-singleton-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
index 54967c2603dda6e04af971874986296e8164882d..96ef6019618fc6b59989f499feb138f8b6214200 100644 (file)
@@ -27,7 +27,6 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteOperations;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
-import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
 import org.opendaylight.protocol.bgp.mode.impl.BGPRouteEntryExportParametersImpl;
 import org.opendaylight.protocol.bgp.rib.impl.spi.PeerTransactionChain;
 import org.opendaylight.protocol.bgp.rib.impl.spi.RIB;
@@ -58,6 +57,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.type
 import org.opendaylight.yangtools.yang.binding.ChildOf;
 import org.opendaylight.yangtools.yang.binding.ChoiceIn;
 import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.Empty;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
@@ -66,7 +66,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 abstract class AbstractPeer extends BGPPeerStateImpl implements BGPRouteEntryImportParameters, Peer,
-        PeerTransactionChain, DOMTransactionChainListener {
+        PeerTransactionChain, FutureCallback<Empty> {
     private static final Logger LOG = LoggerFactory.getLogger(AbstractPeer.class);
 
     final RTCClientRouteCache rtCache = new RTCClientRouteCache();
@@ -185,8 +185,8 @@ abstract class AbstractPeer extends BGPPeerStateImpl implements BGPRouteEntryImp
     }
 
     @Override
-    public final void onTransactionChainSuccessful(final DOMTransactionChain chain) {
-        LOG.debug("Transaction chain {} successful.", chain);
+    public final void onSuccess(final Empty value) {
+        LOG.debug("Transaction chain successful");
     }
 
     @Override
@@ -504,7 +504,8 @@ abstract class AbstractPeer extends BGPPeerStateImpl implements BGPRouteEntryImp
     final synchronized void createDomChain() {
         if (domChain == null) {
             LOG.info("Creating DOM peer chain {}", getPeerId());
-            domChain = rib.createPeerDOMChain(this);
+            domChain = rib.createPeerDOMChain();
+            domChain.addCallback(this);
         }
     }
 
index 79d4a59cac7d6c8d5f088e0791dd5adb0c6d027a..f57c877acc2826f9905abe7edd6ded682a9f7c3f 100644 (file)
@@ -19,8 +19,8 @@ import java.util.concurrent.atomic.LongAdder;
 import java.util.stream.Collectors;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.dom.api.ClusteredDOMDataTreeChangeListener;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.protocol.bgp.rib.impl.spi.Codecs;
 import org.opendaylight.protocol.bgp.rib.impl.spi.CodecsRegistry;
@@ -36,7 +36,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.update.message.NlriBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.update.message.WithdrawnRoutesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.PeerId;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@@ -53,7 +53,7 @@ import org.slf4j.LoggerFactory;
  * Instantiated for each peer and table, listens on a particular peer's adj-rib-out, performs transcoding to BA form
  * (message) and sends it down the channel. This class is NOT thread-safe.
  */
-final class AdjRibOutListener implements ClusteredDOMDataTreeChangeListener, PrefixesSentCounters {
+final class AdjRibOutListener implements DOMDataTreeChangeListener, PrefixesSentCounters {
     private static final Logger LOG = LoggerFactory.getLogger(AdjRibOutListener.class);
     private static final QName PREFIX_QNAME = QName.create(Ipv4Route.QNAME, "prefix").intern();
     private static final QName PATHID_QNAME = QName.create(Ipv4Route.QNAME, "path-id").intern();
@@ -65,12 +65,12 @@ final class AdjRibOutListener implements ClusteredDOMDataTreeChangeListener, Pre
     private final RIBSupport<?, ?> support;
     // FIXME: this field needs to be eliminated: either subclass this class or create a filtering ribsupport
     private final boolean mpSupport;
-    private final ListenerRegistration<AdjRibOutListener> registerDataTreeChangeListener;
+    private final Registration registerDataTreeChangeListener;
     private final LongAdder prefixesSentCounter = new LongAdder();
     private boolean initalState;
 
     private AdjRibOutListener(final PeerId peerId, final YangInstanceIdentifier ribId, final CodecsRegistry registry,
-            final RIBSupport<?, ?> support, final DOMDataTreeChangeService service, final ChannelOutputLimiter session,
+            final RIBSupport<?, ?> support, final DataTreeChangeExtension service, final ChannelOutputLimiter session,
             final boolean mpSupport) {
         this.session = requireNonNull(session);
         this.support = requireNonNull(support);
@@ -84,8 +84,8 @@ final class AdjRibOutListener implements ClusteredDOMDataTreeChangeListener, Pre
          *  send EOR marker. initialState flag is distinguishing between first ODTC execution and the rest.
          */
         initalState = true;
-        registerDataTreeChangeListener = service.registerDataTreeChangeListener(
-                new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, adjRibOutId), this);
+        registerDataTreeChangeListener = service.registerTreeChangeListener(
+                DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, adjRibOutId), this);
     }
 
     static AdjRibOutListener create(
@@ -93,7 +93,7 @@ final class AdjRibOutListener implements ClusteredDOMDataTreeChangeListener, Pre
             final @NonNull YangInstanceIdentifier ribId,
             final @NonNull CodecsRegistry registry,
             final @NonNull RIBSupport<?, ?> support,
-            final @NonNull DOMDataTreeChangeService service,
+            final @NonNull DataTreeChangeExtension service,
             final @NonNull ChannelOutputLimiter session,
             final boolean mpSupport) {
         return new AdjRibOutListener(peerId, ribId, registry, support, service, session, mpSupport);
index a021c6442f740d73ad1487d4301293a4f4f6ef15..e1759d8d5a26d9d77389ba3160b1c730c33c6ef9 100644 (file)
@@ -29,9 +29,8 @@ import java.util.Set;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.ClusteredDOMDataTreeChangeListener;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeTransaction;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
 import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer;
@@ -51,7 +50,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.PeerRole;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.RouteTarget;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
@@ -94,7 +92,7 @@ public class ApplicationPeer extends AbstractPeer implements ClusteredDOMDataTre
     private final BGPTableTypeRegistryConsumer tableTypeRegistry;
     private EffectiveRibInWriter effectiveRibInWriter;
     private AdjRibInWriter adjRibInWriter;
-    private ListenerRegistration<ApplicationPeer> registration;
+    private Registration registration;
     private final Set<NodeIdentifierWithPredicates> supportedTables = new HashSet<>();
     private final BGPSessionStateImpl bgpSessionState = new BGPSessionStateImpl();
     private Registration trackerRegistration;
@@ -128,7 +126,7 @@ public class ApplicationPeer extends AbstractPeer implements ClusteredDOMDataTre
         peerRibOutIId = peerRib.node(ADJRIBOUT_NID).node(TABLES_NID).toOptimized();
     }
 
-    public synchronized void instantiateServiceInstance(final DOMDataTreeChangeService dataTreeChangeService,
+    public synchronized void instantiateServiceInstance(final DataTreeChangeExtension dataTreeChangeService,
             final DOMDataTreeIdentifier appPeerDOMId) {
         setActive(true);
         final var localTables = rib.getLocalTablesKeys();
@@ -148,16 +146,19 @@ public class ApplicationPeer extends AbstractPeer implements ClusteredDOMDataTre
         final RegisterAppPeerListener registerAppPeerListener = () -> {
             synchronized (this) {
                 if (getDomChain() != null) {
-                    registration = dataTreeChangeService.registerDataTreeChangeListener(appPeerDOMId, this);
+                    registration = dataTreeChangeService.registerTreeChangeListener(appPeerDOMId, this);
                 }
             }
         };
         peerPath = createPeerPath(peerId);
         adjRibInWriter = adjRibInWriter.transform(peerId, peerPath, context, localTables,
                 Map.of(), registerAppPeerListener);
-        effectiveRibInWriter = new EffectiveRibInWriter(this, rib,
-                rib.createPeerDOMChain(this), peerPath, localTables, tableTypeRegistry,
-                new ArrayList<>(), rtCache);
+
+        final var chain = rib.createPeerDOMChain();
+        chain.addCallback(this);
+
+        effectiveRibInWriter = new EffectiveRibInWriter(this, rib, chain, peerPath, localTables, tableTypeRegistry,
+            new ArrayList<>(), rtCache);
         effectiveRibInWriter.init();
         bgpSessionState.registerMessagesCounter(this);
         trackerRegistration = rib.getPeerTracker().registerPeer(this);
@@ -331,9 +332,8 @@ public class ApplicationPeer extends AbstractPeer implements ClusteredDOMDataTre
     }
 
     @Override
-    public void onTransactionChainFailed(final DOMTransactionChain chain, final DOMDataTreeTransaction transaction,
-            final Throwable cause) {
-        LOG.error("Transaction chain {} failed.", transaction != null ? transaction.getIdentifier() : null, cause);
+    public void onFailure(final Throwable cause) {
+        LOG.error("Transaction chain failed.", cause);
     }
 
     @Override
index 7ea1f2e41d15adff1c59ccdd5ec966e42216accb..cf98d83220be5d687f26249eefda50ac819feb29 100644 (file)
@@ -21,6 +21,7 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
 import com.google.common.util.concurrent.FluentFuture;
+import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -40,9 +41,6 @@ import org.checkerframework.checker.lock.qual.Holding;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.common.api.CommitInfo;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeTransaction;
-import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
-import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
 import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer;
 import org.opendaylight.protocol.bgp.parser.BGPDocumentedException;
 import org.opendaylight.protocol.bgp.parser.BGPError;
@@ -100,6 +98,7 @@ import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.Notification;
 import org.opendaylight.yangtools.yang.binding.Rpc;
+import org.opendaylight.yangtools.yang.common.Empty;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
 import org.slf4j.Logger;
@@ -367,15 +366,16 @@ public class BGPPeer extends AbstractPeer implements BGPSessionListener {
         currentSession = session;
         sessionUp = true;
 
-        ribOutChain = rib.createPeerDOMChain(new DOMTransactionChainListener() {
+        final var chain = rib.createPeerDOMChain();
+        ribOutChain = chain;
+        chain.addCallback(new FutureCallback<Empty>() {
             @Override
-            public void onTransactionChainSuccessful(final DOMTransactionChain chain) {
+            public void onSuccess(final Empty result) {
                 LOG.debug("RibOut transaction chain {} successful.", chain);
             }
 
             @Override
-            public void onTransactionChainFailed(final DOMTransactionChain chain,
-                    final DOMDataTreeTransaction transaction, final Throwable cause) {
+            public void onFailure(final Throwable cause) {
                 onRibOutChainFailed(cause);
             }
         });
@@ -499,10 +499,10 @@ public class BGPPeer extends AbstractPeer implements BGPSessionListener {
     }
 
     private synchronized void createEffRibInWriter() {
-        effRibInWriter = new EffectiveRibInWriter(this, rib,
-            rib.createPeerDOMChain(this),
-            peerPath, tables, tableTypeRegistry,
-            rtMemberships,
+        final var chain = rib.createPeerDOMChain();
+        chain.addCallback(this);
+
+        effRibInWriter = new EffectiveRibInWriter(this, rib, chain, peerPath, tables, tableTypeRegistry, rtMemberships,
             rtCache);
     }
 
@@ -690,8 +690,7 @@ public class BGPPeer extends AbstractPeer implements BGPSessionListener {
     }
 
     @Override
-    public synchronized void onTransactionChainFailed(final DOMTransactionChain chain,
-            final DOMDataTreeTransaction transaction, final Throwable cause) {
+    public synchronized void onFailure(final Throwable cause) {
         LOG.error("Transaction domChain failed.", cause);
         releaseConnection(true);
     }
index f97892a5afc28575f175f5f4807299e2c762498a..709ae409ad98cfc0e83bbd16f2e2dd6cf2975b81 100644 (file)
@@ -38,8 +38,8 @@ import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.dom.api.ClusteredDOMDataTreeChangeListener;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
@@ -67,7 +67,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.type
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv6AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.MplsLabeledVpnSubsequentAddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.RouteTarget;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
@@ -102,8 +102,7 @@ import org.slf4j.LoggerFactory;
  * This class is NOT thread-safe.
  */
 final class EffectiveRibInWriter implements PrefixesReceivedCounters, PrefixesInstalledCounters,
-        AutoCloseable, ClusteredDOMDataTreeChangeListener {
-
+        AutoCloseable, DOMDataTreeChangeListener {
     private static final Logger LOG = LoggerFactory.getLogger(EffectiveRibInWriter.class);
     private static final TablesKey IVP4_VPN_TABLE_KEY =
         new TablesKey(Ipv4AddressFamily.VALUE, MplsLabeledVpnSubsequentAddressFamily.VALUE);
@@ -120,11 +119,11 @@ final class EffectiveRibInWriter implements PrefixesReceivedCounters, PrefixesIn
     private final RIBSupportContextRegistry registry;
     private final YangInstanceIdentifier peerIId;
     private final YangInstanceIdentifier effRibTables;
-    private final DOMDataTreeChangeService service;
+    private final DataTreeChangeExtension service;
     private final List<RouteTarget> rtMemberships;
     private final RibOutRefresh vpnTableRefresher;
     private final ClientRouteTargetContrainCache rtCache;
-    private ListenerRegistration<?> reg;
+    private Registration reg;
     private DOMTransactionChain chain;
     private final Map<TablesKey, LongAdder> prefixesReceived;
     private final Map<TablesKey, LongAdder> prefixesInstalled;
@@ -160,10 +159,10 @@ final class EffectiveRibInWriter implements PrefixesReceivedCounters, PrefixesIn
     }
 
     public void init() {
-        final DOMDataTreeIdentifier treeId = new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL,
+        final DOMDataTreeIdentifier treeId = DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL,
             peerIId.node(ADJRIBIN_NID).node(TABLES_NID));
         LOG.debug("Registered Effective RIB on {}", peerIId);
-        reg = requireNonNull(service).registerDataTreeChangeListener(treeId, this);
+        reg = requireNonNull(service).registerTreeChangeListener(treeId, this);
     }
 
     private static Map<TablesKey, LongAdder> buildPrefixesTables(final Set<TablesKey> tables) {
index 0e217ec6dab37b46cb7a4549c2acccae358fd102..d317126390afec5ef4cbfa2d55fe77e7dbf1b1bf 100644 (file)
@@ -31,8 +31,8 @@ import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.dom.api.ClusteredDOMDataTreeChangeListener;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteOperations;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
@@ -57,7 +57,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.Tables;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Routes;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.ChildOf;
 import org.opendaylight.yangtools.yang.binding.ChoiceIn;
 import org.opendaylight.yangtools.yang.binding.DataObject;
@@ -74,15 +74,14 @@ import org.slf4j.LoggerFactory;
 
 // This class is NOT thread-safe
 final class LocRibWriter<C extends Routes & DataObject & ChoiceIn<Tables>, S extends ChildOf<? super C>>
-        implements AutoCloseable, RibOutRefresh, TotalPrefixesCounter, TotalPathsCounter,
-        ClusteredDOMDataTreeChangeListener {
+        implements AutoCloseable, RibOutRefresh, TotalPrefixesCounter, TotalPathsCounter, DOMDataTreeChangeListener {
 
     private static final Logger LOG = LoggerFactory.getLogger(LocRibWriter.class);
 
     private final Map<String, RouteEntry<C, S>> routeEntries = new HashMap<>();
     private final long ourAs;
     private final RIBSupport<C, S> ribSupport;
-    private final DOMDataTreeChangeService dataBroker;
+    private final DataTreeChangeExtension dataBroker;
     private final PathSelectionMode pathSelectionMode;
     private final LongAdder totalPathsCounter = new LongAdder();
     private final LongAdder totalPrefixesCounter = new LongAdder();
@@ -93,13 +92,13 @@ final class LocRibWriter<C extends Routes & DataObject & ChoiceIn<Tables>, S ext
 
     private DOMTransactionChain chain;
     @GuardedBy("this")
-    private ListenerRegistration<?> reg;
+    private Registration reg;
 
     private LocRibWriter(final RIBSupport<C, S> ribSupport,
             final DOMTransactionChain chain,
             final YangInstanceIdentifier ribIId,
             final Uint32 ourAs,
-            final DOMDataTreeChangeService dataBroker,
+            final DataTreeChangeExtension dataBroker,
             final BGPRibRoutingPolicy ribPolicies,
             final BGPPeerTracker peerTracker,
             final AfiSafiType afiSafiType,
@@ -126,7 +125,7 @@ final class LocRibWriter<C extends Routes & DataObject & ChoiceIn<Tables>, S ext
             final @NonNull DOMTransactionChain chain,
             final @NonNull YangInstanceIdentifier ribIId,
             final @NonNull AsNumber ourAs,
-            final @NonNull DOMDataTreeChangeService dataBroker,
+            final @NonNull DataTreeChangeExtension dataBroker,
             final BGPRibRoutingPolicy ribPolicies,
             final @NonNull BGPPeerTracker peerTracker,
             final @NonNull PathSelectionMode pathSelectionStrategy) {
@@ -152,7 +151,7 @@ final class LocRibWriter<C extends Routes & DataObject & ChoiceIn<Tables>, S ext
             }
         }, MoreExecutors.directExecutor());
 
-        reg = dataBroker.registerDataTreeChangeListener(new DOMDataTreeIdentifier(
+        reg = dataBroker.registerTreeChangeListener(DOMDataTreeIdentifier.of(
             LogicalDatastoreType.OPERATIONAL, ribIId.node(PEER_NID).node(PEER_NID).node(EFFRIBIN_NID).node(TABLES_NID)
                 .node(locRibTableIID.getLastPathArgument())), this);
     }
index ad0fdd7ccf0367bace0f1b715a6f94924f734f41..622171aac35fe85ae52dc6f94ef55d07a26b52b5 100644 (file)
@@ -31,12 +31,9 @@ import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeTransaction;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
-import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
 import org.opendaylight.protocol.bgp.mode.api.PathSelectionMode;
 import org.opendaylight.protocol.bgp.mode.impl.base.BasePathSelectionModeFactory;
 import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer;
@@ -65,6 +62,7 @@ import org.opendaylight.yangtools.yang.binding.ChildOf;
 import org.opendaylight.yangtools.yang.binding.ChoiceIn;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.Empty;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.InstanceIdentifierBuilder;
@@ -77,7 +75,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 // This class is thread-safe
-public final class RIBImpl extends BGPRibStateImpl implements RIB, DOMTransactionChainListener {
+public final class RIBImpl extends BGPRibStateImpl implements RIB {
     private static final Logger LOG = LoggerFactory.getLogger(RIBImpl.class);
     private static final QName RIB_ID_QNAME = QName.create(Rib.QNAME, "id").intern();
 
@@ -92,7 +90,7 @@ public final class RIBImpl extends BGPRibStateImpl implements RIB, DOMTransactio
     private final RIBSupportContextRegistryImpl ribContextRegistry;
     private final CodecsRegistry codecsRegistry;
     private final BGPTableTypeRegistryConsumer tableTypeRegistry;
-    private final DOMDataBrokerExtension domService;
+    private final DataTreeChangeExtension domService;
     private final Map<DOMTransactionChain, LocRibWriter<?, ?>> txChainToLocRibWriter = new HashMap<>();
     private final Map<TablesKey, RibOutRefresh> vpnTableRefresher = new HashMap<>();
     private final Map<TablesKey, PathSelectionMode> bestPathSelectionStrategies;
@@ -131,7 +129,7 @@ public final class RIBImpl extends BGPRibStateImpl implements RIB, DOMTransactio
             .collect(Collectors.toCollection(HashSet::new));
 
         this.domDataBroker = requireNonNull(domDataBroker);
-        domService = domDataBroker.getExtensions().get(DOMDataTreeChangeService.class);
+        domService = domDataBroker.extension(DataTreeChangeExtension.class);
         this.extensions = requireNonNull(extensions);
         this.ribPolicies = requireNonNull(ribPolicies);
         this.codecsRegistry = codecsRegistry;
@@ -172,7 +170,8 @@ public final class RIBImpl extends BGPRibStateImpl implements RIB, DOMTransactio
             return;
         }
         LOG.debug("Creating LocRIB writer for key {}", key);
-        final DOMTransactionChain txChain = createPeerDOMChain(this);
+        final DOMTransactionChain txChain = createPeerDOMChain();
+        addCallback(txChain);
         PathSelectionMode pathSelectionStrategy = bestPathSelectionStrategies.get(key);
         if (pathSelectionStrategy == null) {
             pathSelectionStrategy = BasePathSelectionModeFactory.createBestPathSelectionStrategy();
@@ -219,25 +218,32 @@ public final class RIBImpl extends BGPRibStateImpl implements RIB, DOMTransactio
         return dispatcher;
     }
 
-    @Override
-    public synchronized void onTransactionChainFailed(final DOMTransactionChain chain,
-            final DOMDataTreeTransaction transaction, final Throwable cause) {
-        LOG.error("Broken chain in RIB {} transaction {}",
-            getInstanceIdentifier(), transaction != null ? transaction.getIdentifier() : null, cause);
+    private void addCallback(final DOMTransactionChain txChain) {
+        txChain.addCallback(new FutureCallback<Empty>() {
+            @Override
+            public void onSuccess(final Empty result) {
+                LOG.info("RIB {} closed successfully", getInstanceIdentifier());
+            }
+
+            @Override
+            public void onFailure(final Throwable cause) {
+                RIBImpl.this.onFailure(txChain, cause);
+            }
+        });
+    }
+
+    private synchronized void onFailure(final DOMTransactionChain chain, final Throwable cause) {
+        LOG.error("Broken chain in RIB {}", getInstanceIdentifier(), cause);
         final LocRibWriter<?, ?> locRibWriter = txChainToLocRibWriter.remove(chain);
         if (locRibWriter != null) {
-            final DOMTransactionChain newChain = createPeerDOMChain(this);
+            final DOMTransactionChain newChain = createPeerDOMChain();
+            addCallback(newChain);
             startLocRib(locRibWriter.getTableKey());
             locRibWriter.restart(newChain);
             txChainToLocRibWriter.put(newChain, locRibWriter);
         }
     }
 
-    @Override
-    public void onTransactionChainSuccessful(final DOMTransactionChain chain) {
-        LOG.info("RIB {} closed successfully", getInstanceIdentifier());
-    }
-
     @Override
     public Set<TablesKey> getLocalTablesKeys() {
         return localTablesKeys;
@@ -267,8 +273,8 @@ public final class RIBImpl extends BGPRibStateImpl implements RIB, DOMTransactio
     }
 
     @Override
-    public DOMDataTreeChangeService getService() {
-        return (DOMDataTreeChangeService) domService;
+    public DataTreeChangeExtension getService() {
+        return domService;
     }
 
     @Override
@@ -277,8 +283,8 @@ public final class RIBImpl extends BGPRibStateImpl implements RIB, DOMTransactio
     }
 
     @Override
-    public DOMTransactionChain createPeerDOMChain(final DOMTransactionChainListener listener) {
-        return domDataBroker.createMergingTransactionChain(listener);
+    public DOMTransactionChain createPeerDOMChain() {
+        return domDataBroker.createMergingTransactionChain();
     }
 
     @Override
@@ -297,10 +303,12 @@ public final class RIBImpl extends BGPRibStateImpl implements RIB, DOMTransactio
     }
 
     public synchronized void instantiateServiceInstance() {
+        LOG.debug("Instantiating RIB table {} at {}", ribId, yangRibId);
+
         isServiceInstantiated = true;
         setActive(true);
-        domChain = domDataBroker.createMergingTransactionChain(this);
-        LOG.debug("Instantiating RIB table {} at {}", ribId, yangRibId);
+        domChain = domDataBroker.createMergingTransactionChain();
+        addCallback(domChain);
 
         final ContainerNode bgpRib = Builders.containerBuilder().withNodeIdentifier(BGPRIB_NID)
                 .addChild(ImmutableNodes.mapNodeBuilder(RIB_NID).build()).build();
index 948512ae2087835e756778c4f541208517fc04c0..48793b6b2d796e3848ffbebbd43ef79929b563f3 100644 (file)
@@ -17,7 +17,7 @@ import com.google.common.util.concurrent.ListenableFuture;
 import java.util.Objects;
 import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer;
 import org.opendaylight.protocol.bgp.rib.impl.ApplicationPeer;
@@ -125,7 +125,7 @@ final class AppPeer extends PeerBean {
 
     private static final class BgpAppPeerSingletonService implements BGPPeerStateProvider {
         private final ApplicationPeer applicationPeer;
-        private final DOMDataTreeChangeService dataTreeChangeService;
+        private final DataTreeChangeExtension dataTreeChangeService;
         private final ApplicationRibId appRibId;
         @GuardedBy("this")
         private boolean isServiceInstantiated;
@@ -139,11 +139,13 @@ final class AppPeer extends PeerBean {
 
         synchronized void instantiateServiceInstance() {
             isServiceInstantiated = true;
-            final YangInstanceIdentifier yangIId = YangInstanceIdentifier.builder().node(APPRIB)
-                    .nodeWithKey(ApplicationRib.QNAME, APP_ID_QNAME, appRibId.getValue())
-                    .node(TABLES_NID).node(TABLES_NID).build();
             applicationPeer.instantiateServiceInstance(dataTreeChangeService,
-                    new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, yangIId));
+                DOMDataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION,  YangInstanceIdentifier.builder()
+                    .node(APPRIB)
+                    .nodeWithKey(ApplicationRib.QNAME, APP_ID_QNAME, appRibId.getValue())
+                    .node(TABLES_NID)
+                    .node(TABLES_NID)
+                    .build()));
         }
 
         synchronized ListenableFuture<?> closeServiceInstance() {
index a978c3839a088879b41cb5488685b81e96a55683..47d399bdb6e6a8bb3fa479f87ca71e06df743277 100644 (file)
@@ -36,10 +36,9 @@ import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.DataObjectModification;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
-import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonService;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonServiceProvider;
+import org.opendaylight.mdsal.singleton.api.ServiceGroupIdentifier;
 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.BGPRibRoutingPolicyFactory;
 import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer;
 import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher;
@@ -52,6 +51,7 @@ import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.t
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Global;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Neighbors;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.NeighborPeerGroupConfig;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Empty;
 import org.slf4j.Logger;
@@ -82,7 +82,7 @@ public class BGPClusterSingletonService implements ClusterSingletonService, Auto
     @GuardedBy("this")
     private RibImpl ribImpl;
     @GuardedBy("this")
-    private ClusterSingletonServiceRegistration cssRegistration;
+    private Registration cssRegistration;
 
     BGPClusterSingletonService(
             final @NonNull PeerGroupConfigLoader peerGroupLoader,
@@ -106,9 +106,9 @@ public class BGPClusterSingletonService implements ClusterSingletonService, Auto
         this.stateProviderRegistry = stateProviderRegistry;
         this.domDataBroker = domDataBroker;
         this.bgpIid = bgpIid;
-        serviceGroupIdentifier = ServiceGroupIdentifier.create(getRibInstanceName(bgpIid) + "-service-group");
+        serviceGroupIdentifier = new ServiceGroupIdentifier(getRibInstanceName(bgpIid) + "-service-group");
         cssRegistration = provider.registerClusterSingletonService(this);
-        LOG.info("BGPClusterSingletonService {} registered", serviceGroupIdentifier.getName());
+        LOG.info("BGPClusterSingletonService {} registered", serviceGroupIdentifier.value());
     }
 
     @Override
@@ -123,12 +123,12 @@ public class BGPClusterSingletonService implements ClusterSingletonService, Auto
             peers.values().forEach(PeerBean::instantiateServiceInstance);
         }
         instantiated.set(true);
-        LOG.info("BGPClusterSingletonService {} instantiated", serviceGroupIdentifier.getName());
+        LOG.info("BGPClusterSingletonService {} instantiated", serviceGroupIdentifier.value());
     }
 
     @Override
     public synchronized ListenableFuture<?> closeServiceInstance() {
-        LOG.info("BGPClusterSingletonService {} close service instance", serviceGroupIdentifier.getName());
+        LOG.info("BGPClusterSingletonService {} close service instance", serviceGroupIdentifier.value());
         instantiated.set(false);
 
         final List<ListenableFuture<?>> futurePeerCloseList = peers.values().stream()
@@ -239,7 +239,7 @@ public class BGPClusterSingletonService implements ClusterSingletonService, Auto
             return;
         }
 
-        LOG.info("Closing BGPClusterSingletonService {}", serviceGroupIdentifier.getName());
+        LOG.info("Closing BGPClusterSingletonService {}", serviceGroupIdentifier.value());
         cssRegistration.close();
         cssRegistration = null;
 
index 872ceb69a0ef2ab80e40044bf4fdcdbab7a2f80c..3f784b066fa144508cb666ad3edbb0ef1899fe27 100644 (file)
@@ -16,7 +16,6 @@ import com.google.common.cache.LoadingCache;
 import com.google.common.util.concurrent.FluentFuture;
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.MoreExecutors;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -39,7 +38,7 @@ import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonServiceProvider;
 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.BGPRibRoutingPolicyFactory;
 import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer;
 import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher;
@@ -61,7 +60,7 @@ import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.re
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.ProtocolsBuilder;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.protocols.Protocol;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NetworkInstanceProtocol;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
@@ -95,7 +94,7 @@ public class DefaultBgpDeployer implements ClusteredDataTreeChangeListener<Bgp>,
             }
         });
     private final String networkInstanceName;
-    private ListenerRegistration<DefaultBgpDeployer> registration;
+    private Registration registration;
     @GuardedBy("this")
     private boolean closed;
 
@@ -142,7 +141,7 @@ public class DefaultBgpDeployer implements ClusteredDataTreeChangeListener<Bgp>,
     // Split out of constructor to support partial mocking
     public synchronized void init() {
         registration = dataBroker.registerDataTreeChangeListener(
-                DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION,
+                DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION,
                         networkInstanceIId.child(Protocols.class).child(Protocol.class)
                                 .augmentation(NetworkInstanceProtocol.class).child(Bgp.class)), this);
         LOG.info("BGP Deployer {} started.", networkInstanceName);
@@ -158,7 +157,7 @@ public class DefaultBgpDeployer implements ClusteredDataTreeChangeListener<Bgp>,
     }
 
     @Override
-    public synchronized void onDataTreeChanged(final Collection<DataTreeModification<Bgp>> changes) {
+    public synchronized void onDataTreeChanged(final List<DataTreeModification<Bgp>> changes) {
         if (closed) {
             LOG.trace("BGP Deployer was already closed, skipping changes.");
             return;
index 6be6f3ff5b728c6bb0909a0f4f10698262989670..5e85c5c4265f8f0f427d1fa0de8b6b0c0a6aee20 100644 (file)
@@ -10,7 +10,7 @@ package org.opendaylight.protocol.bgp.rib.impl.config;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonServiceProvider;
 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.BGPRibRoutingPolicyFactory;
 import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer;
 import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher;
index c3eb1ce25df0ea37be8621adc5fbd4031571e578..038e43cb16ebc52e96ef463c255e2b5155b8c04b 100644 (file)
@@ -23,9 +23,8 @@ import java.util.stream.Collectors;
 import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
-import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
 import org.opendaylight.protocol.bgp.mode.api.PathSelectionMode;
 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.BGPRibRoutingPolicyFactory;
 import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer;
@@ -166,8 +165,8 @@ public final class RibImpl implements RIB, BGPRibStateProvider {
     }
 
     @Override
-    public synchronized DOMTransactionChain createPeerDOMChain(final DOMTransactionChainListener listener) {
-        return ribImpl.createPeerDOMChain(listener);
+    public synchronized DOMTransactionChain createPeerDOMChain() {
+        return ribImpl.createPeerDOMChain();
     }
 
     @Override
@@ -191,7 +190,7 @@ public final class RibImpl implements RIB, BGPRibStateProvider {
     }
 
     @Override
-    public synchronized DOMDataTreeChangeService getService() {
+    public synchronized DataTreeChangeExtension getService() {
         return ribImpl.getService();
     }
 
index 8ee03ddf31ab59faa6bf9297b97202ec89b300ef..9896ba8e7236f1fc4594ef48e5762eb3ce113ad9 100644 (file)
@@ -9,9 +9,8 @@ package org.opendaylight.protocol.bgp.rib.impl.spi;
 
 import java.util.Set;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
-import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
 import org.opendaylight.protocol.bgp.rib.RibReference;
 import org.opendaylight.protocol.bgp.rib.spi.BGPPeerTracker;
 import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext;
@@ -48,10 +47,9 @@ public interface RIB extends RibReference, RibOutRefresh {
     /**
      * Allocate a new transaction chain for use with a peer.
      *
-     * @param listener {@link DOMTransactionChainListener} handling recovery
      * @return A new transaction chain.
      */
-    DOMTransactionChain createPeerDOMChain(DOMTransactionChainListener listener);
+    DOMTransactionChain createPeerDOMChain();
 
     /**
      * Return the RIB extensions available to the RIB instance.
@@ -84,7 +82,7 @@ public interface RIB extends RibReference, RibOutRefresh {
      *
      * @return DOMDataTreeChangeService
      */
-    DOMDataTreeChangeService getService();
+    DataTreeChangeExtension getService();
 
     /**
      * Returns true if RIB supports table.
index 8a1dd5dc0dae7a623ed80c44402c8d72b87d8533..09d68db280784372261ca2b703863aa849d60069 100644 (file)
@@ -25,9 +25,8 @@ import org.junit.After;
 import org.junit.Before;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonService;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonServiceProvider;
 import org.opendaylight.protocol.bgp.inet.RIBActivator;
 import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer;
 import org.opendaylight.protocol.bgp.parser.BGPError;
@@ -85,6 +84,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.type
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.UnicastSubsequentAddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.next.hop.c.next.hop.Ipv4NextHopCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.next.hop.c.next.hop.ipv4.next.hop._case.Ipv4NextHopBuilder;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint32;
@@ -148,7 +148,7 @@ public abstract class AbstractAddPathTest extends DefaultRibPoliciesMockTest {
         groups = new BGPNettyGroups();
         serverRegistry = new StrictBGPPeerRegistry();
         serverDispatcher = new BGPDispatcherImpl(context, groups, serverRegistry);
-        doReturn(Mockito.mock(ClusterSingletonServiceRegistration.class)).when(clusterSingletonServiceProvider)
+        doReturn(Mockito.mock(Registration.class)).when(clusterSingletonServiceProvider)
             .registerClusterSingletonService(any(ClusterSingletonService.class));
 
         codecsRegistry = new ConstantCodecsRegistry(mappingService.currentSerializer());
index 41eed3acdb9006488857c247abf0e219c4f6e25c..2dbf9d73c47f0a1cc678e24433d1aa792782848f 100644 (file)
@@ -14,7 +14,6 @@ import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 
-import com.google.common.collect.ImmutableClassToInstanceMap;
 import com.google.common.util.concurrent.FluentFuture;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -30,16 +29,14 @@ import org.mockito.MockitoAnnotations;
 import org.opendaylight.mdsal.binding.dom.adapter.CurrentAdapterSerializer;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.dom.api.ClusteredDOMDataTreeChangeListener;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
-import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonService;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonServiceProvider;
 import org.opendaylight.protocol.bgp.inet.RIBActivator;
 import org.opendaylight.protocol.bgp.mode.impl.base.BasePathSelectionModeFactory;
 import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl;
@@ -58,6 +55,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.type
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv6AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.UnicastSubsequentAddressFamily;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@@ -95,7 +93,7 @@ public class AbstractRIBTestSetup extends DefaultRibPoliciesMockTest {
     private FluentFuture<? extends CommitInfo> future;
 
     @Mock
-    private DOMDataTreeChangeService service;
+    private DataTreeChangeExtension service;
 
     @Mock
     private ClusterSingletonServiceProvider clusterSingletonServiceProvider;
@@ -117,7 +115,7 @@ public class AbstractRIBTestSetup extends DefaultRibPoliciesMockTest {
         a1.startRIBExtensionProvider(context, serializer);
 
         mockedMethods();
-        doReturn(mock(ClusterSingletonServiceRegistration.class)).when(clusterSingletonServiceProvider)
+        doReturn(mock(Registration.class)).when(clusterSingletonServiceProvider)
                 .registerClusterSingletonService(any(ClusterSingletonService.class));
         rib = new RIBImpl(tableRegistry, new RibId("test"), new AsNumber(Uint32.valueOf(5)), RIB_ID, context,
             dispatcher, new ConstantCodecsRegistry(serializer), dom, policies, localTables,
@@ -128,8 +126,7 @@ public class AbstractRIBTestSetup extends DefaultRibPoliciesMockTest {
     private void mockedMethods() throws Exception {
         MockitoAnnotations.initMocks(this);
         doReturn(new TestListenerRegistration()).when(service)
-                .registerDataTreeChangeListener(any(DOMDataTreeIdentifier.class),
-                        any(ClusteredDOMDataTreeChangeListener.class));
+                .registerTreeChangeListener(any(DOMDataTreeIdentifier.class), any(DOMDataTreeChangeListener.class));
         doNothing().when(domTransWrite).put(eq(LogicalDatastoreType.OPERATIONAL),
                 any(YangInstanceIdentifier.class), any(NormalizedNode.class));
         doNothing().when(domTransWrite).delete(eq(LogicalDatastoreType.OPERATIONAL),
@@ -140,9 +137,9 @@ public class AbstractRIBTestSetup extends DefaultRibPoliciesMockTest {
         doReturn(domTransWrite).when(domChain).newWriteOnlyTransaction();
         doNothing().when(getTransaction()).put(eq(LogicalDatastoreType.OPERATIONAL),
                 eq(YangInstanceIdentifier.of(BgpRib.QNAME)), any(NormalizedNode.class));
-        doReturn(ImmutableClassToInstanceMap.of(DOMDataTreeChangeService.class, service)).when(dom)
-            .getExtensions();
-        doReturn(domChain).when(dom).createMergingTransactionChain(any(DOMTransactionChainListener.class));
+        doReturn(service).when(dom).extension(DataTreeChangeExtension.class);
+        doReturn(domChain).when(dom).createMergingTransactionChain();
+        doNothing().when(domChain).addCallback(any());
         doReturn(Optional.empty()).when(future).get();
         doReturn(future).when(domTransWrite).commit();
         doCallRealMethod().when(future).addCallback(any(), any());
index 2597f8bbd1d2e184b50b698043f6eef8bf7b66d0..1ea3334bc3ba5069e08e8d4e0e31059b21f02ea4 100644 (file)
@@ -55,7 +55,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv4AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.UnicastSubsequentAddressFamily;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
 @Ignore
@@ -109,7 +109,7 @@ public class ParserToSalTest extends DefaultRibPoliciesMockTest {
         final BGPPeer peer = AbstractAddPathTest.configurePeer(tableRegistry,
             localAddress.getIpv4AddressNoZone(), rib, null, PeerRole.Ibgp, new StrictBGPPeerRegistry());
         peer.instantiateServiceInstance();
-        final ListenerRegistration<?> reg = mock.registerUpdateListener(peer);
+        final Registration reg = mock.registerUpdateListener(peer);
         reg.close();
     }
 
@@ -125,7 +125,7 @@ public class ParserToSalTest extends DefaultRibPoliciesMockTest {
         final BGPPeer peer = AbstractAddPathTest.configurePeer(tableRegistry,
             localAddress.getIpv4AddressNoZone(), rib, null, PeerRole.Ibgp, new StrictBGPPeerRegistry());
         peer.instantiateServiceInstance();
-        final ListenerRegistration<?> reg = mock.registerUpdateListener(peer);
+        final Registration reg = mock.registerUpdateListener(peer);
         reg.close();
     }
 
index 2f4bfa9c02630f2cc5fb47b154f78177f45515cc..062143d429a704f748bd0f57e9e5b89a165ffd28 100644 (file)
@@ -23,7 +23,6 @@ import static org.opendaylight.protocol.bgp.rib.spi.RIBNodeIdentifiers.RIB_NID;
 import static org.opendaylight.protocol.bgp.rib.spi.RIBNodeIdentifiers.TABLES_NID;
 import static org.opendaylight.protocol.bgp.rib.spi.RIBNodeIdentifiers.UPTODATE_NID;
 
-import com.google.common.collect.ImmutableClassToInstanceMap;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
@@ -47,7 +46,7 @@ import org.mockito.Mock;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
 import org.opendaylight.protocol.bgp.mode.api.PathSelectionMode;
@@ -94,7 +93,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.type
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.next.hop.CNextHop;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.next.hop.c.next.hop.Ipv4NextHopCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.next.hop.c.next.hop.ipv4.next.hop._case.Ipv4NextHopBuilder;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint32;
@@ -190,16 +189,16 @@ public class SynchronizationAndExceptionTest extends AbstractAddPathTest {
         doReturn(null).when(futureChannel).addListener(any());
         doReturn(futureChannel).when(speakerListener).close();
         doReturn(futureChannel).when(speakerListener).writeAndFlush(any(Notify.class));
-        doReturn(domChain).when(domBroker).createMergingTransactionChain(any());
+        doReturn(domChain).when(domBroker).createMergingTransactionChain();
+        doNothing().when(domChain).addCallback(any());
         doReturn(tx).when(domChain).newWriteOnlyTransaction();
-        final DOMDataTreeChangeService dOMDataTreeChangeService = mock(DOMDataTreeChangeService.class);
-        final ListenerRegistration<?> listener = mock(ListenerRegistration.class);
-        doReturn(listener).when(dOMDataTreeChangeService).registerDataTreeChangeListener(any(), any());
+        final DataTreeChangeExtension domDataTreeChangeService = mock(DataTreeChangeExtension.class);
+        final Registration listener = mock(Registration.class);
+        doReturn(listener).when(domDataTreeChangeService).registerTreeChangeListener(any(), any());
         doNothing().when(listener).close();
         doNothing().when(domChain).close();
 
-        doReturn(ImmutableClassToInstanceMap.of(DOMDataTreeChangeService.class, dOMDataTreeChangeService))
-                .when(domBroker).getExtensions();
+        doReturn(domDataTreeChangeService).when(domBroker).extension(DataTreeChangeExtension.class);
         doNothing().when(tx).merge(eq(LogicalDatastoreType.OPERATIONAL),
                 any(YangInstanceIdentifier.class), any(NormalizedNode.class));
         doNothing().when(tx).put(eq(LogicalDatastoreType.OPERATIONAL),
index e1f033aef4ab4a3883819fbe70efa9ebd5ac18b0..3ea573058f52ab5ad2aad6cd33eb5179c8f6084e 100644 (file)
@@ -21,10 +21,9 @@ import org.junit.Before;
 import org.mockito.Mock;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
-import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
 import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer;
 import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl;
 import org.opendaylight.protocol.bgp.rib.impl.BGPPeerTrackerImpl;
@@ -47,7 +46,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.BgpId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv4AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.UnicastSubsequentAddressFamily;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@@ -70,7 +69,7 @@ class AbstractConfig extends DefaultRibPoliciesMockTest {
     @Mock
     protected BGPPeerRegistry bgpPeerRegistry;
     @Mock
-    protected ListenerRegistration<?> listener;
+    protected Registration listener;
     @Mock
     protected Future<?> future;
     @Mock
@@ -78,7 +77,7 @@ class AbstractConfig extends DefaultRibPoliciesMockTest {
     @Mock
     protected PeerGroupConfigLoader peerGroupLoader;
     @Mock
-    private DOMDataTreeChangeService dataTreeChangeService;
+    private DataTreeChangeExtension dataTreeChangeService;
     private final BGPPeerTracker peerTracker = new BGPPeerTrackerImpl();
 
     @Override
@@ -88,7 +87,8 @@ class AbstractConfig extends DefaultRibPoliciesMockTest {
         doReturn(InstanceIdentifier.create(BgpRib.class).child(org.opendaylight.yang.gen.v1.urn.opendaylight
                 .params.xml.ns.yang.bgp.rib.rev180329.bgp.rib.Rib.class, new RibKey(RIB_ID))).when(rib)
                 .getInstanceIdentifier();
-        doReturn(domTx).when(rib).createPeerDOMChain(any(DOMTransactionChainListener.class));
+        doReturn(domTx).when(rib).createPeerDOMChain();
+        doNothing().when(domTx).addCallback(any());
 
         doReturn(AS).when(rib).getLocalAs();
         doReturn(mock(RIBSupportContextRegistry.class)).when(rib).getRibSupportContext();
@@ -105,7 +105,7 @@ class AbstractConfig extends DefaultRibPoliciesMockTest {
 
         doReturn(YangInstanceIdentifier.of(Rib.QNAME)).when(rib).getYangRibId();
         doReturn(dataTreeChangeService).when(rib).getService();
-        doReturn(listener).when(dataTreeChangeService).registerDataTreeChangeListener(any(), any());
+        doReturn(listener).when(dataTreeChangeService).registerTreeChangeListener(any(), any());
         doReturn(new BgpId("127.0.0.1")).when(rib).getBgpIdentifier();
         doReturn(true).when(future).cancel(true);
         doReturn(future).when(dispatcher).createReconnectingClient(any(InetSocketAddress.class),
index 2f01da4f692ea213579ba832d32648b1e3e7798c..be82ca643a9c8aeaef495e16e0745aa874c2f826 100644 (file)
@@ -9,14 +9,12 @@ package org.opendaylight.protocol.bgp.rib.impl.config;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.verify;
 import static org.mockito.internal.verification.VerificationModeFactory.times;
 
 import java.util.concurrent.ExecutionException;
 import org.junit.Before;
 import org.junit.Test;
-import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
 import org.opendaylight.protocol.bgp.rib.impl.state.BGPStateCollector;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.ConfigBuilder;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor;
@@ -47,14 +45,14 @@ public class AppPeerTest extends AbstractConfig {
         appPeer.start(rib, neighbor, null, peerGroupLoader, tableTypeRegistry);
         verify(rib).getYangRibId();
         verify(rib).getService();
-        verify(rib).createPeerDOMChain(any(DOMTransactionChainListener.class));
+        verify(rib).createPeerDOMChain();
         verify(rib, times(1)).getLocalTablesKeys();
 
         appPeer.instantiateServiceInstance();
         verify(rib, times(3)).getYangRibId();
         verify(rib, times(2)).getRibSupportContext();
         verify(rib, times(2)).getLocalTablesKeys();
-        verify(rib, times(2)).createPeerDOMChain(any(DOMTransactionChainListener.class));
+        verify(rib, times(2)).createPeerDOMChain();
         verify(domTx).newWriteOnlyTransaction();
 
         appPeer.closeServiceInstance();
@@ -65,7 +63,7 @@ public class AppPeerTest extends AbstractConfig {
         appPeer.instantiateServiceInstance();
         verify(rib, times(6)).getYangRibId();
         verify(rib, times(4)).getService();
-        verify(rib, times(4)).createPeerDOMChain(any(DOMTransactionChainListener.class));
+        verify(rib, times(4)).createPeerDOMChain();
         verify(listener, times(2)).close();
 
         assertTrue(appPeer.containsEqualConfiguration(neighbor));
@@ -76,7 +74,7 @@ public class AppPeerTest extends AbstractConfig {
         verify(domTx, times(4)).close();
 
         appPeer.instantiateServiceInstance();
-        verify(rib, times(6)).createPeerDOMChain(any(DOMTransactionChainListener.class));
+        verify(rib, times(6)).createPeerDOMChain();
         appPeer.closeServiceInstance();
         verify(domTx, times(6)).close();
         appPeer.stop().get();
index ad9e0e23de1cd4d4c7629b0bf07af709e926df9c..83da51b04baee7e3f2476d24ebe04a375d23a8fe 100644 (file)
@@ -34,8 +34,7 @@ import org.mockito.Mock;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonServiceProvider;
 import org.opendaylight.protocol.bgp.openconfig.routing.policy.impl.DefaultBGPRibRoutingPolicyFactory;
 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.registry.StatementRegistry;
 import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer;
@@ -62,6 +61,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mult
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NetworkInstanceProtocol;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv4AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.UnicastSubsequentAddressFamily;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
 
@@ -109,7 +109,7 @@ public class BgpDeployerTest extends DefaultRibPoliciesMockTest {
         doReturn(TABLE_TYPE).when(tableTypeRegistry).getTableType(any());
         doReturn(TABLES_KEY).when(tableTypeRegistry).getTableKey(any());
 
-        final ClusterSingletonServiceRegistration serviceRegistration = mock(ClusterSingletonServiceRegistration.class);
+        final var serviceRegistration = mock(Registration.class);
         doReturn(serviceRegistration).when(singletonServiceProvider).registerClusterSingletonService(any());
         doNothing().when(serviceRegistration).close();
 
index 4b3107bb5796f175e903fb2dbe2f2796027d6963..74ec21a3d4e840845bb78010ac34c7904346d73d 100644 (file)
@@ -144,7 +144,7 @@ public class BgpPeerTest extends AbstractConfig {
             .build();
 
         bgpPeer.start(rib, neighbor, null, peerGroupLoader, tableTypeRegistry);
-        verify(rib).createPeerDOMChain(any());
+        verify(rib).createPeerDOMChain();
         verify(rib, times(2)).getLocalAs();
         verify(rib).getLocalTables();
 
@@ -162,7 +162,7 @@ public class BgpPeerTest extends AbstractConfig {
         bgpPeer.stop().get();
         bgpPeer.start(rib, bgpPeer.getCurrentConfiguration(), null, peerGroupLoader, tableTypeRegistry);
         bgpPeer.instantiateServiceInstance();
-        verify(rib, times(2)).createPeerDOMChain(any());
+        verify(rib, times(2)).createPeerDOMChain();
         verify(rib, times(4)).getLocalAs();
         verify(rib, times(2)).getLocalTables();
         verify(bgpPeerRegistry, times(2)).addPeer(any(), any(), any());
@@ -186,12 +186,12 @@ public class BgpPeerTest extends AbstractConfig {
         bgpPeer.closeServiceInstance();
         verify(bgpPeerRegistry, times(3)).removePeer(any());
         verify(future, times(3)).cancel(true);
-        verify(rib, times(3)).createPeerDOMChain(any());
+        verify(rib, times(3)).createPeerDOMChain();
 
         bgpPeer.stop().get();
         bgpPeer.start(rib, bgpPeer.getCurrentConfiguration(), null, peerGroupLoader, tableTypeRegistry);
         bgpPeer.instantiateServiceInstance();
-        verify(rib, times(4)).createPeerDOMChain(any());
+        verify(rib, times(4)).createPeerDOMChain();
         verify(rib, times(6)).getLocalAs();
         verify(rib, times(3)).getLocalTables();
         verify(bgpPeerRegistry, times(4)).addPeer(any(), any(), any());
index 34013f79f3f32fc58c4cf0cc5c51d8a95b09ea87..d3c9db38462cd10126a6b7ff75b797c1c9705763 100644 (file)
@@ -14,7 +14,6 @@ import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 
-import com.google.common.collect.ImmutableClassToInstanceMap;
 import com.google.common.collect.ImmutableSet;
 import java.util.Map;
 import java.util.Set;
@@ -23,7 +22,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension;
 import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl;
 import org.opendaylight.protocol.bgp.rib.impl.spi.CodecsRegistry;
 import org.opendaylight.protocol.bgp.rib.impl.state.BGPStateCollector;
@@ -44,7 +43,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.BgpId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv4AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.UnicastSubsequentAddressFamily;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.Uint8;
@@ -84,12 +83,10 @@ public class RibImplTest extends AbstractConfig {
         final NodeIdentifierWithPredicates niie = NodeIdentifierWithPredicates.of(Rib.QNAME,
                 QName.create("", "test").intern(), "t");
         doReturn(niie).when(emptyTable).name();
-        doReturn(domTx).when(domDataBroker).createMergingTransactionChain(any());
-        final DOMDataTreeChangeService dOMDataTreeChangeService = mock(DOMDataTreeChangeService.class);
-        doReturn(ImmutableClassToInstanceMap.of(DOMDataTreeChangeService.class, dOMDataTreeChangeService))
-                .when(domDataBroker).getExtensions();
-        doReturn(mock(ListenerRegistration.class)).when(dOMDataTreeChangeService)
-                .registerDataTreeChangeListener(any(), any());
+        doReturn(domTx).when(domDataBroker).createMergingTransactionChain();
+        final DataTreeChangeExtension domDataTreeChangeService = mock(DataTreeChangeExtension.class);
+        doReturn(domDataTreeChangeService).when(domDataBroker).extension(DataTreeChangeExtension.class);
+        doReturn(mock(Registration.class)).when(domDataTreeChangeService).registerTreeChangeListener(any(), any());
     }
 
     @Test
@@ -97,7 +94,7 @@ public class RibImplTest extends AbstractConfig {
         final RibImpl ribImpl = new RibImpl(extension, dispatcher, policyProvider, codecsRegistry,
                 new BGPStateCollector(), domDataBroker);
         ribImpl.start(createGlobal(), "rib-test", tableTypeRegistry);
-        verify(domDataBroker).getExtensions();
+        verify(domDataBroker).extension(DataTreeChangeExtension.class);
         assertEquals("""
             RIBImpl{bgpId=Ipv4Address{value=127.0.0.1}, localTables=[BgpTableTypeImpl [\
             getAfi()=Ipv4AddressFamily{qname=\
index 2440d7dfb92ce26390b15a18ce869bdaa1d90468..527366814b7ee263e868ba41a014fd98a450b4eb 100644 (file)
@@ -83,7 +83,7 @@
         </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
-            <artifactId>mdsal-singleton-common-api</artifactId>
+            <artifactId>mdsal-singleton-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
index 9f6326e027796ea304e56b112e2f69928757e053..2ecdcad958c4f8199b2bf0f7a1196d700c8a02ea 100644 (file)
@@ -14,7 +14,7 @@ import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.FluentFuture;
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.MoreExecutors;
-import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
 import org.checkerframework.checker.lock.qual.GuardedBy;
@@ -25,9 +25,7 @@ import org.opendaylight.mdsal.binding.api.DataObjectModification;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
-import org.opendaylight.mdsal.binding.api.Transaction;
 import org.opendaylight.mdsal.binding.api.TransactionChain;
-import org.opendaylight.mdsal.binding.api.TransactionChainListener;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
@@ -44,13 +42,14 @@ 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.TopologyBuilder;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.TopologyTypes;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.Empty;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public abstract class AbstractTopologyBuilder<T extends Route> implements ClusteredDataTreeChangeListener<T>,
-    TopologyReference, TransactionChainListener {
+public abstract class AbstractTopologyBuilder<T extends Route>
+        implements ClusteredDataTreeChangeListener<T>, TopologyReference, FutureCallback<Empty> {
     private static final Logger LOG = LoggerFactory.getLogger(AbstractTopologyBuilder.class);
     // we limit the listener reset interval to be 5 min at most
     private static final long LISTENER_RESET_LIMIT_IN_MILLSEC = 5 * 60 * 1000;
@@ -66,7 +65,7 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements Cluste
     private final int listenerResetEnforceCounter;
 
     @GuardedBy("this")
-    private ListenerRegistration<AbstractTopologyBuilder<T>> listenerRegistration = null;
+    private Registration listenerRegistration = null;
     @GuardedBy("this")
     private TransactionChain chain = null;
     private final AtomicBoolean closed = new AtomicBoolean(false);
@@ -84,14 +83,15 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements Cluste
             final int listenerResetEnforceCounter) {
         this.dataProvider = dataProvider;
         this.locRibReference = requireNonNull(locRibReference);
-        this.topologyKey = new TopologyKey(requireNonNull(topologyId));
-        this.topologyTypes = types;
+        topologyKey = new TopologyKey(requireNonNull(topologyId));
+        topologyTypes = types;
         this.afi = afi;
         this.safi = safi;
         this.listenerResetLimitInMillsec = listenerResetLimitInMillsec;
         this.listenerResetEnforceCounter = listenerResetEnforceCounter;
-        this.topology = InstanceIdentifier.builder(NetworkTopology.class)
-                .child(Topology.class, this.topologyKey).build();
+        topology = InstanceIdentifier.builder(NetworkTopology.class)
+                .child(Topology.class, topologyKey)
+                .build();
     }
 
     protected AbstractTopologyBuilder(final DataBroker dataProvider, final RibReference locRibReference,
@@ -102,8 +102,8 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements Cluste
     }
 
     public final synchronized void start() {
-        LOG.debug("Initiating topology builder from {} at {}. AFI={}, SAFI={}", this.locRibReference, this.topology,
-                this.afi, this.safi);
+        LOG.debug("Initiating topology builder from {} at {}. AFI={}, SAFI={}", locRibReference, topology,
+                afi, safi);
         initTransactionChain();
         initOperationalTopology();
         registerDataChangeListener();
@@ -113,27 +113,27 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements Cluste
      * Register to data tree change listener.
      */
     private synchronized void registerDataChangeListener() {
-        Preconditions.checkState(this.listenerRegistration == null,
+        Preconditions.checkState(listenerRegistration == null,
                 "Topology Listener on topology %s has been registered before.",
                 this.getInstanceIdentifier());
-        final InstanceIdentifier<Tables> tablesId = this.locRibReference.getInstanceIdentifier()
-                .child(LocRib.class).child(Tables.class, new TablesKey(this.afi, this.safi));
+        final InstanceIdentifier<Tables> tablesId = locRibReference.getInstanceIdentifier()
+                .child(LocRib.class).child(Tables.class, new TablesKey(afi, safi));
         final DataTreeIdentifier<T> id = DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL,
                 getRouteWildcard(tablesId));
 
-        this.listenerRegistration = this.dataProvider.registerDataTreeChangeListener(id, this);
+        listenerRegistration = dataProvider.registerDataTreeChangeListener(id, this);
         LOG.debug("Registered listener {} on topology {}. Timestamp={}", this, this.getInstanceIdentifier(),
-                this.listenerScheduledRestartTime);
+                listenerScheduledRestartTime);
     }
 
     /**
      * Unregister to data tree change listener.
      */
     private synchronized void unregisterDataChangeListener() {
-        if (this.listenerRegistration != null) {
+        if (listenerRegistration != null) {
             LOG.debug("Unregistered listener {} on topology {}", this, this.getInstanceIdentifier());
-            this.listenerRegistration.close();
-            this.listenerRegistration = null;
+            listenerRegistration.close();
+            listenerRegistration = null;
         }
     }
 
@@ -147,11 +147,11 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements Cluste
 
     @Override
     public final InstanceIdentifier<Topology> getInstanceIdentifier() {
-        return this.topology;
+        return topology;
     }
 
     public final synchronized FluentFuture<? extends CommitInfo> close() {
-        if (this.closed.getAndSet(true)) {
+        if (closed.getAndSet(true)) {
             LOG.trace("Transaction chain was already closed.");
             return CommitInfo.emptyFluentFuture();
         }
@@ -164,9 +164,9 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements Cluste
 
     @Override
     @SuppressWarnings("checkstyle:IllegalCatch")
-    public synchronized void onDataTreeChanged(final Collection<DataTreeModification<T>> changes) {
+    public synchronized void onDataTreeChanged(final List<DataTreeModification<T>> changes) {
         if (networkTopologyTransaction) {
-            if (this.closed.get()) {
+            if (closed.get()) {
                 LOG.trace("Transaction chain was already closed, skipping update.");
                 return;
             }
@@ -175,7 +175,7 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements Cluste
                 LOG.debug("The data change {} is disregarded due to restart of listener {}", changes, this);
                 return;
             }
-            final ReadWriteTransaction trans = this.chain.newReadWriteTransaction();
+            final ReadWriteTransaction trans = chain.newReadWriteTransaction();
             LOG.trace("Received data change {} event with transaction {}", changes, trans.getIdentifier());
             final AtomicBoolean transactionInError = new AtomicBoolean(false);
             for (final DataTreeModification<T> change : changes) {
@@ -244,11 +244,11 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements Cluste
     }
 
     private synchronized void initOperationalTopology() {
-        requireNonNull(this.chain, "A valid transaction chain must be provided.");
-        final WriteTransaction trans = this.chain.newWriteOnlyTransaction();
-        trans.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, this.topology,
-                new TopologyBuilder().withKey(this.topologyKey).setServerProvided(Boolean.TRUE)
-                        .setTopologyTypes(this.topologyTypes)
+        requireNonNull(chain, "A valid transaction chain must be provided.");
+        final WriteTransaction trans = chain.newWriteOnlyTransaction();
+        trans.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, topology,
+                new TopologyBuilder().withKey(topologyKey).setServerProvided(Boolean.TRUE)
+                        .setTopologyTypes(topologyTypes)
                         .setLink(Map.of()).setNode(Map.of()).build());
         trans.commit().addCallback(new FutureCallback<CommitInfo>() {
             @Override
@@ -269,8 +269,8 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements Cluste
      * Destroy the current operational topology data. Note a valid transaction must be provided.
      */
     private synchronized FluentFuture<? extends CommitInfo> destroyOperationalTopology() {
-        requireNonNull(this.chain, "A valid transaction chain must be provided.");
-        final WriteTransaction trans = this.chain.newWriteOnlyTransaction();
+        requireNonNull(chain, "A valid transaction chain must be provided.");
+        final WriteTransaction trans = chain.newWriteOnlyTransaction();
         trans.delete(LogicalDatastoreType.OPERATIONAL, getInstanceIdentifier());
         final FluentFuture<? extends CommitInfo> future = trans.commit();
         future.addCallback(new FutureCallback<CommitInfo>() {
@@ -294,16 +294,17 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements Cluste
      */
     private synchronized void initTransactionChain() {
         LOG.debug("Initializing transaction chain for topology {}", this);
-        Preconditions.checkState(this.chain == null,
+        Preconditions.checkState(chain == null,
                 "Transaction chain has to be closed before being initialized");
-        this.chain = this.dataProvider.createMergingTransactionChain(this);
+        chain = dataProvider.createMergingTransactionChain();
+        chain.addCallback(this);
     }
 
     /**
      * Destroy the current transaction chain.
      */
     private synchronized void destroyTransactionChain() {
-        if (this.chain != null) {
+        if (chain != null) {
             LOG.debug("Destroy transaction chain for topology {}", this);
             // we cannot close the transaction chain, as it will close the AbstractDOMForwardedTransactionFactory
             // and the transaction factory cannot be reopen even if we recreate the transaction chain
@@ -317,7 +318,7 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements Cluste
 //                LOG.error("Unable to close transaction chain {} for topology builder {}", this.chain,
 //                  getInstanceIdentifier());
 //            }
-            this.chain = null;
+            chain = null;
         }
     }
 
@@ -327,7 +328,7 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements Cluste
      */
     @VisibleForTesting
     protected synchronized void resetListener() {
-        requireNonNull(this.listenerRegistration, "Listener on topology " + this + " hasn't been initialized.");
+        requireNonNull(listenerRegistration, "Listener on topology " + this + " hasn't been initialized.");
         LOG.debug("Resetting data change listener for topology builder {}", getInstanceIdentifier());
         // unregister current listener to prevent incoming data tree change first
         unregisterDataChangeListener();
@@ -370,13 +371,13 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements Cluste
      */
     @VisibleForTesting
     protected synchronized boolean restartTransactionChainOnDemand() {
-        if (this.listenerScheduledRestartTime > 0) {
+        if (listenerScheduledRestartTime > 0) {
             // when the #this.listenerScheduledRestartTime timer timed out we can reset the listener,
             // otherwise we should only reset the transaction chain
-            if (System.currentTimeMillis() > this.listenerScheduledRestartTime) {
+            if (System.currentTimeMillis() > listenerScheduledRestartTime) {
                 // reset the the restart timer
-                this.listenerScheduledRestartTime = 0;
-                this.listenerScheduledRestartEnforceCounter = 0;
+                listenerScheduledRestartTime = 0;
+                listenerScheduledRestartEnforceCounter = 0;
                 resetListener();
                 return true;
             }
@@ -388,29 +389,27 @@ public abstract class AbstractTopologyBuilder<T extends Route> implements Cluste
 
     @VisibleForTesting
     protected synchronized void scheduleListenerRestart() {
-        if (0 == this.listenerScheduledRestartTime) {
-            this.listenerScheduledRestartTime = System.currentTimeMillis() + this.listenerResetLimitInMillsec;
-        } else if (System.currentTimeMillis() > this.listenerScheduledRestartTime
-            && ++this.listenerScheduledRestartEnforceCounter < this.listenerResetEnforceCounter) {
+        if (0 == listenerScheduledRestartTime) {
+            listenerScheduledRestartTime = System.currentTimeMillis() + listenerResetLimitInMillsec;
+        } else if (System.currentTimeMillis() > listenerScheduledRestartTime
+            && ++listenerScheduledRestartEnforceCounter < listenerResetEnforceCounter) {
             // if the transaction failure happens again, we will delay the listener restart up to
             // #LISTENER_RESET_LIMIT_IN_MILLSEC times
-            this.listenerScheduledRestartTime += this.listenerResetLimitInMillsec;
+            listenerScheduledRestartTime += listenerResetLimitInMillsec;
         }
         LOG.debug("A listener restart was scheduled at {} (current system time is {})",
-                this.listenerScheduledRestartTime, System.currentTimeMillis());
+                listenerScheduledRestartTime, System.currentTimeMillis());
     }
 
     @Override
-    public final synchronized void onTransactionChainFailed(final TransactionChain transactionChain,
-            final Transaction transaction, final Throwable cause) {
-        LOG.error("Topology builder for {} failed in transaction {}.", getInstanceIdentifier(),
-                transaction != null ? transaction.getIdentifier() : null, cause);
+    public final synchronized void onFailure(final Throwable cause) {
+        LOG.error("Topology builder for {} failed", getInstanceIdentifier(), cause);
         scheduleListenerRestart();
         restartTransactionChainOnDemand();
     }
 
     @Override
-    public final void onTransactionChainSuccessful(final TransactionChain transactionChain) {
+    public final void onSuccess(final Empty value) {
         LOG.info("Topology builder for {} shut down", getInstanceIdentifier());
     }
 }
index ddada56bcf19ba63dda31cc7bfc08f69b13e55c8..68163081f8cf18ce860cd6d9727f44464c6fe164 100644 (file)
@@ -9,8 +9,8 @@ package org.opendaylight.bgpcep.bgp.topology.provider.config;
 
 import static java.util.Objects.requireNonNull;
 
-import java.util.Collection;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 import javax.annotation.PreDestroy;
@@ -26,11 +26,10 @@ import org.opendaylight.mdsal.binding.api.DataObjectModification;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonServiceProvider;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
 import org.opendaylight.yangtools.concepts.AbstractRegistration;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.osgi.service.component.annotations.Activate;
@@ -57,7 +56,7 @@ public final class BgpTopologyDeployerImpl implements BgpTopologyDeployer, AutoC
     private final Set<Topology> topologies = new HashSet<>();
     private final DataBroker dataBroker;
     private final ClusterSingletonServiceProvider singletonProvider;
-    private ListenerRegistration<BgpTopologyDeployerImpl> registration;
+    private Registration registration;
     @GuardedBy("this")
     private boolean closed;
 
@@ -73,7 +72,7 @@ public final class BgpTopologyDeployerImpl implements BgpTopologyDeployer, AutoC
     }
 
     @Override
-    public synchronized void onDataTreeChanged(final Collection<DataTreeModification<Topology>> changes) {
+    public synchronized void onDataTreeChanged(final List<DataTreeModification<Topology>> changes) {
         if (closed) {
             LOG.trace("BGP Topology Provider Deployer was already closed, skipping changes.");
             return;
index b66032bc20896bb0eee332fab297fbb736d42d38..0e5907f997dc3406f1afa4154eaff3ca8fa7be60 100644 (file)
@@ -5,7 +5,6 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.bgpcep.bgp.topology.provider.config;
 
 import static java.util.Objects.requireNonNull;
@@ -15,7 +14,7 @@ import org.opendaylight.bgpcep.bgp.topology.provider.AbstractTopologyBuilder;
 import org.opendaylight.bgpcep.bgp.topology.provider.spi.BgpTopologyDeployer;
 import org.opendaylight.bgpcep.bgp.topology.provider.spi.TopologyReferenceSingletonService;
 import org.opendaylight.mdsal.common.api.CommitInfo;
-import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
+import org.opendaylight.mdsal.singleton.api.ServiceGroupIdentifier;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
@@ -32,40 +31,40 @@ final class TopologyReferenceSingletonServiceImpl implements TopologyReferenceSi
             final BgpTopologyDeployer deployer, final Topology configuration) {
         this.configuration = requireNonNull(configuration);
         this.topologyBuilder = requireNonNull(topologyBuilder);
-        this.serviceRegistration = deployer.registerService(this);
+        serviceRegistration = deployer.registerService(this);
     }
 
     @Override
     public InstanceIdentifier<Topology> getInstanceIdentifier() {
-        return this.topologyBuilder.getInstanceIdentifier();
+        return topologyBuilder.getInstanceIdentifier();
     }
 
     @Override
     public void close() {
-        this.serviceRegistration.close();
+        serviceRegistration.close();
     }
 
     @Override
     public void instantiateServiceInstance() {
         LOG.info("Topology Singleton Service {} instantiated", getIdentifier());
-        this.topologyBuilder.start();
+        topologyBuilder.start();
     }
 
     @Override
     public FluentFuture<? extends CommitInfo> closeServiceInstance() {
         LOG.info("Close Topology Singleton Service {}", getIdentifier());
-        return this.topologyBuilder.close();
+        return topologyBuilder.close();
     }
 
     @Override
     public ServiceGroupIdentifier getIdentifier() {
-        return ServiceGroupIdentifier.create(getInstanceIdentifier().firstKeyOf(Topology.class)
-                .getTopologyId().getValue());
+        return new ServiceGroupIdentifier(
+            getInstanceIdentifier().firstKeyOf(Topology.class).getTopologyId().getValue());
     }
 
     @Override
     public Topology getConfiguration() {
-        return this.configuration;
+        return configuration;
     }
 
 }
index 3c8e6478812595eb65309984170bd7e92ea96f44..79dca05c612c4557398557a7c0b8927bf195882d 100644 (file)
@@ -5,18 +5,15 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.bgpcep.bgp.topology.provider.spi;
 
 import org.opendaylight.bgpcep.topology.TopologyReference;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonService;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
 
 public interface TopologyReferenceSingletonService extends TopologyReference, AutoCloseable, ClusterSingletonService  {
-
     @Override
     void close();
 
     Topology getConfiguration();
-
 }
index dd438d2b6cd3474640695f25d887ea9602d5448c..eb09fc6f014858dc8b5fb1e695b876b82cf1a096 100644 (file)
@@ -394,7 +394,7 @@ public class LinkstateTopologyBuilderTest extends AbstractTopologyBuilderTest {
         verify(spiedLinkstateTopologyBuilder, never()).resetListener();
         Thread.sleep(LISTENER_RESTART_TIME);
         // manually invoke onTransactionChainFailed() to have the listener restart scheduled again
-        spiedLinkstateTopologyBuilder.onTransactionChainFailed(null, null, null);
+        spiedLinkstateTopologyBuilder.onFailure(null);
         assertEquals(spiedLinkstateTopologyBuilder.listenerScheduledRestartTime, listenerScheduledRestartTime
                 + LISTENER_RESTART_TIME);
         verify(spiedLinkstateTopologyBuilder, times(5)).restartTransactionChainOnDemand();
index 1e339c76137dcf1e2d0f821f1e7d77788c56cc8c..2cb1fc59d4504e2a3830515e1426b566429ca419 100644 (file)
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.opendaylight.mdsal</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>12.0.4</version>
+        <version>13.0.0</version>
         <relativePath/>
     </parent>
 
index 3b950e5d26775c14c75429b5ebae73d0e7f6366f..f10e26e048dd933ae4a914baba0ed864d8f5bf3c 100644 (file)
         </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
-            <artifactId>mdsal-singleton-common-api</artifactId>
+            <artifactId>mdsal-singleton-api</artifactId>
         </dependency>
         <dependency>
             <groupId>io.netty</groupId>
index 10e01044fd6ad47fdd5d7cf0e829aa4c33cdaeb7..5e6e65f67adaf3ef38403a5fed411822b7655e32 100644 (file)
@@ -26,10 +26,9 @@ import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
-import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonService;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonServiceProvider;
+import org.opendaylight.mdsal.singleton.api.ServiceGroupIdentifier;
 import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext;
 import org.opendaylight.protocol.bmp.api.BmpDispatcher;
 import org.opendaylight.protocol.bmp.impl.spi.BmpMonitoringStation;
@@ -42,6 +41,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.moni
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.monitor.rev200120.bmp.monitor.Monitor;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.monitor.rev200120.routers.Router;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.rfc2385.cfg.rev160324.Rfc2385Key;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
@@ -54,7 +54,7 @@ public final class BmpMonitoringStationImpl implements BmpMonitoringStation, Clu
 
     private static final QName MONITOR_ID_QNAME = QName.create(Monitor.QNAME, "monitor-id").intern();
     private static final ServiceGroupIdentifier SERVICE_GROUP_IDENTIFIER =
-            ServiceGroupIdentifier.create("bmp-monitors-service-group");
+            new ServiceGroupIdentifier("bmp-monitors-service-group");
 
     private final DOMDataBroker domDataBroker;
     private final InetSocketAddress address;
@@ -64,7 +64,7 @@ public final class BmpMonitoringStationImpl implements BmpMonitoringStation, Clu
     private final RouterSessionManager sessionManager;
     private final YangInstanceIdentifier yangMonitorId;
     private Channel channel;
-    private ClusterSingletonServiceRegistration singletonServiceRegistration;
+    private Registration singletonServiceRegistration;
 
     public BmpMonitoringStationImpl(final DOMDataBroker domDataBroker, final BmpDispatcher dispatcher,
             final RIBExtensionConsumerContext extensions, final BindingCodecTree codecTree,
@@ -83,14 +83,14 @@ public final class BmpMonitoringStationImpl implements BmpMonitoringStation, Clu
         sessionManager = new RouterSessionManager(yangMonitorId, this.domDataBroker, extensions, codecTree);
 
         LOG.info("BMP Monitor Singleton Service {} registered, Monitor Id {}",
-                getIdentifier().getName(), this.monitorId.getValue());
+                getIdentifier().value(), this.monitorId.getValue());
         singletonServiceRegistration = singletonProvider.registerClusterSingletonService(this);
     }
 
     @Override
     public synchronized void instantiateServiceInstance() {
         LOG.info("BMP Monitor Singleton Service {} instantiated, Monitor Id {}",
-                getIdentifier().getName(), monitorId.getValue());
+                getIdentifier().value(), monitorId.getValue());
 
         final ChannelFuture channelFuture = dispatcher.createServer(address, sessionManager,
                 constructKeys(monitoredRouters));
@@ -128,7 +128,7 @@ public final class BmpMonitoringStationImpl implements BmpMonitoringStation, Clu
     @Override
     public synchronized FluentFuture<? extends CommitInfo> closeServiceInstance() {
         LOG.info("BMP Monitor Singleton Service {} instance closed, Monitor Id {}",
-                getIdentifier().getName(), monitorId.getValue());
+                getIdentifier().value(), monitorId.getValue());
         if (channel != null) {
             channel.close().addListener((ChannelFutureListener) future -> {
                 Preconditions.checkArgument(future.isSuccess(),
index 76dfd38fca39c7213121cf0bcf101a50607db8c8..ab33bb7b2a7330639b59adf7e4c2271891583ba6 100644 (file)
@@ -25,10 +25,8 @@ import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeTransaction;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
-import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
 import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext;
 import org.opendaylight.protocol.bmp.api.BmpSession;
 import org.opendaylight.protocol.bmp.impl.spi.BmpRouter;
@@ -45,6 +43,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.moni
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.monitor.rev200120.peers.Peer;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.monitor.rev200120.routers.Router;
 import org.opendaylight.yangtools.yang.binding.Notification;
+import org.opendaylight.yangtools.yang.common.Empty;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
@@ -53,7 +52,7 @@ import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public final class BmpRouterImpl implements BmpRouter, DOMTransactionChainListener {
+public final class BmpRouterImpl implements BmpRouter, FutureCallback<Empty> {
 
     private static final Logger LOG = LoggerFactory.getLogger(BmpRouterImpl.class);
 
@@ -83,7 +82,8 @@ public final class BmpRouterImpl implements BmpRouter, DOMTransactionChainListen
     public BmpRouterImpl(final RouterSessionManager sessionManager) {
         this.sessionManager = requireNonNull(sessionManager);
         domDataBroker = sessionManager.getDomDataBroker();
-        domTxChain = domDataBroker.createMergingTransactionChain(this);
+        domTxChain = domDataBroker.createMergingTransactionChain();
+        domTxChain.addCallback(this);
         extensions = sessionManager.getExtensions();
         tree = sessionManager.getCodecTree();
     }
@@ -182,14 +182,13 @@ public final class BmpRouterImpl implements BmpRouter, DOMTransactionChainListen
     }
 
     @Override
-    public synchronized void onTransactionChainFailed(final DOMTransactionChain chain,
-        final DOMDataTreeTransaction transaction, final Throwable cause) {
+    public synchronized void onFailure(final Throwable cause) {
         LOG.error("Transaction chain failed.", cause);
     }
 
     @Override
-    public void onTransactionChainSuccessful(final DOMTransactionChain chain) {
-        LOG.debug("Transaction chain {} successfully.", chain);
+    public void onSuccess(final Empty value) {
+        LOG.debug("Transaction chain finished successfully.");
     }
 
     private synchronized boolean isDatastoreWritable() {
index 6225e275b48ed6e581889105d28e0ae9c9d369fe..499d3f0cdf613d0726e87c6236ef6b658eb5c03a 100644 (file)
@@ -15,6 +15,7 @@ import com.google.common.util.concurrent.MoreExecutors;
 import java.net.InetSocketAddress;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import javax.annotation.PreDestroy;
@@ -32,7 +33,7 @@ import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonServiceProvider;
 import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext;
 import org.opendaylight.protocol.bmp.api.BmpDispatcher;
 import org.opendaylight.protocol.bmp.impl.app.BmpMonitoringStationImpl;
@@ -44,7 +45,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.moni
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.monitor.rev200120.BmpMonitor;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.monitor.rev200120.MonitorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.monitor.rev200120.bmp.monitor.Monitor;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@@ -82,7 +83,7 @@ public final class BmpDeployerImpl implements ClusteredDataTreeChangeListener<Od
     @GuardedBy("this")
     private final Map<MonitorId, BmpMonitoringStationImpl> bmpMonitorServices = new HashMap<>();
     @GuardedBy("this")
-    private ListenerRegistration<BmpDeployerImpl> registration;
+    private Registration registration;
 
     @Activate
     @Inject
@@ -114,7 +115,7 @@ public final class BmpDeployerImpl implements ClusteredDataTreeChangeListener<Od
     }
 
     @Override
-    public synchronized void onDataTreeChanged(final Collection<DataTreeModification<OdlBmpMonitors>> changes) {
+    public synchronized void onDataTreeChanged(final List<DataTreeModification<OdlBmpMonitors>> changes) {
         final DataTreeModification<OdlBmpMonitors> dataTreeModification = Iterables.getOnlyElement(changes);
         final Collection<? extends DataObjectModification<? extends DataObject>> rootNode =
             dataTreeModification.getRootNode().getModifiedChildren();
index 5b5b08e2c5bb5274c8bfe48275135f690f08713f..16e367789aa3627c706d66de8efd74c892b9b5c9 100644 (file)
@@ -46,9 +46,8 @@ import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBro
 import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractDataBrokerTestCustomizer;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonService;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonServiceProvider;
 import org.opendaylight.protocol.bgp.inet.RIBActivator;
 import org.opendaylight.protocol.bgp.parser.impl.BGPActivator;
 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderContext;
@@ -92,6 +91,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.moni
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.monitor.rev200120.peers.peer.Stats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.monitor.rev200120.routers.Router;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.monitor.rev200120.routers.RouterKey;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@@ -126,9 +126,9 @@ public class BmpMonitorImplTest extends AbstractConcurrentDataBrokerTest {
     private ClusterSingletonService singletonService;
     private ClusterSingletonService singletonService2;
     @Mock
-    private ClusterSingletonServiceRegistration singletonServiceRegistration;
+    private Registration singletonServiceRegistration;
     @Mock
-    private ClusterSingletonServiceRegistration singletonServiceRegistration2;
+    private Registration singletonServiceRegistration2;
     @Mock
     private ClusterSingletonServiceProvider clusterSSProv;
     @Mock
index bbf3cda4c161660e18734095c80624901e498c86..abc507dd1ee28d1df741742604cc78072bc9aae0 100644 (file)
@@ -30,7 +30,7 @@ public final class OSGiConfigLoader extends AbstractWatchingConfigLoader {
 
     @Reference(policy = ReferencePolicy.DYNAMIC, updated = "setRuntimeContext", unbind = "setRuntimeContext")
     void setRuntimeContext(final BindingRuntimeContext runtimeContext) {
-        updateModelContext(runtimeContext.getEffectiveModelContext());
+        updateModelContext(runtimeContext.modelContext());
     }
 
     @Activate
index cd797a9bef0d21f939f4238f71dea2ac3e8be7ae..f2247033e41f0c709f17c9f4f66b6c7076e4fccd 100644 (file)
@@ -26,9 +26,9 @@ public final class SimpleConfigLoader extends AbstractWatchingConfigLoader imple
 
     @Inject
     public SimpleConfigLoader(final FileWatcher fileWatcher, final BindingRuntimeContext runtimeContext) {
-        updateModelContext(runtimeContext.getEffectiveModelContext());
-        this.watchService = fileWatcher.getWatchService();
-        this.directory = new File(fileWatcher.getPathFile());
+        updateModelContext(runtimeContext.modelContext());
+        watchService = fileWatcher.getWatchService();
+        directory = new File(fileWatcher.getPathFile());
     }
 
     @PostConstruct
index a1f2a21657046242ae2b1b92166a4544c8afa376..af2e9d4082cdac88efd10115a8880f9fa3e3f1ff 100644 (file)
@@ -45,13 +45,13 @@ public abstract class AbstractConfigLoaderTest extends AbstractConcurrentDataBro
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
         doNothing().when(processor).loadConfiguration(any());
-        configLoader.updateModelContext(getSchemaContext());
+        configLoader.updateModelContext(modelContext());
     }
 
     @Override
     protected AbstractDataBrokerTestCustomizer createDataBrokerTestCustomizer() {
-        final AbstractDataBrokerTestCustomizer customizer = super.createDataBrokerTestCustomizer();
-        this.schemaService = customizer.getSchemaService();
+        final var customizer = super.createDataBrokerTestCustomizer();
+        schemaService = customizer.getSchemaService();
         return customizer;
     }
 
index 1d78609e1cdc2707afad16e578093b2fdbff4b63..554588d358e60bb14d67a02f13885b292467b389 100644 (file)
@@ -54,7 +54,7 @@ public class OSGiConfigLoaderTest {
         }).when(watchKey).pollEvents();
         doReturn("watchEvent").when(watchEvent).context();
         doReturn(true).when(watchKey).reset();
-        doReturn(domContext).when(bindingContext).getEffectiveModelContext();
+        doReturn(domContext).when(bindingContext).modelContext();
 
         loader = new OSGiConfigLoader();
         loader.watcher = watcher;
index b823aecef31148084f5350462cc1b2b02968e651..032bd3a84b70c5bc34ae02b38bc462b628719165 100644 (file)
@@ -45,7 +45,7 @@ public class SimpleConfigLoaderTest {
 
     @Before
     public void before() throws InterruptedException {
-        doReturn(domContext).when(bindingContext).getEffectiveModelContext();
+        doReturn(domContext).when(bindingContext).modelContext();
         doReturn(watchService).when(watcher).getWatchService();
         doReturn("foo").when(watcher).getPathFile();
         doReturn(watchKey).when(watchService).take();
index a2535d0f1a719244c19102ea3b62c9c37bd52bd2..ccfa55ef8662778a5d90066f54c8a4d7784b43f1 100644 (file)
@@ -8,19 +8,19 @@
 
 package org.opendaylight.protocol.data.change.counter;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.MoreExecutors;
-import java.util.Collection;
+import java.util.List;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.LongAdder;
-import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
-import org.opendaylight.mdsal.binding.api.Transaction;
 import org.opendaylight.mdsal.binding.api.TransactionChain;
-import org.opendaylight.mdsal.binding.api.TransactionChainListener;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
@@ -32,65 +32,67 @@ 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.TopologyId;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.Empty;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-final class TopologyDataChangeCounter implements ClusteredDataTreeChangeListener<Topology>,
-    TransactionChainListener, AutoCloseable {
-
+final class TopologyDataChangeCounter
+        implements DataTreeChangeListener<Topology>, FutureCallback<Empty>, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(TopologyDataChangeCounter.class);
 
     private final DataBroker dataBroker;
     private final String counterId;
     private final InstanceIdentifier<Counter> counterInstanceId;
     private final LongAdder count = new LongAdder();
-    private final ListenerRegistration<TopologyDataChangeCounter> registration;
     private final AtomicBoolean closed = new AtomicBoolean(false);
+    private final Registration registration;
+
     private TransactionChain transactionChain;
 
     TopologyDataChangeCounter(final DataBroker dataBroker, final String counterId, final String topologyName) {
-        this.dataBroker = dataBroker;
-        this.transactionChain = this.dataBroker.createMergingTransactionChain(this);
+        this.dataBroker = requireNonNull(dataBroker);
+        transactionChain = dataBroker.createMergingTransactionChain();
         this.counterId = counterId;
-        this.counterInstanceId = InstanceIdentifier.builder(DataChangeCounter.class)
+        counterInstanceId = InstanceIdentifier.builder(DataChangeCounter.class)
                 .child(Counter.class, new CounterKey(this.counterId)).build();
-        putCount(this.count.longValue());
+        putCount(count.longValue());
         final InstanceIdentifier<Topology> topoIId = InstanceIdentifier.builder(NetworkTopology.class)
                 .child(Topology.class, new TopologyKey(new TopologyId(topologyName))).build();
-        this.registration = this.dataBroker.registerDataTreeChangeListener(
-            DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, topoIId), this);
+        registration = dataBroker.registerTreeChangeListener(
+            DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, topoIId), this);
         LOG.debug("Data change counter {} initiated", this.counterId);
+        transactionChain.addCallback(this);
     }
 
     @Override
-    public synchronized void onDataTreeChanged(final Collection<DataTreeModification<Topology>> changes) {
-        this.count.increment();
-        final long inc = this.count.sum();
-        LOG.debug("Data change #{} for counter {}", inc, this.counterId);
+    public synchronized void onDataTreeChanged(final List<DataTreeModification<Topology>> changes) {
+        count.increment();
+        final long inc = count.sum();
+        LOG.debug("Data change #{} for counter {}", inc, counterId);
         putCount(inc);
     }
 
     @Override
     public synchronized void close() {
-        this.registration.close();
-        final WriteTransaction wTx = this.dataBroker.newWriteOnlyTransaction();
-        wTx.delete(LogicalDatastoreType.OPERATIONAL, this.counterInstanceId);
+        registration.close();
+        final WriteTransaction wTx = dataBroker.newWriteOnlyTransaction();
+        wTx.delete(LogicalDatastoreType.OPERATIONAL, counterInstanceId);
         try {
             wTx.commit().get();
         } catch (final ExecutionException | InterruptedException except) {
-            LOG.warn("Error on remove data change counter {}", this.counterId, except);
+            LOG.warn("Error on remove data change counter {}", counterId, except);
         }
-        this.transactionChain.close();
-        LOG.debug("Data change counter {} removed", this.counterId);
+        transactionChain.close();
+        LOG.debug("Data change counter {} removed", counterId);
     }
 
     private void putCount(final long totalCount) {
-        final WriteTransaction wTx = this.transactionChain.newWriteOnlyTransaction();
-        final Counter counter = new CounterBuilder().setId(this.counterId).setCount(Uint32.valueOf(totalCount)).build();
-        wTx.put(LogicalDatastoreType.OPERATIONAL, this.counterInstanceId, counter);
+        final WriteTransaction wTx = transactionChain.newWriteOnlyTransaction();
+        final Counter counter = new CounterBuilder().setId(counterId).setCount(Uint32.valueOf(totalCount)).build();
+        wTx.put(LogicalDatastoreType.OPERATIONAL, counterInstanceId, counter);
         wTx.commit().addCallback(new FutureCallback<CommitInfo>() {
             @Override
             public void onSuccess(final CommitInfo result) {
@@ -105,17 +107,17 @@ final class TopologyDataChangeCounter implements ClusteredDataTreeChangeListener
     }
 
     @Override
-    public synchronized void onTransactionChainFailed(final TransactionChain chain, final Transaction transaction,
-        final Throwable cause) {
-        LOG.warn("Transaction chain failure. Transaction: {}", transaction, cause);
+    public synchronized void onFailure(final Throwable cause) {
+        LOG.warn("Transaction chain failure", cause);
         if (!closed.get()) {
-            this.transactionChain.close();
-            this.transactionChain = dataBroker.createMergingTransactionChain(this);
+            transactionChain.close();
+            transactionChain = dataBroker.createMergingTransactionChain();
+            transactionChain.addCallback(this);
         }
     }
 
     @Override
-    public synchronized void onTransactionChainSuccessful(final TransactionChain chain) {
-        LOG.debug("Transaction chain successful. {}", chain);
+    public synchronized void onSuccess(final Empty result) {
+        LOG.debug("Transaction chain successful");
     }
 }
index 1f05000cd1ff6a09815513fccb8c1f7bdec1265d..0583d5bb2e122a41bc0357e6c44bcd10afa33ab7 100644 (file)
@@ -9,8 +9,8 @@ package org.opendaylight.protocol.data.change.counter;
 
 import static java.util.Objects.requireNonNull;
 
-import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
@@ -23,7 +23,7 @@ import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgpcep.data.change.counter.config.rev170424.DataChangeCounterConfig;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
@@ -44,14 +44,14 @@ public final class TopologyDataChangeCounterDeployer implements DataTreeChangeLi
     @GuardedBy("this")
     private final Map<String, TopologyDataChangeCounter> counters = new HashMap<>();
     @GuardedBy("this")
-    private ListenerRegistration<TopologyDataChangeCounterDeployer> registration;
+    private Registration registration;
 
     @Inject
     @Activate
     public TopologyDataChangeCounterDeployer(@Reference final DataBroker dataBroker) {
         this.dataBroker = requireNonNull(dataBroker);
-        registration = dataBroker.registerDataTreeChangeListener(
-            DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, DATA_CHANGE_COUNTER_IID), this);
+        registration = dataBroker.registerTreeChangeListener(
+            DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, DATA_CHANGE_COUNTER_IID), this);
         LOG.info("Data change counter Deployer started");
     }
 
@@ -69,21 +69,20 @@ public final class TopologyDataChangeCounterDeployer implements DataTreeChangeLi
     }
 
     @Override
-    public synchronized void onDataTreeChanged(
-            final Collection<DataTreeModification<DataChangeCounterConfig>> changes) {
+    public synchronized void onDataTreeChanged(final List<DataTreeModification<DataChangeCounterConfig>> changes) {
         for (var change : changes) {
             final var rootNode = change.getRootNode();
-            switch (rootNode.getModificationType()) {
+            switch (rootNode.modificationType()) {
                 case DELETE:
-                    deleteCounterChange(rootNode.getDataBefore().getCounterId());
+                    deleteCounterChange(rootNode.dataBefore().getCounterId());
                     break;
                 case SUBTREE_MODIFIED:
                 case WRITE:
-                    final var counterConfig = rootNode.getDataAfter();
+                    final var counterConfig = rootNode.dataAfter();
                     handleCounterChange(counterConfig.getCounterId(), counterConfig.getTopologyName());
                     break;
                 default:
-                    LOG.error("Unhandled modification Type: {}", rootNode.getModificationType());
+                    LOG.error("Unhandled modification Type: {}", rootNode.modificationType());
                     break;
             }
         }
index 7af481c38038805da033871b7c8600a9f74246a4..04cd48425a533a197bf3acb2af881ff7b9a3d64b 100644 (file)
@@ -11,7 +11,7 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-bgp-benchmark" version="${project.version}">
-        <feature version="[8,9)">odl-mdsal-broker</feature>
-        <feature version="[8,9)">odl-controller-blueprint</feature>
+        <feature version="[9,10)">odl-mdsal-broker</feature>
+        <feature version="[9,10)">odl-controller-blueprint</feature>
     </feature>
 </features>
index b7ae84bb1bb9cb0637b1ed008647e57f682c60ff..c391fcd7b3852b163528828417ab519ceef6379e 100644 (file)
@@ -8,6 +8,6 @@
   -->
 <features name="odl-bgpcep-bgp-dependencies-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.4.0">
     <feature name="odl-bgpcep-bgp-dependencies" version="${project.version}">
-        <feature version="[11,12)">odl-yangtools-data-api</feature>
+        <feature version="[13,14)">odl-yangtools-data-api</feature>
     </feature>
 </features>
index 80969130231ba1ed1e8603521d5d38d2d85f5a7f..9bda42ccf555037544fde44cc327590d06376925 100644 (file)
@@ -11,6 +11,6 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-bgp-evpn" version="${project.version}">
-        <feature version="[12,13)">odl-mdsal-rfc8294-netty</feature>
+        <feature version="[13,14)">odl-mdsal-rfc8294-netty</feature>
     </feature>
 </features>
index 62b9bf9f68d911f365bafc8a1e3bcca5d996e3b8..b87a9a7721e3d6019de116b76d754c24f6559eea 100644 (file)
@@ -11,6 +11,6 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-bgp-labeled-unicast" version="${project.version}">
-        <feature version="[12,13)">odl-mdsal-rfc8294-netty</feature>
+        <feature version="[13,14)">odl-mdsal-rfc8294-netty</feature>
     </feature>
 </features>
index 721e4dd6ca7741a407c506e4ee82006b6dbf6673..1a036a3fea393931b83a4f3277997100f2cda191 100644 (file)
@@ -11,7 +11,7 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-bgp-linkstate" version="${project.version}">
-        <feature version="[8,9)">odl-mdsal-broker</feature>
-        <feature version="[12,13)">odl-mdsal-rfc8294-netty</feature>
+        <feature version="[9,10)">odl-mdsal-broker</feature>
+        <feature version="[13,14)">odl-mdsal-rfc8294-netty</feature>
     </feature>
 </features>
index ccb4d08964f329e9a20d22ac56627c420ad2c146..6f3924cc443160eaa1cff1e3ba97bb9cb477b386 100644 (file)
@@ -11,6 +11,6 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-bgp-openconfig-rp-impl" version="${project.version}">
-        <feature version="[8,9)">odl-mdsal-broker</feature>
+        <feature version="[9,10)">odl-mdsal-broker</feature>
     </feature>
 </features>
index a1982781c3a3fea7d68005e00dd016f5d8d9cac5..e75930725eb9765c5546201a79c785c3c598e6b1 100644 (file)
@@ -11,6 +11,6 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-bgp-openconfig-rp-statement" version="${project.version}">
-        <feature version="[8,9)">odl-mdsal-broker</feature>
+        <feature version="[9,10)">odl-mdsal-broker</feature>
     </feature>
 </features>
index ae408a7f030ad78100674d1803bde151e6003465..d1d398f3aea2bebb7a378d6c3dbef3e581e9c9aa 100644 (file)
@@ -11,7 +11,7 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-bgp-parser-api" version="${project.version}">
-        <feature version="[11,12)">odl-yangtools-data</feature>
-        <feature version="[11,12)">odl-yangtools-netty</feature>
+        <feature version="[13,14)">odl-yangtools-data</feature>
+        <feature version="[13,14)">odl-yangtools-netty</feature>
     </feature>
 </features>
index 81acbf6e3d439809da93986a8cc4163580e29b06..dbb7ca5d6670da96999063275ae4328041e4f8c7 100644 (file)
@@ -11,9 +11,9 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-bgp-rib-api" version="${project.version}">
-        <feature version="[12,13)">odl-mdsal-model-rfc8343</feature>
-        <feature version="[12,13)">odl-mdsal-singleton-common</feature>
-        <feature version="[12,13)">odl-mdsal-dom-api</feature>
-        <feature version="[12,13)">odl-mdsal-binding-runtime</feature>
+        <feature version="[13,14)">odl-mdsal-model-rfc8343</feature>
+        <feature version="[13,14)">odl-mdsal-singleton-common</feature>
+        <feature version="[13,14)">odl-mdsal-dom-api</feature>
+        <feature version="[13,14)">odl-mdsal-binding-runtime</feature>
     </feature>
 </features>
index c559d534ceb6382f0a7c5444ee669f398eaf32b5..6d08089c4bf1274e2c3c095665ce70d46783062d 100644 (file)
             <type>xml</type>
             <classifier>routing-policy-default-config</classifier>
         </dependency>
-        <dependency>
-            <groupId>org.opendaylight.controller</groupId>
-            <artifactId>odl-controller-exp-netty-config</artifactId>
-            <type>xml</type>
-            <classifier>features</classifier>
-        </dependency>
         <dependency>
             <groupId>org.opendaylight.controller</groupId>
             <artifactId>odl-controller-blueprint</artifactId>
index a3863066bb96e23ae9440b0369784eba4e97e410..cc99f0fb1124a1b78e8edc3246410287ae307a71 100644 (file)
@@ -11,8 +11,7 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-bgp-rib-impl" version="${project.version}">
-        <feature version="[8,9)">odl-controller-blueprint</feature>
-        <feature version="[8,9)">odl-controller-exp-netty-config</feature>
+        <feature version="[9,10)">odl-controller-blueprint</feature>
         <configfile finalname="etc/opendaylight/bgpcep/routing-policy-default-config.xml">mvn:org.opendaylight.bgpcep/bgp-config-example/${project.version}/xml/routing-policy-default-config</configfile>
     </feature>
 </features>
index 4a3b5fc2e4f2944d4efeedb22830a121164f7501..82abd8bfa3dc7a98ddf99d908606498c302c3dca 100644 (file)
@@ -11,6 +11,6 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-bmp-config-loader" version="${project.version}">
-        <feature version="[8,9)">odl-mdsal-broker</feature>
+        <feature version="[9,10)">odl-mdsal-broker</feature>
     </feature>
 </features>
index 54e899a81744b8610c69b120b745324c49be1df0..e8348102775bbb559fac6430547bb73c1a8b03f6 100644 (file)
@@ -11,7 +11,7 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-concepts" version="${project.version}">
-        <feature version="[12,13)">odl-mdsal-model-rfc6991</feature>
-        <feature version="[12,13)">odl-mdsal-model-rfc8294</feature>
+        <feature version="[13,14)">odl-mdsal-model-rfc6991</feature>
+        <feature version="[13,14)">odl-mdsal-model-rfc8294</feature>
     </feature>
 </features>
index 85dd87da74fb294e0e6eb896f14511e16ad19a1f..270e644cddbb86f7dc9ec8f63b4cf460048c0935 100644 (file)
@@ -11,6 +11,6 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-config-loader-impl" version="${project.version}">
-        <feature version="[11,12)">odl-yangtools-codec</feature>
+        <feature version="[13,14)">odl-yangtools-codec</feature>
     </feature>
 </features>
index 1b7f976e8a487618ebb842344c935e893b795b5b..a155fa512807af3a28bc187b7cec1853fb7425fe 100644 (file)
@@ -11,6 +11,6 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-config-loader-spi" version="${project.version}">
-        <feature version="[12,13)">odl-mdsal-binding-runtime</feature>
+        <feature version="[13,14)">odl-mdsal-binding-runtime</feature>
     </feature>
 </features>
index f7dc754addc7b301c871c2f187d9ac2d4cd48a90..acb257099c64958d365a2c4bf93f3e6b8ede147c 100644 (file)
@@ -8,7 +8,7 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-bgpcep-data-change-counter-${project.version}">
     <feature name="odl-bgpcep-data-change-counter" version="${project.version}">
-        <feature version="[12,13)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
-        <feature version="[8,9)">odl-mdsal-broker</feature>
+        <feature version="[13,14)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
+        <feature version="[9,10)">odl-mdsal-broker</feature>
     </feature>
 </features>
index 5d1396dde306e5daf39ea4ea8325794ef73b2f47..9bb4808221e937ff5d84b0d8da41bb22a4ae935c 100644 (file)
@@ -11,7 +11,7 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-graph-api" version="${project.version}">
-        <feature version="[12,13)">odl-mdsal-model-rfc6991</feature>
-        <feature version="[12,13)">odl-mdsal-model-rfc8294</feature>
+        <feature version="[13,14)">odl-mdsal-model-rfc6991</feature>
+        <feature version="[13,14)">odl-mdsal-model-rfc8294</feature>
     </feature>
 </features>
index 78b5baf3e0f2081bf8051e4f40bea710fc7c6169..1f35a27b33366bdcf9854f92409ebaea2046c054 100644 (file)
@@ -11,6 +11,6 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-graph" version="${project.version}">
-        <feature version="[8,9)">odl-mdsal-broker</feature>
+        <feature version="[9,10)">odl-mdsal-broker</feature>
     </feature>
 </features>
index c26d10acb07777efa31589c9ee615410828e597c..b7942aa5e00b62b41e719ce966448f0662c42786 100644 (file)
     <name>OpenDaylight :: PCEP :: Impl</name>
 
     <dependencies>
-        <dependency>
-            <groupId>org.opendaylight.controller</groupId>
-            <artifactId>odl-controller-exp-netty-config</artifactId>
-            <type>xml</type>
-            <classifier>features</classifier>
-        </dependency>
         <dependency>
             <groupId>org.opendaylight.controller</groupId>
             <artifactId>odl-mdsal-broker</artifactId>
index 1ff0ad1ace8628b3b8c6f68d8755250fca7e2502..871d2d6da4cd0c9ba82307e718d1402fd51e6d03 100644 (file)
@@ -11,7 +11,6 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-pcep-impl" version="${project.version}">
-        <feature version="[8,9)">odl-controller-exp-netty-config</feature>
-        <feature version="[8,9)">odl-mdsal-broker</feature>
+        <feature version="[9,10)">odl-mdsal-broker</feature>
     </feature>
 </features>
index bc1697db9330695871052fc967e6dc472e97e8be..825804cf4c75b9d19b47c1df898aa59679c6a7a8 100644 (file)
@@ -11,6 +11,6 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-pcep-p2mp-te-lsp" version="${project.version}">
-        <feature version="[8,9)">odl-mdsal-broker</feature>
+        <feature version="[9,10)">odl-mdsal-broker</feature>
     </feature>
 </features>
index 6a237bd8eb7a5769a994be3c4306cd13bfb69708..08ef523bfedd9290589d9ea22fdb7108b3e91b07 100644 (file)
@@ -8,6 +8,6 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-bgpcep-programming-api-${project.version}">
     <feature name="odl-bgpcep-programming-api" version="${project.version}">
-        <feature version="[12,13)">odl-mdsal-singleton-common</feature>
+        <feature version="[13,14)">odl-mdsal-singleton-common</feature>
     </feature>
 </features>
index 70b4102357a0ffdf3bf79047df317d0c7eaa8901..7bbdcd80493e1f4ac539de7ef33bbd6ead5790c3 100644 (file)
             <type>xml</type>
             <classifier>features</classifier>
         </dependency>
-        <dependency>
-            <groupId>org.opendaylight.controller</groupId>
-            <artifactId>odl-controller-exp-netty-config</artifactId>
-            <type>xml</type>
-            <classifier>features</classifier>
-        </dependency>
     </dependencies>
 </project>
index 8bbae521342074c3b7def5eeda5f1ee342f18603..17bc6bd5bdd7c7b880ba1df4f8c4719191e8ba38 100644 (file)
@@ -11,7 +11,6 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-programming-impl" version="${project.version}">
-        <feature version="[8,9)">odl-controller-exp-netty-config</feature>
-        <feature version="[8,9)">odl-mdsal-broker</feature>
+        <feature version="[9,10)">odl-mdsal-broker</feature>
     </feature>
 </features>
index bf2939369c41a676d91edf571d7c126b50fc151f..2b8360638c96cdfb256907ca6ea16bae9dc63e6a 100644 (file)
@@ -11,6 +11,6 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-rsvp-api" version="${project.version}">
-        <feature version="[11,12)">odl-yangtools-netty</feature>
+        <feature version="[13,14)">odl-yangtools-netty</feature>
     </feature>
 </features>
index 24d319bb1d76f5a8d8d29923be38c8028a2773e9..4c95e0365e307a43eaade4005d287dafabca9489 100644 (file)
@@ -11,6 +11,6 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-topology-api" version="${project.version}">
-        <feature version="[12,13)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
+        <feature version="[13,14)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
     </feature>
 </features>
index 0cfb78a07994df72ec7d30eea95228dcdfdf9729..fabd0e415603a83717424eb60e34b4fce2090d60 100644 (file)
@@ -11,6 +11,6 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
     <feature name="odl-bgpcep-topology-config-loader" version="${project.version}">
-        <feature version="[8,9)">odl-mdsal-broker</feature>
+        <feature version="[9,10)">odl-mdsal-broker</feature>
     </feature>
 </features>
index ce16a8443fc197dde9027ed476da46583d2fa1c5..ac7dbff855f9e6790d4ede279d679eb4e0e0b4bb 100644 (file)
@@ -8,6 +8,6 @@
   -->
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-bgpcep-topology-tunnel-api-${project.version}">
     <feature name="odl-bgpcep-topology-tunnel-api" version="${project.version}">
-        <feature version="[12,13)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
+        <feature version="[13,14)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
     </feature>
 </features>
index 731f2ddf76d4d65b08910ea1c7717765c4a44918..0cda75ab23d4c0f20acf79af0781b377c4c91249 100644 (file)
@@ -26,9 +26,7 @@ import org.opendaylight.graph.ConnectedGraph;
 import org.opendaylight.graph.ConnectedGraphProvider;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
-import org.opendaylight.mdsal.binding.api.Transaction;
 import org.opendaylight.mdsal.binding.api.TransactionChain;
-import org.opendaylight.mdsal.binding.api.TransactionChainListener;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
@@ -43,6 +41,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.re
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev220720.graph.topology.graph.Vertex;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.Empty;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Deactivate;
@@ -59,7 +58,7 @@ import org.slf4j.LoggerFactory;
  */
 @Singleton
 @Component(immediate = true, service = ConnectedGraphProvider.class)
-public final class ConnectedGraphServer implements ConnectedGraphProvider, TransactionChainListener, AutoCloseable {
+public final class ConnectedGraphServer implements ConnectedGraphProvider, FutureCallback<Empty>, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(ConnectedGraphServer.class);
     private static final @NonNull InstanceIdentifier<GraphTopology> GRAPH_TOPOLOGY_IDENTIFIER =
         InstanceIdentifier.create(GraphTopology.class);
@@ -95,7 +94,8 @@ public final class ConnectedGraphServer implements ConnectedGraphProvider, Trans
     private synchronized void initTransactionChain() {
         LOG.debug("Initializing transaction chain for Graph Model Server {}", this);
         checkState(chain == null, "Transaction chain has to be closed before being initialized");
-        chain = dataBroker.createMergingTransactionChain(this);
+        chain = dataBroker.createMergingTransactionChain();
+        chain.addCallback(this);
     }
 
     /**
@@ -373,14 +373,12 @@ public final class ConnectedGraphServer implements ConnectedGraphProvider, Trans
     }
 
     @Override
-    public synchronized void onTransactionChainFailed(final TransactionChain transactionChain,
-            final Transaction transaction, final Throwable cause) {
-        LOG.error("GraphModel builder for {} failed in transaction: {} ", GRAPH_TOPOLOGY_IDENTIFIER,
-                transaction != null ? transaction.getIdentifier() : null, cause);
+    public synchronized void onFailure(final Throwable cause) {
+        LOG.error("GraphModel builder for {} failed", GRAPH_TOPOLOGY_IDENTIFIER, cause);
     }
 
     @Override
-    public void onTransactionChainSuccessful(final TransactionChain transactionChain) {
+    public void onSuccess(final Empty result) {
         LOG.info("GraphModel builder for {} shut down", GRAPH_TOPOLOGY_IDENTIFIER);
     }
 
index 401dd238b1b3a9d53f6c9bac4d51a8c48e929681..c1eaa0deb6e118a3e4afa9e7fef1a8071ca8c187 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.graph.impl;
 import static java.util.Objects.requireNonNull;
 
 import java.util.Collection;
+import java.util.List;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 import javax.inject.Singleton;
@@ -23,11 +24,10 @@ import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev220720.GraphTopology;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev220720.graph.topology.Graph;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev220720.graph.topology.GraphKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev220720.graph.topology.graph.Edge;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev220720.graph.topology.graph.Prefix;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev220720.graph.topology.graph.Vertex;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.osgi.service.component.annotations.Activate;
@@ -51,7 +51,7 @@ public final class GraphListener implements DataTreeChangeListener<Graph>, AutoC
 
     private final ConnectedGraphProvider graphProvider;
 
-    private ListenerRegistration<GraphListener> listenerRegistration;
+    private Registration listenerRegistration;
 
     @Inject
     @Activate
@@ -61,7 +61,7 @@ public final class GraphListener implements DataTreeChangeListener<Graph>, AutoC
         final var graphIdentifier = InstanceIdentifier.builder(GraphTopology.class).child(Graph.class).build();
 
         listenerRegistration = dataBroker.registerDataTreeChangeListener(
-            DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, graphIdentifier), this);
+            DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, graphIdentifier), this);
         LOG.info("Registered listener {} on Graph Model at {}", this, graphIdentifier);
     }
 
@@ -92,9 +92,9 @@ public final class GraphListener implements DataTreeChangeListener<Graph>, AutoC
             final Collection<? extends DataObjectModification<? extends DataObject>> children) {
         for (var child : children) {
             final DataObject value;
-            switch (child.getModificationType()) {
+            switch (child.modificationType()) {
                 case DELETE:
-                    value = child.getDataBefore();
+                    value = child.dataBefore();
                     if (value instanceof Vertex vertex) {
                         cgraph.deleteVertex(vertex.key());
                     }
@@ -107,7 +107,7 @@ public final class GraphListener implements DataTreeChangeListener<Graph>, AutoC
                     break;
                 case SUBTREE_MODIFIED:
                 case WRITE:
-                    value = child.getDataAfter();
+                    value = child.dataAfter();
                     if (value instanceof Vertex vertex) {
                         cgraph.addVertex(vertex);
                     }
@@ -125,11 +125,11 @@ public final class GraphListener implements DataTreeChangeListener<Graph>, AutoC
     }
 
     @Override
-    public void onDataTreeChanged(final Collection<DataTreeModification<Graph>> changes) {
-        for (DataTreeModification<Graph> change : changes) {
-            DataObjectModification<Graph> root = change.getRootNode();
-            GraphKey key = change.getRootPath().getRootIdentifier().firstKeyOf(Graph.class);
-            switch (root.getModificationType()) {
+    public void onDataTreeChanged(final List<DataTreeModification<Graph>> changes) {
+        for (var change : changes) {
+            final var root = change.getRootNode();
+            final var key = change.getRootPath().path().firstKeyOf(Graph.class);
+            switch (root.modificationType()) {
                 case DELETE:
                     graphProvider.deleteGraph(key);
                     break;
@@ -142,10 +142,10 @@ public final class GraphListener implements DataTreeChangeListener<Graph>, AutoC
                     /* First look if the Graph was not already configured */
                     ConnectedGraph cgraph = graphProvider.getConnectedGraph(key);
                     if (cgraph == null) {
-                        graphProvider.addGraph(root.getDataAfter());
+                        graphProvider.addGraph(root.dataAfter());
                     } else {
                         /* Graph exist, process Children */
-                        parseSubTree(cgraph, root.getModifiedChildren());
+                        parseSubTree(cgraph, root.modifiedChildren());
                     }
                     break;
                 default:
index 253191b273fd9b93176902c84050e04449b999cf..d38e19890c9967d6c30ac41669ed1b96e88ade4f 100644 (file)
@@ -47,7 +47,7 @@
             <dependency>
                 <groupId>org.opendaylight.controller</groupId>
                 <artifactId>controller-artifacts</artifactId>
-                <version>8.0.4</version>
+                <version>9.0.0</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
@@ -55,7 +55,7 @@
             <dependency>
                 <groupId>org.opendaylight.yangtools</groupId>
                 <artifactId>yangtools-artifacts</artifactId>
-                <version>11.0.5</version>
+                <version>13.0.1</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
@@ -63,7 +63,7 @@
             <dependency>
                 <groupId>org.opendaylight.mdsal</groupId>
                 <artifactId>mdsal-artifacts</artifactId>
-                <version>12.0.4</version>
+                <version>13.0.0</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
@@ -71,7 +71,7 @@
             <dependency>
                 <groupId>org.opendaylight.netconf</groupId>
                 <artifactId>netconf-artifacts</artifactId>
-                <version>6.0.6</version>
+                <version>7.0.0</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
index 589a9cbed06286d4000e34866e256e1d6acce353..d4656a7b5561e5334c60a72678eb0ced5670b82f 100644 (file)
             <groupId>${project.groupId}</groupId>
             <artifactId>pcep-base-parser</artifactId>
         </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>pcep-topology-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
index 9563bfe6bbaaa1027027f5c8bb2e393042b43388..02c079f622bc35074449099060e1444634d6267e 100644 (file)
@@ -21,7 +21,7 @@ import org.opendaylight.bgpcep.pcep.server.PceServerProvider;
 import org.opendaylight.graph.ConnectedGraph;
 import org.opendaylight.graph.ConnectedGraphProvider;
 import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev220720.graph.topology.GraphKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
@@ -39,26 +39,27 @@ import org.slf4j.LoggerFactory;
 @Component(immediate = true)
 public final class DefaultPceServerProvider implements PceServerProvider, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(DefaultPceServerProvider.class);
+
+    private final Map<TopologyId, PathManagerProvider> pathManagers = new HashMap<>();
+    private final Map<TopologyId, PathManagerListener> pathListeners = new HashMap<>();
+    private final Map<TopologyId, PcepTopologyListener> pcepListeners = new HashMap<>();
     private final ConnectedGraphProvider graphProvider;
     private final PathComputationProvider algoProvider;
     private final DataBroker dataBroker;
-    private final RpcConsumerRegistry rpcRegistry;
-    private Map<TopologyId, PathManagerProvider> pathManagers = new HashMap<TopologyId, PathManagerProvider>();
-    private Map<TopologyId, PathManagerListener> pathListeners = new HashMap<TopologyId, PathManagerListener>();
-    private Map<TopologyId, PcepTopologyListener> pcepListeners = new HashMap<TopologyId, PcepTopologyListener>();
+    private final RpcService rpcService;
+
     private volatile ConnectedGraph tedGraph;
     private volatile GraphKey graphKey;
 
     @Inject
     @Activate
     public DefaultPceServerProvider(@Reference final ConnectedGraphProvider graphProvider,
-            @Reference final PathComputationProvider pathComputationProvider,
-            @Reference final DataBroker dataBroker,
-            @Reference final RpcConsumerRegistry rpcConsumerRegistry) {
+            @Reference final PathComputationProvider pathComputationProvider, @Reference final DataBroker dataBroker,
+            @Reference final RpcService rpcService) {
         this.graphProvider = requireNonNull(graphProvider);
-        this.algoProvider = requireNonNull(pathComputationProvider);
+        algoProvider = requireNonNull(pathComputationProvider);
         this.dataBroker = requireNonNull(dataBroker);
-        this.rpcRegistry = requireNonNull(rpcConsumerRegistry);
+        this.rpcService = requireNonNull(rpcService);
     }
 
     @Override
@@ -82,8 +83,7 @@ public final class DefaultPceServerProvider implements PceServerProvider, AutoCl
         pathManagers.clear();
     }
 
-    private void closeListenerAndManager(TopologyId key) {
-
+    private void closeListenerAndManager(final TopologyId key) {
         PathManagerListener pathListener = pathListeners.remove(key);
         if (pathListener != null) {
             pathListener.close();
@@ -123,9 +123,10 @@ public final class DefaultPceServerProvider implements PceServerProvider, AutoCl
     }
 
     @Override
-    public void registerPcepTopology(KeyedInstanceIdentifier<Topology, TopologyKey> topology, GraphKey key) {
+    public void registerPcepTopology(final KeyedInstanceIdentifier<Topology, TopologyKey> topology,
+            final GraphKey key) {
         TopologyId topoKey = requireNonNull(topology).getKey().getTopologyId();
-        this.graphKey = requireNonNull(key);
+        graphKey = requireNonNull(key);
 
         LOG.info("Start PCE Server components for Topology {} with TED {}", topoKey.getValue(), graphKey.getName());
 
@@ -133,7 +134,7 @@ public final class DefaultPceServerProvider implements PceServerProvider, AutoCl
         closeListenerAndManager(topoKey);
 
         /* Then create Path Manger */
-        PathManagerProvider pathManager = new PathManagerProvider(dataBroker, topology, rpcRegistry, this);
+        PathManagerProvider pathManager = new PathManagerProvider(dataBroker, topology, rpcService, this);
 
         /* And Listener */
         PathManagerListener pathListener = new PathManagerListener(dataBroker, topology, pathManager);
@@ -146,9 +147,9 @@ public final class DefaultPceServerProvider implements PceServerProvider, AutoCl
     }
 
     @Override
-    public void unRegisterPcepTopology(KeyedInstanceIdentifier<Topology, TopologyKey> topology) {
+    public void unRegisterPcepTopology(final KeyedInstanceIdentifier<Topology, TopologyKey> topology) {
         TopologyId topoKey = requireNonNull(topology).getKey().getTopologyId();
-        this.graphKey = null;
+        graphKey = null;
 
         LOG.info("Stop PCE Server for Topology {}", topoKey.getValue());
         closeListenerAndManager(topoKey);
index c685a2e09ab71348f041915948470a5f1df1f1a3..d3d0808c4f87df90648acb66b234dd05e388ccef 100644 (file)
@@ -23,27 +23,26 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class ManagedTeNode {
-
     private enum NodeState {
         Disabled,
         Enabled,
         Sync
     }
 
+    private static final Logger LOG = LoggerFactory.getLogger(ManagedTeNode.class);
+
+    private final ConcurrentMap<ConfiguredLspKey, ManagedTePath> mngPaths = new ConcurrentHashMap<>();
+    private final TransactionChain chain;
     private final NodeId id;
     private NodeState state;
-    private ConcurrentMap<ConfiguredLspKey, ManagedTePath> mngPaths =
-            new ConcurrentHashMap<ConfiguredLspKey, ManagedTePath>();
-    private final TransactionChain chain;
-    private static final Logger LOG = LoggerFactory.getLogger(ManagedTeNode.class);
 
     public ManagedTeNode(final NodeId id, final TransactionChain chain) {
         this.id = id;
         this.chain = chain;
-        this.state = NodeState.Enabled;
+        state = NodeState.Enabled;
     }
 
-    public ManagedTeNode(final NodeId id, TransactionChain chain, final NodeState state) {
+    public ManagedTeNode(final NodeId id, final TransactionChain chain, final NodeState state) {
         this.id = id;
         this.chain = chain;
         this.state = state;
index 9bf9a0aef0282e6f65c5313a131d0cdbf291db8d..a3f22345d57cbfaadc022765167952692a3baa9b 100644 (file)
@@ -18,7 +18,7 @@ import com.google.common.util.concurrent.MoreExecutors;
 import java.nio.ByteBuffer;
 import java.util.Collections;
 import java.util.List;
-import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.graph.ConnectedEdge;
 import org.opendaylight.graph.ConnectedEdgeTrigger;
 import org.opendaylight.graph.ConnectedGraph;
@@ -98,29 +98,30 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
 
     private static final Logger LOG = LoggerFactory.getLogger(ManagedTePath.class);
 
-    public ManagedTePath(ManagedTeNode teNode, InstanceIdentifier<Topology> topology) {
+    public ManagedTePath(final ManagedTeNode teNode, final InstanceIdentifier<Topology> topology) {
         this.teNode = requireNonNull(teNode);
-        this.pcepTopology = requireNonNull(topology);
-        this.pccIdentifier = pcepTopology.child(Node.class, new NodeKey(teNode.getId())).augmentation(Node1.class)
+        pcepTopology = requireNonNull(topology);
+        pccIdentifier = pcepTopology.child(Node.class, new NodeKey(teNode.getId())).augmentation(Node1.class)
                 .child(PathComputationClient.class).augmentation(PathComputationClient1.class);
     }
 
-    public ManagedTePath(ManagedTeNode teNode, final ConfiguredLsp lsp, InstanceIdentifier<Topology> topology) {
-        this.cfgLsp = requireNonNull(lsp);
+    public ManagedTePath(final ManagedTeNode teNode, final ConfiguredLsp lsp,
+            final InstanceIdentifier<Topology> topology) {
+        cfgLsp = requireNonNull(lsp);
         this.teNode = requireNonNull(teNode);
-        this.pcepTopology = requireNonNull(topology);
-        this.pccIdentifier = pcepTopology.child(Node.class, new NodeKey(teNode.getId())).augmentation(Node1.class)
+        pcepTopology = requireNonNull(topology);
+        pccIdentifier = pcepTopology.child(Node.class, new NodeKey(teNode.getId())).augmentation(Node1.class)
                 .child(PathComputationClient.class).augmentation(PathComputationClient1.class);
     }
 
-    public ManagedTePath(ManagedTeNode teNode, final ManagedTePath mngPath) {
+    public ManagedTePath(final ManagedTeNode teNode, final ManagedTePath mngPath) {
         checkArgument(mngPath != null, "Managed TE Path is mandatory. Can't be null or empty!");
-        this.cfgLsp = mngPath.getLsp();
-        this.sent = mngPath.isSent();
-        this.type = mngPath.getType();
+        cfgLsp = mngPath.getLsp();
+        sent = mngPath.isSent();
+        type = mngPath.getType();
         this.teNode = requireNonNull(teNode);
-        this.pcepTopology = mngPath.getTopology();
-        this.pccIdentifier = pcepTopology.child(Node.class, new NodeKey(teNode.getId())).augmentation(Node1.class)
+        pcepTopology = mngPath.getTopology();
+        pccIdentifier = pcepTopology.child(Node.class, new NodeKey(teNode.getId())).augmentation(Node1.class)
                 .child(PathComputationClient.class).augmentation(PathComputationClient1.class);
     }
 
@@ -141,12 +142,12 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
     }
 
     public ManagedTePath setConfiguredLsp(final ConfiguredLsp lsp) {
-        this.prevLsp = this.cfgLsp;
-        this.cfgLsp = lsp;
+        prevLsp = cfgLsp;
+        cfgLsp = lsp;
         return this;
     }
 
-    public ManagedTePath setType(PathType type) {
+    public ManagedTePath setType(final PathType type) {
         this.type = type;
         return this;
     }
@@ -156,7 +157,7 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
      *
      */
     public void sync() {
-        this.cfgLsp = new ConfiguredLspBuilder(cfgLsp).setPathStatus(PathStatus.Sync).build();
+        cfgLsp = new ConfiguredLspBuilder(cfgLsp).setPathStatus(PathStatus.Sync).build();
         updateToDataStore();
     }
 
@@ -164,14 +165,14 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
      * Disabling this TE Path by marking it as Configured. Do not update the Data Store.
      */
     public void disabled() {
-        this.cfgLsp = new ConfiguredLspBuilder(cfgLsp).setPathStatus(PathStatus.Configured).build();
+        cfgLsp = new ConfiguredLspBuilder(cfgLsp).setPathStatus(PathStatus.Configured).build();
     }
 
     /**
      * Mark this TE Path as Failed.
      */
     public void failed() {
-        this.cfgLsp = new ConfiguredLspBuilder(cfgLsp).setPathStatus(PathStatus.Failed).build();
+        cfgLsp = new ConfiguredLspBuilder(cfgLsp).setPathStatus(PathStatus.Failed).build();
         updateToDataStore();
     }
 
@@ -238,7 +239,8 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
         return PathStatus.Sync;
     }
 
-    private void configureGraph(ConnectedGraph graph, ComputedPath cpath, Constraints cts, boolean config) {
+    private void configureGraph(final ConnectedGraph graph, final ComputedPath cpath, final Constraints cts,
+            final boolean config) {
         /* Check that Connected Graph is valid */
         if (graph == null) {
             return;
@@ -320,19 +322,19 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
         triggerFlag = false;
     }
 
-    private boolean edgeAttrNotNull(ConnectedEdge edge) {
+    private static boolean edgeAttrNotNull(final ConnectedEdge edge) {
         return edge != null && edge.getEdge() != null && edge.getEdge().getEdgeAttributes() != null;
     }
 
-    public void setGraph(ConnectedGraph graph) {
+    public void setGraph(final ConnectedGraph graph) {
         configureGraph(graph, cfgLsp.getComputedPath(), cfgLsp.getIntendedPath().getConstraints(), true);
     }
 
-    public void unsetGraph(ConnectedGraph graph) {
+    public void unsetGraph(final ConnectedGraph graph) {
         configureGraph(graph, cfgLsp.getComputedPath(), cfgLsp.getIntendedPath().getConstraints(), false);
     }
 
-    public void updateGraph(ConnectedGraph graph) {
+    public void updateGraph(final ConnectedGraph graph) {
         /* First unset Bandwidth and Triggers for the old path if any */
         if (prevLsp != null) {
             configureGraph(graph, prevLsp.getComputedPath(), prevLsp.getIntendedPath().getConstraints(), false);
@@ -353,7 +355,7 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
     }
 
     @Override
-    public boolean verifyVertex(@Nullable ConnectedVertex next, @Nullable Vertex current) {
+    public boolean verifyVertex(final ConnectedVertex next, final Vertex current) {
         /* Check if there is an on-going trigger */
         if (triggerFlag) {
             return false;
@@ -380,7 +382,7 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
     }
 
     @Override
-    public boolean verifyEdge(@Nullable ConnectedEdge next, @Nullable Edge current) {
+    public boolean verifyEdge(final ConnectedEdge next, final Edge current) {
         /* Check if there is an on-going trigger */
         if (triggerFlag) {
             return false;
@@ -501,12 +503,12 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
             final Ipv4Builder ipBuilder = new Ipv4Builder()
                     .setDestinationIpv4Address(new Ipv4AddressNoZone(iPath.getDestination().getIpv4Address()))
                     .setSourceIpv4Address(new Ipv4AddressNoZone(iPath.getSource().getIpv4Address()));
-            epb.setAddressFamily((new Ipv4CaseBuilder().setIpv4(ipBuilder.build()).build()));
+            epb.setAddressFamily(new Ipv4CaseBuilder().setIpv4(ipBuilder.build()).build());
         } else if (cfgLsp.getIntendedPath().getSource().getIpv6Address() != null) {
             final Ipv6Builder ipBuilder = new Ipv6Builder()
                     .setDestinationIpv6Address(new Ipv6AddressNoZone(iPath.getDestination().getIpv6Address()))
                     .setSourceIpv6Address(new Ipv6AddressNoZone(iPath.getSource().getIpv6Address()));
-            epb.setAddressFamily((new Ipv6CaseBuilder().setIpv6(ipBuilder.build()).build()));
+            epb.setAddressFamily(new Ipv6CaseBuilder().setIpv6(ipBuilder.build()).build());
         } else {
             // In case of ...
             return null;
@@ -595,7 +597,7 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
      */
     public ListenableFuture<RpcResult<AddLspOutput>> addPath(final AddLsp addLsp) {
         /* Check if we could add this path */
-        if ((type != PathType.Initiated) || !teNode.isSync()) {
+        if (type != PathType.Initiated || !teNode.isSync()) {
             return null;
         }
 
@@ -605,9 +607,9 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
         }
 
         sent = true;
-        final ListenableFuture<RpcResult<AddLspOutput>> enforce = addLsp.invoke(getAddLspInput());
+        final var enforce = addLsp.invoke(getAddLspInput());
         LOG.info("Call Add LSP to {} with {}", addLsp, enforce);
-        Futures.addCallback(enforce, new FutureCallback<RpcResult<AddLspOutput>>() {
+        Futures.addCallback(enforce, new FutureCallback<>() {
             @Override
             public void onSuccess(final RpcResult<AddLspOutput> result) {
                 if (result.isSuccessful()) {
@@ -634,7 +636,7 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
      *
      * @return  new Update LSP Input
      */
-    private UpdateLspInput getUpdateLspInput() {
+    private @NonNull UpdateLspInput getUpdateLspInput() {
         /* Create Path Setup Type */
         final IntendedPath iPath = cfgLsp.getIntendedPath();
         final PathSetupTypeBuilder pstBuilder = new PathSetupTypeBuilder();
@@ -721,7 +723,7 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
     public ListenableFuture<RpcResult<UpdateLspOutput>> updatePath(final UpdateLsp updateLsp) {
 
         /* Check if we could update this path */
-        if ((type != PathType.Initiated && type != PathType.Delegated) || !teNode.isSync()) {
+        if (type != PathType.Initiated && type != PathType.Delegated || !teNode.isSync()) {
             return null;
         }
 
@@ -732,9 +734,9 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
 
         sent = true;
         final NodeId id = teNode.getId();
-        final ListenableFuture<RpcResult<UpdateLspOutput>> enforce = updateLsp.invoke(getUpdateLspInput());
+        final var enforce = updateLsp.invoke(getUpdateLspInput());
         LOG.info("Call Update LSP to {} with {}", updateLsp, enforce);
-        Futures.addCallback(enforce, new FutureCallback<RpcResult<UpdateLspOutput>>() {
+        Futures.addCallback(enforce, new FutureCallback<>() {
             @Override
             public void onSuccess(final RpcResult<UpdateLspOutput> result) {
                 if (result.isSuccessful()) {
@@ -767,7 +769,7 @@ public class ManagedTePath implements ConnectedEdgeTrigger, ConnectedVertexTrigg
     public ListenableFuture<RpcResult<RemoveLspOutput>> removePath(final RemoveLsp removeLsp) {
 
         /* Check if we could remove this path */
-        if ((type != PathType.Initiated) || !teNode.isSync() || cfgLsp.getPathStatus() != PathStatus.Sync) {
+        if (type != PathType.Initiated || !teNode.isSync() || cfgLsp.getPathStatus() != PathStatus.Sync) {
             return null;
         }
 
index cffac39ac0eebafb5e39443e7a1db8de4d8fc735..6c4037c22a17796ed0252742fbf90afe8386cc16 100644 (file)
@@ -50,7 +50,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.typ
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lsp.attributes.Metrics;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.Requests;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.requests.segment.computation.P2p;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.SubobjectType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.IpPrefixCase;
 import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.opendaylight.yangtools.yang.common.Uint32;
@@ -246,11 +245,11 @@ public class PathComputationImpl implements PathComputation {
     private VertexKey getDestinationVertexKey(final EndpointsObj endPoints) {
         IpAddress address = null;
 
-        if (endPoints.getAddressFamily() instanceof Ipv4Case) {
-            address = new IpAddress(((Ipv4Case) endPoints.getAddressFamily()).getIpv4().getDestinationIpv4Address());
+        if (endPoints.getAddressFamily() instanceof Ipv4Case ipv4) {
+            address = new IpAddress(ipv4.getIpv4().getDestinationIpv4Address());
         }
-        if (endPoints.getAddressFamily() instanceof Ipv6Case) {
-            address = new IpAddress(((Ipv6Case) endPoints.getAddressFamily()).getIpv6().getDestinationIpv6Address());
+        if (endPoints.getAddressFamily() instanceof Ipv6Case ipv6) {
+            address = new IpAddress(ipv6.getIpv6().getDestinationIpv6Address());
         }
         if (address == null) {
             return null;
@@ -262,30 +261,35 @@ public class PathComputationImpl implements PathComputation {
     }
 
     /* Convert Exclude Route Object (list of IP prefix) into Exclude Route (list of IP address) */
-    private static List<ExcludeRoute> getExcludeRoute(final Xro xro, AddressFamily af) {
-        if (xro == null || xro.getSubobject() == null || xro.getSubobject().isEmpty()) {
+    private static List<ExcludeRoute> getExcludeRoute(final Xro xro, final AddressFamily af) {
+        if (xro == null) {
+            return null;
+        }
+        final var subobjects = xro.getSubobject();
+        if (subobjects == null || subobjects.isEmpty()) {
             return null;
         }
-        ArrayList<ExcludeRoute> erl = new ArrayList<ExcludeRoute>();
-        for (int i = 0; i < xro.getSubobject().size(); i++) {
-            final SubobjectType sbt = xro.getSubobject().get(i).getSubobjectType();
-            if (sbt instanceof IpPrefixCase) {
-                final IpPrefixCase ipc = (IpPrefixCase) sbt;
+
+        final var erl = new ArrayList<ExcludeRoute>();
+        for (var element : subobjects) {
+            final var sbt = element.getSubobjectType();
+            if (sbt instanceof IpPrefixCase ipc) {
                 switch (af) {
-                    case Ipv4:
-                    case SrIpv4:
-                        erl.add(new ExcludeRouteBuilder().setIpv4(new Ipv4Address(
+                    case Ipv4, SrIpv4 -> {
+                        erl.add(new ExcludeRouteBuilder()
+                            .setIpv4(new Ipv4Address(
                                 ipc.getIpPrefix().getIpPrefix().getIpv4Prefix().getValue().split("/")[0]))
-                                .build());
-                        break;
-                    case Ipv6:
-                    case SrIpv6:
-                        erl.add(new ExcludeRouteBuilder().setIpv6(new Ipv6Address(
+                            .build());
+                    }
+                    case Ipv6, SrIpv6 -> {
+                        erl.add(new ExcludeRouteBuilder()
+                            .setIpv6(new Ipv6Address(
                                 ipc.getIpPrefix().getIpPrefix().getIpv6Prefix().getValue().split("/")[0]))
-                                .build());
-                        break;
-                    default:
-                        break;
+                            .build());
+                    }
+                    default -> {
+                        // No-op
+                    }
                 }
             }
         }
@@ -293,30 +297,35 @@ public class PathComputationImpl implements PathComputation {
     }
 
     /* Convert Include Route Object (list of IP prefix) into Exclude Route (list of IP address) */
-    private static List<IncludeRoute> getIncludeRoute(final Iro iro, AddressFamily af) {
-        if (iro == null || iro.getSubobject() == null || iro.getSubobject().isEmpty()) {
+    private static List<IncludeRoute> getIncludeRoute(final Iro iro, final AddressFamily af) {
+        if (iro == null) {
+            return null;
+        }
+
+        final var subobjects = iro.getSubobject();
+        if (subobjects == null || subobjects.isEmpty()) {
             return null;
         }
-        ArrayList<IncludeRoute> irl = new ArrayList<IncludeRoute>();
-        for (int i = 0; i < iro.getSubobject().size(); i++) {
-            final SubobjectType sbt = iro.getSubobject().get(i).getSubobjectType();
-            if (sbt instanceof IpPrefixCase) {
-                final IpPrefixCase ipc = (IpPrefixCase) sbt;
+        final var irl = new ArrayList<IncludeRoute>();
+        for (var element : subobjects) {
+            final var sbt = element.getSubobjectType();
+            if (sbt instanceof IpPrefixCase ipc) {
                 switch (af) {
-                    case Ipv4:
-                    case SrIpv4:
-                        irl.add(new IncludeRouteBuilder().setIpv4(new Ipv4Address(
+                    case Ipv4, SrIpv4 -> {
+                        irl.add(new IncludeRouteBuilder()
+                            .setIpv4(new Ipv4Address(
                                 ipc.getIpPrefix().getIpPrefix().getIpv4Prefix().getValue().split("/")[0]))
-                                .build());
-                        break;
-                    case Ipv6:
-                    case SrIpv6:
-                        irl.add(new IncludeRouteBuilder().setIpv6(new Ipv6Address(
+                            .build());
+                    }
+                    case Ipv6, SrIpv6 -> {
+                        irl.add(new IncludeRouteBuilder()
+                            .setIpv6(new Ipv6Address(
                                 ipc.getIpPrefix().getIpPrefix().getIpv6Prefix().getValue().split("/")[0]))
-                                .build());
-                        break;
-                    default:
-                        break;
+                            .build());
+                    }
+                    default -> {
+                        // No-op
+                    }
                 }
             }
         }
index 67a06d67ac8501fb7d988ce0ae06f1a8f3b8caa5..91253171aa1803e3fd23edb01adea2a1fbee1ab2 100644 (file)
@@ -9,7 +9,6 @@ package org.opendaylight.bgpcep.pcep.server.provider;
 
 import static java.util.Objects.requireNonNull;
 
-import java.util.Collection;
 import java.util.List;
 import java.util.stream.Collectors;
 import org.opendaylight.mdsal.binding.api.DataBroker;
@@ -24,9 +23,8 @@ 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;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -40,20 +38,18 @@ import org.slf4j.LoggerFactory;
 
 public final class PathManagerListener implements DataTreeChangeListener<Node>, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(PathManagerListener.class);
-    private ListenerRegistration<PathManagerListener> listenerRegistration;
+
+    private Registration listenerRegistration;
 
     private final PathManagerProvider pathManager;
 
-    public PathManagerListener(final DataBroker dataBroker, KeyedInstanceIdentifier<Topology, TopologyKey> topology,
-            final PathManagerProvider pathManager) {
-        requireNonNull(dataBroker);
-        requireNonNull(topology);
+    public PathManagerListener(final DataBroker dataBroker,
+            final KeyedInstanceIdentifier<Topology, TopologyKey> topology, final PathManagerProvider pathManager) {
         this.pathManager = requireNonNull(pathManager);
-        final InstanceIdentifier<Node> nodeTopology = topology.child(Node.class);
-        this.listenerRegistration = dataBroker.registerDataTreeChangeListener(
-                DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, nodeTopology), this);
+        listenerRegistration = dataBroker.registerLegacyTreeChangeListener(
+                DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, topology.child(Node.class)), this);
         LOG.info("Registered listener for Managed TE Path on Topology {}",
-                topology.getKey().getTopologyId().getValue());
+            topology.getKey().getTopologyId().getValue());
     }
 
     /**
@@ -61,10 +57,10 @@ public final class PathManagerListener implements DataTreeChangeListener<Node>,
      */
     @Override
     public void close() {
-        if (this.listenerRegistration != null) {
+        if (listenerRegistration != null) {
             LOG.debug("Unregistered listener {} for Managed TE Path", this);
-            this.listenerRegistration.close();
-            this.listenerRegistration = null;
+            listenerRegistration.close();
+            listenerRegistration = null;
         }
     }
 
@@ -74,18 +70,19 @@ public final class PathManagerListener implements DataTreeChangeListener<Node>,
      * @param nodeId    Node Identifier to which the modified children belongs to.
      * @param lspMod    List of Configured LSP modifications.
      */
-    private void handleLspChange(NodeId nodeId, List<? extends DataObjectModification<? extends DataObject>> lspMod) {
+    private void handleLspChange(final NodeId nodeId,
+            final List<? extends DataObjectModification<? extends DataObject>> lspMod) {
         for (DataObjectModification<? extends DataObject> lsp : lspMod) {
             ConfiguredLsp cfgLsp;
-            switch (lsp.getModificationType()) {
+            switch (lsp.modificationType()) {
                 case DELETE:
-                    cfgLsp = (ConfiguredLsp) lsp.getDataBefore();
+                    cfgLsp = (ConfiguredLsp) lsp.dataBefore();
                     LOG.debug("Delete Managed TE Path: {}", cfgLsp.getName());
                     pathManager.deleteManagedTePath(nodeId, cfgLsp.key());
                     break;
                 case SUBTREE_MODIFIED:
                 case WRITE:
-                    cfgLsp = (ConfiguredLsp) lsp.getDataAfter();
+                    cfgLsp = (ConfiguredLsp) lsp.dataAfter();
                     LOG.debug("Update Managed TE Path {}", cfgLsp);
                     pathManager.createManagedTePath(nodeId, cfgLsp);
                     break;
@@ -104,10 +101,11 @@ public final class PathManagerListener implements DataTreeChangeListener<Node>,
      * @param nodeId    Node Identifier to which the modified children belongs to.
      * @param pccMod    List of PCEP Node Configuration modifications.
      */
-    private void handlePccChange(NodeId nodeId, List<? extends DataObjectModification<? extends DataObject>> pccMod) {
-        for (DataObjectModification<? extends DataObject> node : pccMod) {
+    private void handlePccChange(final NodeId nodeId,
+            final List<? extends DataObjectModification<? extends DataObject>> pccMod) {
+        for (var node : pccMod) {
             /* First, process PCC modification */
-            switch (node.getModificationType()) {
+            switch (node.modificationType()) {
                 case DELETE:
                     LOG.debug("Delete Managed TE Node: {}", nodeId);
                     pathManager.deleteManagedTeNode(nodeId);
@@ -115,14 +113,14 @@ public final class PathManagerListener implements DataTreeChangeListener<Node>,
                 case SUBTREE_MODIFIED:
                 case WRITE:
                     /* First look if the Managed TE Node belongs to this PCC was not already created */
-                    final PcepNodeConfig pccNode = (PcepNodeConfig) node.getDataAfter();
+                    final var pccNode = (PcepNodeConfig) node.dataAfter();
                     if (!pathManager.checkManagedTeNode(nodeId)) {
                         LOG.info("Create new Managed Node {}", nodeId);
                         pathManager.createManagedTeNode(nodeId, pccNode);
                     } else {
                         /* Then, look to Configured LSP modification */
-                        final List<DataObjectModification<? extends DataObject>> lspMod = node.getModifiedChildren()
-                                .stream().filter(mod -> mod.getDataType().equals(ConfiguredLsp.class))
+                        final var lspMod = node.modifiedChildren()
+                                .stream().filter(mod -> mod.dataType().equals(ConfiguredLsp.class))
                                 .collect(Collectors.toList());
                         if (!lspMod.isEmpty()) {
                             handleLspChange(nodeId, lspMod);
@@ -136,13 +134,13 @@ public final class PathManagerListener implements DataTreeChangeListener<Node>,
     }
 
     @Override
-    public void onDataTreeChanged(final Collection<DataTreeModification<Node>> changes) {
-        for (DataTreeModification<Node> change : changes) {
-            DataObjectModification<Node> root = change.getRootNode();
+    public void onDataTreeChanged(final List<DataTreeModification<Node>> changes) {
+        for (var change : changes) {
+            final var root = change.getRootNode();
 
-            final String nodeAddr = root.getModificationType() == DataObjectModification.ModificationType.DELETE
-                    ? root.getDataBefore().getNodeId().getValue()
-                    : root.getDataAfter().getNodeId().getValue();
+            final String nodeAddr = root.modificationType() == DataObjectModification.ModificationType.DELETE
+                    ? root.dataBefore().getNodeId().getValue()
+                    : root.dataAfter().getNodeId().getValue();
             NodeId nodeId;
             if (nodeAddr.startsWith("pcc://")) {
                 nodeId = new NodeId(nodeAddr);
@@ -151,8 +149,9 @@ public final class PathManagerListener implements DataTreeChangeListener<Node>,
             }
 
             /* Look only to PcepNodeConfig.class modification */
-            final List<DataObjectModification<? extends DataObject>> pccMod = root.getModifiedChildren().stream()
-                    .filter(mod -> mod.getDataType().equals(PcepNodeConfig.class)).collect(Collectors.toList());
+            final var pccMod = root.modifiedChildren().stream()
+                    .filter(mod -> mod.dataType().equals(PcepNodeConfig.class))
+                    .collect(Collectors.toList());
             if (!pccMod.isEmpty()) {
                 handlePccChange(nodeId, pccMod);
             }
index 03157c49e329a0091512b3796c9efb98824ef9a4..4bc669bc05f21528dcf884092d04d0cffec0bca2 100644 (file)
@@ -11,11 +11,11 @@ import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkState;
 import static java.util.Objects.requireNonNull;
 
+import com.google.common.util.concurrent.FutureCallback;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 import javax.annotation.PreDestroy;
-import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.graph.ConnectedEdge;
 import org.opendaylight.graph.ConnectedEdgeTrigger;
 import org.opendaylight.graph.ConnectedGraph;
@@ -23,10 +23,8 @@ import org.opendaylight.graph.ConnectedGraphTrigger;
 import org.opendaylight.graph.ConnectedVertex;
 import org.opendaylight.graph.ConnectedVertexTrigger;
 import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
-import org.opendaylight.mdsal.binding.api.Transaction;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.mdsal.binding.api.TransactionChain;
-import org.opendaylight.mdsal.binding.api.TransactionChainListener;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev220720.Edge;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev220720.Vertex;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.path.computation.rev220324.ComputationStatus;
@@ -48,6 +46,7 @@ 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.TopologyKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.Empty;
 import org.osgi.service.component.annotations.Deactivate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -58,7 +57,7 @@ import org.slf4j.LoggerFactory;
  * @author Olivier Dugeon
  */
 
-public final class PathManagerProvider implements TransactionChainListener, AutoCloseable, ConnectedGraphTrigger {
+public final class PathManagerProvider implements FutureCallback<Empty>, AutoCloseable, ConnectedGraphTrigger {
     private static final Logger LOG = LoggerFactory.getLogger(PathManagerProvider.class);
     private final InstanceIdentifier<Topology> pcepTopology;
     private final DataBroker dataBroker;
@@ -69,16 +68,17 @@ public final class PathManagerProvider implements TransactionChainListener, Auto
     private TransactionChain chain = null;
     private ConnectedGraph tedGraph = null;
 
-    private final Map<NodeId, ManagedTeNode> mngNodes = new HashMap<NodeId, ManagedTeNode>();
+    private final Map<NodeId, ManagedTeNode> mngNodes = new HashMap<>();
 
-    public PathManagerProvider(final DataBroker dataBroker, KeyedInstanceIdentifier<Topology, TopologyKey> topology,
-            final RpcConsumerRegistry rpcRegistry, final DefaultPceServerProvider pceServerProvider) {
+    public PathManagerProvider(final DataBroker dataBroker,
+            final KeyedInstanceIdentifier<Topology, TopologyKey> topology, final RpcService rpcService,
+            final DefaultPceServerProvider pceServerProvider) {
         this.dataBroker = requireNonNull(dataBroker);
         this.pceServerProvider = requireNonNull(pceServerProvider);
-        this.addLsp = rpcRegistry.getRpc(AddLsp.class);
-        this.updateLsp = rpcRegistry.getRpc(UpdateLsp.class);
-        this.removeLsp = rpcRegistry.getRpc(RemoveLsp.class);
-        this.pcepTopology = requireNonNull(topology);
+        addLsp = rpcService.getRpc(AddLsp.class);
+        updateLsp = rpcService.getRpc(UpdateLsp.class);
+        removeLsp = rpcService.getRpc(RemoveLsp.class);
+        pcepTopology = requireNonNull(topology);
         initTransactionChain();
         tedGraph = getGraph();
         LOG.info("Path Manager Server started for topology {}", topology.getKey().getTopologyId().getValue());
@@ -91,7 +91,7 @@ public final class PathManagerProvider implements TransactionChainListener, Auto
     @Deactivate
     @PreDestroy
     public void close() {
-        this.tedGraph = pceServerProvider.getTedGraph();
+        tedGraph = pceServerProvider.getTedGraph();
         if (tedGraph != null) {
             tedGraph.unRegisterTrigger(this, InstanceIdentifier.keyOf(pcepTopology));
         }
@@ -100,7 +100,7 @@ public final class PathManagerProvider implements TransactionChainListener, Auto
 
     private ConnectedGraph getGraph() {
         if (tedGraph == null) {
-            this.tedGraph = pceServerProvider.getTedGraph();
+            tedGraph = pceServerProvider.getTedGraph();
             if (tedGraph != null) {
                 tedGraph.registerTrigger(this, InstanceIdentifier.keyOf(pcepTopology));
             }
@@ -113,17 +113,18 @@ public final class PathManagerProvider implements TransactionChainListener, Auto
      */
     private synchronized void initTransactionChain() {
         LOG.debug("Initializing transaction chain for Path Manager Server {}", this);
-        checkState(this.chain == null, "Transaction chain has to be closed before being initialized");
-        this.chain = dataBroker.createMergingTransactionChain(this);
+        checkState(chain == null, "Transaction chain has to be closed before being initialized");
+        chain = dataBroker.createMergingTransactionChain();
+        chain.addCallback(this);
     }
 
     /**
      * Destroy the current transaction chain.
      */
     private synchronized void destroyTransactionChain() {
-        if (this.chain != null) {
+        if (chain != null) {
             LOG.debug("Destroy transaction chain for Path Manager {}", this);
-            this.chain = null;
+            chain = null;
         }
     }
 
@@ -139,14 +140,12 @@ public final class PathManagerProvider implements TransactionChainListener, Auto
     }
 
     @Override
-    public synchronized void onTransactionChainFailed(final TransactionChain transactionChain,
-            final Transaction transaction, final Throwable cause) {
-        LOG.error("Path Manager Provider for {} failed in transaction: {} ", pcepTopology,
-                transaction != null ? transaction.getIdentifier() : null, cause);
+    public synchronized void onFailure(final Throwable cause) {
+        LOG.error("Path Manager Provider for {}", pcepTopology, cause);
     }
 
     @Override
-    public void onTransactionChainSuccessful(final TransactionChain transactionChain) {
+    public void onSuccess(final Empty value) {
         LOG.info("Path Manager Provider for {} shut down", pcepTopology);
     }
 
@@ -260,7 +259,7 @@ public final class PathManagerProvider implements TransactionChainListener, Auto
      *
      * @param mngPath  Managed TE Path to be updated
      */
-    private void updateComputedPath(final ManagedTePath mngPath, boolean add) {
+    private void updateComputedPath(final ManagedTePath mngPath, final boolean add) {
         checkArgument(mngPath != null, "Provided Managed TE Path is a null object");
 
         final ManagedTeNode teNode = mngPath.getManagedTeNode();
@@ -307,7 +306,7 @@ public final class PathManagerProvider implements TransactionChainListener, Auto
      *
      * @return          new or updated TE Path i.e. original TE Path augmented by a valid computed route.
      */
-    public ConfiguredLsp createManagedTePath(final NodeId id, ConfiguredLsp cfgLsp) {
+    public ConfiguredLsp createManagedTePath(final NodeId id, final ConfiguredLsp cfgLsp) {
         checkArgument(id != null, "Provided Node ID is a null object");
         checkArgument(cfgLsp != null, "Provided TE Path is a null object");
 
@@ -417,7 +416,7 @@ public final class PathManagerProvider implements TransactionChainListener, Auto
      *
      * @return          Newly created or Updated Managed TE Path
      */
-    public ManagedTePath registerTePath(NodeId id, final ConfiguredLsp rptPath, final PathType ptype) {
+    public ManagedTePath registerTePath(final NodeId id, final ConfiguredLsp rptPath, final PathType ptype) {
         checkArgument(id != null, "Provided Node ID is a null object");
 
         /* Verify we got a valid reported TE Path */
@@ -496,8 +495,8 @@ public final class PathManagerProvider implements TransactionChainListener, Auto
         }
 
         /* Check if Current Path has no valid route while Reported Path has one */
-        if ((curPath.getLsp().getComputedPath().getPathDescription() == null)
-                && (rptPath.getComputedPath().getPathDescription() != null)) {
+        if (curPath.getLsp().getComputedPath().getPathDescription() == null
+                && rptPath.getComputedPath().getPathDescription() != null) {
             curPath.setConfiguredLsp(new ConfiguredLspBuilder(rptPath).setPathStatus(PathStatus.Sync).build());
             curPath.updateGraph(getGraph());
             curPath.updateToDataStore();
@@ -582,7 +581,7 @@ public final class PathManagerProvider implements TransactionChainListener, Auto
      * @return      True if Managed TE Node exist, false otherwise
      */
     public boolean checkManagedTeNode(final NodeId id) {
-        return (mngNodes.get(id) != null);
+        return mngNodes.get(id) != null;
     }
 
     /**
@@ -744,8 +743,8 @@ public final class PathManagerProvider implements TransactionChainListener, Auto
     }
 
     @Override
-    public void verifyVertex(Collection<ConnectedVertexTrigger> triggers, @Nullable ConnectedVertex current,
-            @Nullable Vertex next) {
+    public void verifyVertex(final Collection<ConnectedVertexTrigger> triggers, final ConnectedVertex current,
+            final Vertex next) {
         for (ConnectedVertexTrigger trigger : triggers) {
             if (trigger.verifyVertex(current, next)) {
                 updateComputedPath((ManagedTePath )trigger, false);
@@ -754,8 +753,8 @@ public final class PathManagerProvider implements TransactionChainListener, Auto
     }
 
     @Override
-    public void verifyEdge(Collection<ConnectedEdgeTrigger> triggers, @Nullable ConnectedEdge current,
-            @Nullable Edge next) {
+    public void verifyEdge(final Collection<ConnectedEdgeTrigger> triggers, final ConnectedEdge current,
+            final Edge next) {
         for (ConnectedEdgeTrigger trigger : triggers) {
             if (trigger.verifyEdge(current, next)) {
                 updateComputedPath((ManagedTePath )trigger, false);
index ccf0f22eb9f17cd9548d396c2d07ffb25ec05001..6d42218d7af7929bc76ccd8024cb26d787eedc26 100644 (file)
@@ -12,7 +12,6 @@ import static java.util.Objects.requireNonNull;
 import com.google.common.collect.Iterables;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
 import java.util.stream.Collectors;
 import org.opendaylight.mdsal.binding.api.DataBroker;
@@ -35,8 +34,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.iet
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.Path1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv4Case;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv6Case;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.identifiers.tlv.lsp.identifiers.address.family.ipv4._case.Ipv4;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.identifiers.tlv.lsp.identifiers.address.family.ipv6._case.Ipv6;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.object.Lsp;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev200720.SrSubobject;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev200720.sr.subobject.nai.IpAdjacency;
@@ -50,10 +47,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ser
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.server.rev220321.pcc.configured.lsp.configured.lsp.IntendedPathBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.server.rev220321.pcc.configured.lsp.configured.lsp.intended.path.ConstraintsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route.object.Ero;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route.object.ero.Subobject;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lsp.attributes.Metrics;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reported.route.object.Rro;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.SubobjectType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.IpPrefixCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.Node1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.PccSyncState;
@@ -64,9 +58,8 @@ 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;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.opendaylight.yangtools.yang.common.Uint32;
@@ -82,17 +75,16 @@ import org.slf4j.LoggerFactory;
 
 public final class PcepTopologyListener implements DataTreeChangeListener<Node>, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(PcepTopologyListener.class);
-    private ListenerRegistration<PcepTopologyListener> listenerRegistration;
+
     private final PathManagerProvider pathManager;
 
+    private Registration listenerRegistration;
+
     public PcepTopologyListener(final DataBroker dataBroker,
             final KeyedInstanceIdentifier<Topology, TopologyKey> topology, final PathManagerProvider pathManager) {
-        requireNonNull(dataBroker);
-        requireNonNull(topology);
         this.pathManager = requireNonNull(pathManager);
-        final InstanceIdentifier<Node> nodeTopology = topology.child(Node.class);
-        listenerRegistration = dataBroker.registerDataTreeChangeListener(
-                DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, nodeTopology), this);
+        listenerRegistration = dataBroker.registerLegacyTreeChangeListener(
+                DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, topology.child(Node.class)), this);
         LOG.info("Registered PCE Server listener {} for Operational PCEP Topology {}",
                 listenerRegistration, topology.getKey().getTopologyId().getValue());
     }
@@ -119,22 +111,21 @@ public final class PcepTopologyListener implements DataTreeChangeListener<Node>,
         for (DataObjectModification<?> lsp : lspMod) {
             ReportedLsp rptLsp;
 
-            switch (lsp.getModificationType()) {
+            switch (lsp.modificationType()) {
                 case DELETE:
-                    rptLsp = (ReportedLsp) lsp.getDataBefore();
+                    rptLsp = (ReportedLsp) lsp.dataBefore();
                     LOG.debug("Un-Register Managed TE Path: {}", rptLsp.getName());
                     pathManager.unregisterTePath(nodeId, new ConfiguredLspKey(rptLsp.getName()));
                     break;
                 case SUBTREE_MODIFIED:
                 case WRITE:
-                    rptLsp = (ReportedLsp) lsp.getDataAfter();
+                    rptLsp = (ReportedLsp) lsp.dataAfter();
                     LOG.debug("Register Managed TE Path {}", rptLsp.getName());
                     pathManager.registerTePath(nodeId,  getConfiguredLsp(rptLsp), getPathType(rptLsp));
                     break;
                 default:
                     break;
             }
-
         }
     }
 
@@ -149,7 +140,7 @@ public final class PcepTopologyListener implements DataTreeChangeListener<Node>,
     private void handlePccChange(final NodeId nodeId, final List<DataObjectModification<?>> pccMod) {
         for (DataObjectModification<?> node : pccMod) {
             /* First, process PCC modification */
-            switch (node.getModificationType()) {
+            switch (node.modificationType()) {
                 case DELETE:
                     LOG.debug("Un-Register Managed TE Node: {}", nodeId);
                     pathManager.disableManagedTeNode(nodeId);
@@ -160,8 +151,8 @@ public final class PcepTopologyListener implements DataTreeChangeListener<Node>,
                     /* First look if the PCC was already created or not yet */
                     if (pathManager.checkManagedTeNode(nodeId)) {
                         /* Check if PCC State is Synchronized */
-                        if (node.getModifiedChildren() == null || node.getModifiedChildren().isEmpty()) {
-                            PathComputationClient pcc = (PathComputationClient) node.getDataAfter();
+                        if (node.modifiedChildren() == null || node.modifiedChildren().isEmpty()) {
+                            PathComputationClient pcc = (PathComputationClient) node.dataAfter();
                             if (pcc.getStateSync() == PccSyncState.Synchronized) {
                                 LOG.debug("Synchronize Managed TE Node {}", nodeId);
                                 pathManager.syncManagedTeNode(nodeId);
@@ -178,8 +169,8 @@ public final class PcepTopologyListener implements DataTreeChangeListener<Node>,
             }
 
             /* Then, look to reported LSP modification */
-            final List<DataObjectModification<? extends DataObject>> lspMod = node.getModifiedChildren()
-                    .stream().filter(mod -> mod.getDataType().equals(ReportedLsp.class))
+            final List<DataObjectModification<? extends DataObject>> lspMod = node.modifiedChildren()
+                    .stream().filter(mod -> mod.dataType().equals(ReportedLsp.class))
                     .collect(Collectors.toList());
             if (!lspMod.isEmpty()) {
                 handleLspChange(nodeId, lspMod);
@@ -197,8 +188,8 @@ public final class PcepTopologyListener implements DataTreeChangeListener<Node>,
     private void handleNode1Change(final NodeId nodeId, final List<DataObjectModification<?>> node1Mod) {
         for (DataObjectModification<?> child : node1Mod) {
             /* Then, look only to PathComputationClient.class modification */
-            final List<DataObjectModification<?>> pccMod = child.getModifiedChildren()
-                    .stream().filter(mod -> mod.getDataType().equals(PathComputationClient.class))
+            final List<DataObjectModification<?>> pccMod = child.modifiedChildren()
+                    .stream().filter(mod -> mod.dataType().equals(PathComputationClient.class))
                     .collect(Collectors.toList());
             if (!pccMod.isEmpty()) {
                 handlePccChange(nodeId, pccMod);
@@ -207,18 +198,17 @@ public final class PcepTopologyListener implements DataTreeChangeListener<Node>,
     }
 
     @Override
-    public void onDataTreeChanged(final Collection<DataTreeModification<Node>> changes) {
-        for (DataTreeModification<Node> change : changes) {
-            DataObjectModification<Node> root = change.getRootNode();
+    public void onDataTreeChanged(final List<DataTreeModification<Node>> changes) {
+        for (var change : changes) {
+            final var root = change.getRootNode();
 
             final NodeId nodeId =
-                root.getModificationType() == DataObjectModification.ModificationType.DELETE
-                    ? root.getDataBefore().getNodeId()
-                    : root.getDataAfter().getNodeId();
+                root.modificationType() == DataObjectModification.ModificationType.DELETE
+                    ? root.dataBefore().getNodeId() : root.dataAfter().getNodeId();
 
             /* Look only to Node1.class modification */
-            final List<DataObjectModification<?>> node1Mod = root.getModifiedChildren().stream()
-                    .filter(mod -> mod.getDataType().equals(Node1.class))
+            final List<DataObjectModification<?>> node1Mod = root.modifiedChildren().stream()
+                    .filter(mod -> mod.dataType().equals(Node1.class))
                     .collect(Collectors.toList());
             if (!node1Mod.isEmpty()) {
                 handleNode1Change(nodeId, node1Mod);
@@ -235,42 +225,33 @@ public final class PcepTopologyListener implements DataTreeChangeListener<Node>,
      * @return      Path Description of the corresponding ERO SubObject.
      */
     private static PathDescription getSrPath(final SrSubobject srObj, final AddressFamily af) {
-        switch (af) {
-            case SrIpv4:
-                switch (srObj.getNaiType()) {
-                    case Ipv4Adjacency:
-                        return new PathDescriptionBuilder()
-                            .setSid(srObj.getSid())
-                            .setIpv4(((IpAdjacency)srObj.getNai()).getLocalIpAddress().getIpv4AddressNoZone())
-                            .setRemoteIpv4(((IpAdjacency)srObj.getNai()).getRemoteIpAddress().getIpv4AddressNoZone())
-                            .build();
-                    case Ipv4NodeId:
-                        return new PathDescriptionBuilder()
-                            .setSid(srObj.getSid())
-                            .setRemoteIpv4(((IpNodeId)srObj.getNai()).getIpAddress().getIpv4AddressNoZone())
-                            .build();
-                    default:
-                        return null;
-                }
-            case SrIpv6:
-                switch (srObj.getNaiType()) {
-                    case Ipv6Adjacency:
-                        return new PathDescriptionBuilder()
-                            .setSid(srObj.getSid())
-                            .setIpv6(((IpAdjacency)srObj.getNai()).getLocalIpAddress().getIpv6AddressNoZone())
-                            .setRemoteIpv6(((IpAdjacency)srObj.getNai()).getRemoteIpAddress().getIpv6AddressNoZone())
-                            .build();
-                    case Ipv6NodeId:
-                        return new PathDescriptionBuilder()
-                            .setSid(srObj.getSid())
-                            .setRemoteIpv6(((IpNodeId)srObj.getNai()).getIpAddress().getIpv6AddressNoZone())
-                            .build();
-                    default:
-                        return null;
-                }
-            default:
-                return null;
-        }
+        return switch (af) {
+            case SrIpv4 -> switch (srObj.getNaiType()) {
+                case Ipv4Adjacency -> new PathDescriptionBuilder()
+                    .setSid(srObj.getSid())
+                    .setIpv4(((IpAdjacency)srObj.getNai()).getLocalIpAddress().getIpv4AddressNoZone())
+                    .setRemoteIpv4(((IpAdjacency)srObj.getNai()).getRemoteIpAddress().getIpv4AddressNoZone())
+                    .build();
+                case Ipv4NodeId -> new PathDescriptionBuilder()
+                    .setSid(srObj.getSid())
+                    .setRemoteIpv4(((IpNodeId)srObj.getNai()).getIpAddress().getIpv4AddressNoZone())
+                    .build();
+                default -> null;
+            };
+            case SrIpv6 -> switch (srObj.getNaiType()) {
+                case Ipv6Adjacency -> new PathDescriptionBuilder()
+                    .setSid(srObj.getSid())
+                    .setIpv6(((IpAdjacency)srObj.getNai()).getLocalIpAddress().getIpv6AddressNoZone())
+                    .setRemoteIpv6(((IpAdjacency)srObj.getNai()).getRemoteIpAddress().getIpv6AddressNoZone())
+                    .build();
+                case Ipv6NodeId -> new PathDescriptionBuilder()
+                    .setSid(srObj.getSid())
+                    .setRemoteIpv6(((IpNodeId)srObj.getNai()).getIpAddress().getIpv6AddressNoZone())
+                    .build();
+                default -> null;
+            };
+            default -> null;
+        };
     }
 
     /**
@@ -282,18 +263,17 @@ public final class PcepTopologyListener implements DataTreeChangeListener<Node>,
      * @return      Path Description of the corresponding ERO SubObject.
      */
     private static PathDescription getIpPath(final IpPrefixCase ipc, final AddressFamily af) {
-        switch (af) {
-            case Ipv4:
-                return new PathDescriptionBuilder().setRemoteIpv4(
-                        new Ipv4Address(ipc.getIpPrefix().getIpPrefix().getIpv4Prefix().getValue().split("/")[0]))
-                        .build();
-            case Ipv6:
-                return new PathDescriptionBuilder().setRemoteIpv6(
-                        new Ipv6Address(ipc.getIpPrefix().getIpPrefix().getIpv6Prefix().getValue().split("/")[0]))
-                        .build();
-            default:
-                return null;
-        }
+        return switch (af) {
+            case Ipv4 -> new PathDescriptionBuilder()
+                .setRemoteIpv4(
+                    new Ipv4Address(ipc.getIpPrefix().getIpPrefix().getIpv4Prefix().getValue().split("/")[0]))
+                .build();
+            case Ipv6 -> new PathDescriptionBuilder()
+                .setRemoteIpv6(
+                    new Ipv6Address(ipc.getIpPrefix().getIpPrefix().getIpv6Prefix().getValue().split("/")[0]))
+                .build();
+            default -> null;
+        };
     }
 
     /**
@@ -306,18 +286,17 @@ public final class PcepTopologyListener implements DataTreeChangeListener<Node>,
      */
     private static PathDescription getIpPath(final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang
             .rsvp.rev150820._record.route.subobjects.subobject.type.IpPrefixCase ipc, final AddressFamily af) {
-        switch (af) {
-            case Ipv4:
-                return new PathDescriptionBuilder().setRemoteIpv4(
-                        new Ipv4Address(ipc.getIpPrefix().getIpPrefix().getIpv4Prefix().getValue().split("/")[0]))
-                        .build();
-            case Ipv6:
-                return new PathDescriptionBuilder().setRemoteIpv6(
-                        new Ipv6Address(ipc.getIpPrefix().getIpPrefix().getIpv6Prefix().getValue().split("/")[0]))
-                        .build();
-            default:
-                return null;
-        }
+        return switch (af) {
+            case Ipv4 -> new PathDescriptionBuilder()
+                .setRemoteIpv4(
+                    new Ipv4Address(ipc.getIpPrefix().getIpPrefix().getIpv4Prefix().getValue().split("/")[0]))
+                .build();
+            case Ipv6 -> new PathDescriptionBuilder()
+                .setRemoteIpv6(
+                    new Ipv6Address(ipc.getIpPrefix().getIpPrefix().getIpv6Prefix().getValue().split("/")[0]))
+                .build();
+            default -> null;
+        };
     }
 
     /**
@@ -329,13 +308,13 @@ public final class PcepTopologyListener implements DataTreeChangeListener<Node>,
      * @return      Path Description of the corresponding TE Path.
      */
     private static List<PathDescription> getPathDescription(final Ero ero, final AddressFamily af) {
-        final ArrayList<PathDescription> pathDesc = new ArrayList<>();
-        for (Subobject element : ero.getSubobject()) {
-            final SubobjectType sbt = element.getSubobjectType();
-            if (sbt instanceof SrSubobject) {
-                pathDesc.add(getSrPath((SrSubobject) sbt, af));
-            } else if (sbt instanceof IpPrefixCase) {
-                pathDesc.add(getIpPath((IpPrefixCase) sbt, af));
+        final var pathDesc = new ArrayList<PathDescription>();
+        for (var element : ero.nonnullSubobject()) {
+            final var sbt = element.getSubobjectType();
+            if (sbt instanceof SrSubobject sr) {
+                pathDesc.add(getSrPath(sr, af));
+            } else if (sbt instanceof IpPrefixCase ip) {
+                pathDesc.add(getIpPath(ip, af));
             }
         }
         return pathDesc.isEmpty() ? null : pathDesc;
@@ -350,15 +329,15 @@ public final class PcepTopologyListener implements DataTreeChangeListener<Node>,
      * @return      Path Description of the corresponding TE Path.
      */
     private static List<PathDescription> getPathDescription(final Rro rro, final AddressFamily af) {
-        final ArrayList<PathDescription> pathDesc = new ArrayList<>();
+        final var pathDesc = new ArrayList<PathDescription>();
         for (var element : rro.nonnullSubobject()) {
             final var sbt = element.getSubobjectType();
-            if (sbt instanceof SrSubobject) {
-                pathDesc.add(getSrPath((SrSubobject) sbt, af));
-            } else if (sbt instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820
-                    ._record.route.subobjects.subobject.type.IpPrefixCase) {
-                pathDesc.add(getIpPath((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820
-                        ._record.route.subobjects.subobject.type.IpPrefixCase)sbt, af));
+            if (sbt instanceof SrSubobject sr) {
+                pathDesc.add(getSrPath(sr, af));
+            } else if (sbt
+                    instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820._record
+                        .route.subobjects.subobject.type.IpPrefixCase ip) {
+                pathDesc.add(getIpPath(ip, af));
             }
         }
         return pathDesc.isEmpty() ? null : pathDesc;
@@ -391,7 +370,7 @@ public final class PcepTopologyListener implements DataTreeChangeListener<Node>,
             cb.setBandwidth(new DecimalBandwidth(Decimal64.valueOf(2, convert.longValue())));
         }
         if (path.getMetrics() != null) {
-            for (Metrics metric: path.getMetrics()) {
+            for (var metric : path.getMetrics()) {
                 convert = ByteBuffer.wrap(metric.getMetric().getValue().getValue()).getFloat();
                 switch (metric.getMetric().getMetricType().intValue()) {
                     case MessagesUtil.IGP_METRIC:
@@ -416,17 +395,16 @@ public final class PcepTopologyListener implements DataTreeChangeListener<Node>,
         final Path1 p1 = path.augmentation(Path1.class);
         final Uint8 pst = p1.getPathSetupType() != null ? p1.getPathSetupType().getPst() : Uint8.ZERO;
         final Lsp lsp = p1.getLsp();
-        final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp
-            .identifiers.tlv.lsp.identifiers.AddressFamily af = lsp.getTlvs().getLspIdentifiers().getAddressFamily();
+        final var af = lsp.getTlvs().getLspIdentifiers().getAddressFamily();
         IpAddress source = null;
         IpAddress destination = null;
-        if (af instanceof Ipv4Case) {
-            final Ipv4 ipv4 = ((Ipv4Case) af).getIpv4();
+        if (af instanceof Ipv4Case v4) {
+            final var ipv4 = v4.getIpv4();
             source = new IpAddress(ipv4.getIpv4TunnelSenderAddress());
             destination = new IpAddress(ipv4.getIpv4TunnelEndpointAddress());
             cb.setAddressFamily(pst == Uint8.ZERO ? AddressFamily.Ipv4 : AddressFamily.SrIpv4);
-        } else if (af instanceof Ipv6Case) {
-            final Ipv6 ipv6 = ((Ipv6Case) af).getIpv6();
+        } else if (af instanceof Ipv6Case v6) {
+            final var ipv6 = v6.getIpv6();
             source = new IpAddress(ipv6.getIpv6TunnelSenderAddress());
             destination = new IpAddress(ipv6.getIpv6TunnelSenderAddress());
             cb.setAddressFamily(pst == Uint8.ZERO ? AddressFamily.Ipv6 : AddressFamily.SrIpv6);
@@ -496,6 +474,5 @@ public final class PcepTopologyListener implements DataTreeChangeListener<Node>,
         }
         return PathType.Initiated;
     }
-
 }
 
index 803a66e7a07828310908c483dd4c9a5c1f4dce22..57f25b7810244ff51eed9f7ea77a19107240e9b5 100644 (file)
     </properties>
 
     <dependencies>
+        <dependency>
+            <groupId>com.github.spotbugs</groupId>
+            <artifactId>spotbugs-annotations</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.guicedee.services</groupId>
+            <artifactId>javax.inject</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>jakarta.annotation</groupId>
+            <artifactId>jakarta.annotation-api</artifactId>
+            <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>pcep-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
-            <artifactId>mdsal-singleton-common-api</artifactId>
+            <artifactId>mdsal-singleton-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal.model</groupId>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.service.component.annotations</artifactId>
         </dependency>
-        <dependency>
-            <groupId>jakarta.annotation</groupId>
-            <artifactId>jakarta.annotation-api</artifactId>
-            <scope>provided</scope>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>com.guicedee.services</groupId>
-            <artifactId>javax.inject</artifactId>
-            <optional>true</optional>
-        </dependency>
 
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>pcep-impl</artifactId>
         </dependency>
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-        </dependency>
 
         <!-- Test dependencies -->
         <dependency>
index dd1ef27ff916232300e008924b667cf7af8113fe..c1af8e1dd09c0be523d3acd1bfef7e8e628b0da8 100644 (file)
@@ -12,12 +12,12 @@ import static com.google.common.base.Verify.verifyNotNull;
 import com.google.common.annotations.VisibleForTesting;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.net.InetSocketAddress;
-import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
@@ -42,8 +42,7 @@ import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
 final class PCEPStatefulPeerProposal extends AbstractRegistration implements PCEPPeerProposal {
-    private abstract static class AbstractListener<D extends DataObject, V>
-            implements ClusteredDataTreeChangeListener<D> {
+    private abstract static class AbstractListener<D extends DataObject, V> implements DataTreeChangeListener<D> {
         final Map<NodeId, V> map = new ConcurrentHashMap<>();
         final Registration reg;
 
@@ -51,7 +50,7 @@ final class PCEPStatefulPeerProposal extends AbstractRegistration implements PCE
             justification = "Stateless specializations in this nest")
         AbstractListener(final DataBroker dataBroker, final @NonNull LogicalDatastoreType datastore,
                 final @NonNull InstanceIdentifier<D> wildcard) {
-            reg = dataBroker.registerDataTreeChangeListener(DataTreeIdentifier.create(datastore, wildcard), this);
+            reg = dataBroker.registerTreeChangeListener(DataTreeIdentifier.of(datastore, wildcard), this);
         }
 
         final void remove(final DataTreeModification<?> modification) {
@@ -68,7 +67,7 @@ final class PCEPStatefulPeerProposal extends AbstractRegistration implements PCE
         }
 
         private static @NonNull NodeId extractNodeId(final DataTreeModification<?> modification) {
-            return verifyNotNull(modification.getRootPath().getRootIdentifier().firstKeyOf(Node.class)).getNodeId();
+            return verifyNotNull(modification.getRootPath().path().firstKeyOf(Node.class)).getNodeId();
         }
     }
 
@@ -81,9 +80,9 @@ final class PCEPStatefulPeerProposal extends AbstractRegistration implements PCE
         }
 
         @Override
-        public void onDataTreeChanged(final Collection<DataTreeModification<PcepNodeSyncConfig>> changes) {
+        public void onDataTreeChanged(final List<DataTreeModification<PcepNodeSyncConfig>> changes) {
             for (var change : changes) {
-                final var config = change.getRootNode().getDataAfter();
+                final var config = change.getRootNode().dataAfter();
                 if (config != null) {
                     update(change, config.getSpeakerEntityIdValue());
                 } else {
@@ -102,9 +101,9 @@ final class PCEPStatefulPeerProposal extends AbstractRegistration implements PCE
         }
 
         @Override
-        public void onDataTreeChanged(final Collection<DataTreeModification<LspDbVersion>> changes) {
+        public void onDataTreeChanged(final List<DataTreeModification<LspDbVersion>> changes) {
             for (var change : changes) {
-                update(change, change.getRootNode().getDataAfter());
+                update(change, change.getRootNode().dataAfter());
             }
         }
     }
index 9eceeb352e3a040dc4ff8454c317989d4dce3f56..b5a48016227a27651c58496850c92c1bc023a5c7 100644 (file)
@@ -10,15 +10,12 @@ package org.opendaylight.bgpcep.pcep.topology.provider;
 import static com.google.common.base.Verify.verifyNotNull;
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.collect.Iterables;
 import com.google.common.util.concurrent.ListenableFuture;
-import java.util.Collection;
 import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.bgpcep.programming.spi.InstructionScheduler;
-import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
+import org.opendaylight.mdsal.binding.api.DataListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
-import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
@@ -32,7 +29,7 @@ import org.slf4j.LoggerFactory;
  * This class tracks the configuration content of a particular topology instance and propagates updates towards its
  * associated {@link PCEPTopologyProvider}.
  */
-final class PCEPTopologyInstance implements ClusteredDataTreeChangeListener<Topology> {
+final class PCEPTopologyInstance implements DataListener<Topology> {
     private static final Logger LOG = LoggerFactory.getLogger(PCEPTopologyInstance.class);
 
     private final @NonNull TopologyKey topology;
@@ -50,8 +47,8 @@ final class PCEPTopologyInstance implements ClusteredDataTreeChangeListener<Topo
 
         provider = new PCEPTopologyProvider(instanceIdentifier, dependencies, scheduler);
 
-        reg = dependencies.getDataBroker().registerDataTreeChangeListener(
-            DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, instanceIdentifier), this);
+        reg = dependencies.getDataBroker().registerDataListener(
+            DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, instanceIdentifier), this);
         LOG.info("Topology instance for {} initialized", topologyId());
     }
 
@@ -66,17 +63,15 @@ final class PCEPTopologyInstance implements ClusteredDataTreeChangeListener<Topo
     }
 
     @Override
-    public synchronized void onDataTreeChanged(final Collection<DataTreeModification<Topology>> changes) {
+    public synchronized void dataChangedTo(final Topology data) {
         if (reg == null) {
             // We have been shut down, do not process any more updates
             return;
         }
 
-        // We are only interested in the after-image
-        final var content = Iterables.getLast(changes).getRootNode().getDataAfter();
-        if (content != null) {
-            LOG.trace("Updating topology {} configuration to {}", topologyId(), content);
-            provider.updateConfiguration(PCEPTopologyConfiguration.of(content));
+        if (data != null) {
+            LOG.trace("Updating topology {} configuration to {}", topologyId(), data);
+            provider.updateConfiguration(PCEPTopologyConfiguration.of(data));
         } else {
             LOG.info("Topology {} configuration disappeared, ignoring update in anticipation of shutdown",
                 topologyId());
index 136439158d8693d7bc0737043ad32fe580d0204b..9097cc5f6e0158a9f31238de7aa13ec16e5bcf42 100644 (file)
@@ -19,8 +19,8 @@ import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.checkerframework.checker.lock.qual.Holding;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.bgpcep.programming.spi.InstructionScheduler;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
-import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonService;
+import org.opendaylight.mdsal.singleton.api.ServiceGroupIdentifier;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.common.Empty;
index 8b1920fb15bb7e486207ff07664dfbe885ff7c70..5a2dc1f459c8cfb1c69c11c3f99911954efed9f0 100644 (file)
@@ -15,7 +15,7 @@ import io.netty.util.HashedWheelTimer;
 import io.netty.util.Timeout;
 import io.netty.util.Timer;
 import io.netty.util.TimerTask;
-import java.util.Collection;
+import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
@@ -27,13 +27,13 @@ import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.bgpcep.pcep.server.PceServerProvider;
 import org.opendaylight.bgpcep.programming.spi.InstructionSchedulerFactory;
-import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonServiceProvider;
 import org.opendaylight.protocol.pcep.MessageRegistry;
 import org.opendaylight.protocol.pcep.PCEPDispatcher;
 import org.opendaylight.protocol.pcep.spi.PCEPExtensionConsumerContext;
@@ -60,7 +60,7 @@ import org.slf4j.LoggerFactory;
 @Singleton
 @Component(service = { })
 public final class PCEPTopologyTracker
-        implements PCEPTopologyProviderDependencies, ClusteredDataTreeChangeListener<TopologyPcep>, AutoCloseable {
+        implements PCEPTopologyProviderDependencies, DataTreeChangeListener<TopologyPcep>, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(PCEPTopologyTracker.class);
 
     // Services we are using
@@ -131,7 +131,7 @@ public final class PCEPTopologyTracker
         statsProvider = new TopologyStatsProvider(timer);
         statsRpcs = new TopologyStatsRpc(dataBroker, rpcProviderRegistry);
 
-        reg = dataBroker.registerDataTreeChangeListener(DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION,
+        reg = dataBroker.registerTreeChangeListener(DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION,
             InstanceIdentifier.builder(NetworkTopology.class).child(Topology.class).child(TopologyTypes.class)
                 .augmentation(TopologyTypes1.class).child(TopologyPcep.class).build()), this);
         LOG.info("PCEP Topology tracker initialized");
@@ -203,7 +203,7 @@ public final class PCEPTopologyTracker
     }
 
     @Override
-    public synchronized void onDataTreeChanged(final Collection<DataTreeModification<TopologyPcep>> changes) {
+    public synchronized void onDataTreeChanged(final List<DataTreeModification<TopologyPcep>> changes) {
         if (reg == null) {
             // Registration has been terminated, do not process any changes
             return;
@@ -211,10 +211,10 @@ public final class PCEPTopologyTracker
 
         for (var change : changes) {
             final var root = change.getRootNode();
-            switch (root.getModificationType()) {
+            switch (root.modificationType()) {
                 case WRITE:
                     // We only care if the topology has been newly introduced, not when its details have changed
-                    if (root.getDataBefore() == null) {
+                    if (root.dataBefore() == null) {
                         createInstance(extractTopologyKey(change));
                     }
                     break;
@@ -257,7 +257,7 @@ public final class PCEPTopologyTracker
     }
 
     private static @NonNull TopologyKey extractTopologyKey(final DataTreeModification<?> change) {
-        final var path = change.getRootPath().getRootIdentifier();
+        final var path = change.getRootPath().path();
         return verifyNotNull(path.firstKeyOf(Topology.class), "No topology key in %s", path);
     }
 }
index 8260d236e2f8505c30e83d3740b0072fee6d0953..7449e735a69d48e4417fbec3e0aa9c3571dce89b 100644 (file)
@@ -22,9 +22,7 @@ import org.checkerframework.checker.lock.qual.Holding;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
-import org.opendaylight.mdsal.binding.api.Transaction;
 import org.opendaylight.mdsal.binding.api.TransactionChain;
-import org.opendaylight.mdsal.binding.api.TransactionChainListener;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
@@ -38,11 +36,12 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.Empty;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 // This class is thread-safe
-final class TopologyNodeState implements TransactionChainListener {
+final class TopologyNodeState implements FutureCallback<Empty> {
     private static final Logger LOG = LoggerFactory.getLogger(TopologyNodeState.class);
 
     private final Map<String, Metadata> metadata = new HashMap<>();
@@ -59,7 +58,8 @@ final class TopologyNodeState implements TransactionChainListener {
         checkArgument(holdStateNanos >= 0);
         nodeId = topology.child(Node.class, new NodeKey(id));
         this.holdStateNanos = holdStateNanos;
-        chain = broker.createMergingTransactionChain(this);
+        chain = broker.createMergingTransactionChain();
+        chain.addCallback(this);
     }
 
     @NonNull KeyedInstanceIdentifier<Node, NodeKey> getNodeId() {
@@ -147,16 +147,14 @@ final class TopologyNodeState implements TransactionChainListener {
     }
 
     @Override
-    public void onTransactionChainFailed(final TransactionChain pchain, final Transaction transaction,
-            final Throwable cause) {
+    public void onFailure(final Throwable cause) {
         // FIXME: flip internal state, so that the next attempt to update fails, triggering node reconnect
-        LOG.error("Unexpected transaction failure in node {} transaction {}", nodeId, transaction.getIdentifier(),
-            cause);
+        LOG.error("Unexpected transaction failure in node {}", nodeId, cause);
         close();
     }
 
     @Override
-    public void onTransactionChainSuccessful(final TransactionChain pchain) {
+    public void onSuccess(final Empty result) {
         LOG.info("Node {} shutdown successfully", nodeId);
     }
 
index c924f8749e770b8d246dfed9c02025b8cb695bb5..036e81585bb8052f22b874b38a27e13f6e5e1c2e 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.bgpcep.pcep.topology.provider;
 
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.ImmutableClassToInstanceMap;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.Collection;
@@ -17,9 +16,8 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.stream.Collectors;
 import org.opendaylight.bgpcep.programming.spi.SuccessfulRpcResult;
-import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.DataObjectModification;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
@@ -57,7 +55,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-final class TopologyStatsRpc implements ClusteredDataTreeChangeListener<PcepSessionState>, AutoCloseable {
+final class TopologyStatsRpc implements DataTreeChangeListener<PcepSessionState>, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(TopologyStatsRpc.class);
 
     private final ConcurrentMap<InstanceIdentifier<PcepSessionState>, PcepSessionState> sessionStateMap =
@@ -67,24 +65,22 @@ final class TopologyStatsRpc implements ClusteredDataTreeChangeListener<PcepSess
 
     TopologyStatsRpc(final DataBroker dataBroker, final RpcProviderService rpcProviderService) {
         LOG.info("Initializing PCEP Topology Stats RPC service.");
-        listenerRegistration = dataBroker.registerDataTreeChangeListener(
-            DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL,
+        listenerRegistration = dataBroker.registerTreeChangeListener(
+            DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL,
                 InstanceIdentifier.builder(NetworkTopology.class).child(Topology.class).child(Node.class)
                     .augmentation(PcepTopologyNodeStatsAug.class).child(PcepSessionState.class).build()),
             this);
-        rpcRegistration = rpcProviderService.registerRpcImplementations(ImmutableClassToInstanceMap.of(
-            GetStats.class, this::getStats));
+        rpcRegistration = rpcProviderService.registerRpcImplementation((GetStats) this::getStats);
     }
 
     @Override
-    public void onDataTreeChanged(final Collection<DataTreeModification<PcepSessionState>> changes) {
+    public void onDataTreeChanged(final List<DataTreeModification<PcepSessionState>> changes) {
         changes.forEach(change -> {
-            final InstanceIdentifier<PcepSessionState> iid = change.getRootPath().getRootIdentifier();
-            final DataObjectModification<PcepSessionState> mod = change.getRootNode();
-            switch (mod.getModificationType()) {
-                case SUBTREE_MODIFIED:
-                case WRITE:
-                    sessionStateMap.put(iid, mod.getDataAfter());
+            final var iid = change.getRootPath().path();
+            final var mod = change.getRootNode();
+            switch (mod.modificationType()) {
+                case SUBTREE_MODIFIED, WRITE:
+                    sessionStateMap.put(iid, mod.dataAfter());
                     break;
                 case DELETE:
                     sessionStateMap.remove(iid);
index 8697e9cf9a33f958452fb75affc36d7b9fdab9e0..5e2e47c10447c19b452abff613fed85c96dae4d7 100644 (file)
@@ -23,6 +23,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.bgpcep.pcep.topology.provider.PCEPStatefulPeerProposal.LspDbVersionListener;
@@ -49,7 +50,7 @@ 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.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Uint64;
 
@@ -66,11 +67,12 @@ public class PCEPStatefulPeerProposalTest {
     @Mock
     private DataBroker dataBroker;
     @Mock
-    private ListenerRegistration<?> listenerReg;
+    private Registration listenerReg;
     @Mock
     private FluentFuture<Optional<LspDbVersion>> listenableFutureMock;
-
+    @Captor
     private ArgumentCaptor<DataTreeChangeListener<?>> captor;
+
     private TlvsBuilder tlvsBuilder;
 
     @Before
@@ -78,8 +80,7 @@ public class PCEPStatefulPeerProposalTest {
         tlvsBuilder = new TlvsBuilder().addAugmentation(new Tlvs1Builder()
             .setStateful(new StatefulBuilder().addAugmentation(new Stateful1Builder().build()).build())
             .build());
-        captor = ArgumentCaptor.forClass(DataTreeChangeListener.class);
-        doReturn(listenerReg).when(dataBroker).registerDataTreeChangeListener(any(), captor.capture());
+        doReturn(listenerReg).when(dataBroker).registerTreeChangeListener(any(), captor.capture());
         doNothing().when(listenerReg).close();
     }
 
@@ -94,12 +95,12 @@ public class PCEPStatefulPeerProposalTest {
                 new NodeKey(ServerSessionManager.createNodeId(ADDRESS.getAddress())));
 
             final var dbverRoot = mock(DataObjectModification.class);
-            doReturn(LSP_DB_VERSION).when(dbverRoot).getDataAfter();
+            doReturn(LSP_DB_VERSION).when(dbverRoot).dataAfter();
             final var dbverMod = mock(DataTreeModification.class);
-            doReturn(DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, modPath)).when(dbverMod).getRootPath();
+            doReturn(DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, modPath)).when(dbverMod).getRootPath();
             doReturn(dbverRoot).when(dbverMod).getRootNode();
 
-            for (DataTreeChangeListener<?> listener : listeners) {
+            for (var listener : listeners) {
                 if (listener instanceof LspDbVersionListener) {
                     listener.onDataTreeChanged(List.of(dbverMod));
                 }
@@ -121,20 +122,20 @@ public class PCEPStatefulPeerProposalTest {
                 new NodeKey(ServerSessionManager.createNodeId(ADDRESS.getAddress())));
 
             final var dbverRoot = mock(DataObjectModification.class);
-            doReturn(LSP_DB_VERSION).when(dbverRoot).getDataAfter();
+            doReturn(LSP_DB_VERSION).when(dbverRoot).dataAfter();
             final var dbverMod = mock(DataTreeModification.class);
-            doReturn(DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, modPath)).when(dbverMod).getRootPath();
+            doReturn(DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, modPath)).when(dbverMod).getRootPath();
             doReturn(dbverRoot).when(dbverMod).getRootNode();
 
             final var speakerRoot = mock(DataObjectModification.class);
             doReturn(new PcepNodeSyncConfigBuilder().setSpeakerEntityIdValue(SPEAKER_ID).build()).when(speakerRoot)
-                .getDataAfter();
+                .dataAfter();
             final var speakerMod = mock(DataTreeModification.class);
-            doReturn(DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, modPath)).when(speakerMod)
+            doReturn(DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, modPath)).when(speakerMod)
                 .getRootPath();
             doReturn(speakerRoot).when(speakerMod).getRootNode();
 
-            for (DataTreeChangeListener<?> listener : listeners) {
+            for (var listener : listeners) {
                 if (listener instanceof SpeakerIdListener) {
                     listener.onDataTreeChanged(List.of(speakerMod));
                 } else if (listener instanceof LspDbVersionListener) {
index e11cb016d3f41cc3261bc70c831223ff61d7169b..1c2660cdf5029dc17b3a70902ba4cf477a6a9e90 100644 (file)
@@ -89,7 +89,7 @@ public class TopologyStatsRpcTest extends AbstractConcurrentDataBrokerTest {
 
     @Before
     public void setUp() throws Exception {
-        doReturn(rpcReg).when(rpcProviderService).registerRpcImplementations(any());
+        doReturn(rpcReg).when(rpcProviderService).registerRpcImplementation(any());
         doNothing().when(rpcReg).close();
         rpcService = new TopologyStatsRpc(getDataBroker(), rpcProviderService);
 
index e51335cbb47741004eda8558aae0429f55064fc5..6777bc6d6f11ebfb8af32f74d2f8341ce68c89a7 100644 (file)
         </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
-            <artifactId>mdsal-singleton-common-api</artifactId>
+            <artifactId>mdsal-singleton-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
index fa154b732f9b463f89c8e87b18e5381f14908cfb..fd2c3a935c2a0c8f469e2ceb9f190ac9bfe1cd0a 100644 (file)
@@ -20,7 +20,7 @@ import org.opendaylight.bgpcep.pcep.topology.spi.AbstractInstructionExecutor;
 import org.opendaylight.bgpcep.programming.topology.TopologyProgrammingUtil;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
-import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
@@ -65,11 +65,11 @@ final class CreateTunnelInstructionExecutor extends AbstractInstructionExecutor
     private final PcepCreateP2pTunnelInput p2pTunnelInput;
 
     CreateTunnelInstructionExecutor(final PcepCreateP2pTunnelInput p2pTunnelInput, final DataBroker dataProvider,
-            final RpcConsumerRegistry rpcConsumerRegistry) {
+            final RpcService rpcService) {
         super(p2pTunnelInput);
         this.p2pTunnelInput = p2pTunnelInput;
         this.dataProvider = dataProvider;
-        addLsp = rpcConsumerRegistry.getRpc(AddLsp.class);
+        addLsp = rpcService.getRpc(AddLsp.class);
     }
 
     private static void checkLinkIsnotExistent(final InstanceIdentifier<Topology> tii,
index db1c48f2d9d5bd4f9cf510f521f56b6fcdfc0b66..7d01c176062851fd48cf533a4a83bd5ed2146e9d 100644 (file)
@@ -17,7 +17,7 @@ import org.opendaylight.bgpcep.programming.topology.TopologyProgrammingUtil;
 import org.opendaylight.bgpcep.programming.tunnel.TunnelProgrammingUtil;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
-import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.OperationResult;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev220730.RemoveLsp;
@@ -39,11 +39,11 @@ final class DestroyTunnelInstructionExecutor extends AbstractInstructionExecutor
     private final RemoveLsp removeLsp;
 
     DestroyTunnelInstructionExecutor(final PcepDestroyTunnelInput pcepDestroyTunnelInput, final DataBroker dataProvider,
-            final RpcConsumerRegistry rpcConsumerRegistry) {
+            final RpcService rpcService) {
         super(pcepDestroyTunnelInput);
         this.pcepDestroyTunnelInput = pcepDestroyTunnelInput;
         this.dataProvider = dataProvider;
-        removeLsp = rpcConsumerRegistry.getRpc(RemoveLsp.class);
+        removeLsp = rpcService.getRpc(RemoveLsp.class);
     }
 
     @Override
index 052d62d035a91b7e00a1ad6fbd020b1687ef0364..267f4b0cb0074d83e75570810ef159d0dd789c17 100644 (file)
@@ -12,7 +12,6 @@ import static java.util.Objects.requireNonNull;
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.MoreExecutors;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -20,9 +19,10 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
-import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.DataObjectModification;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
 import org.opendaylight.mdsal.common.api.CommitInfo;
@@ -68,13 +68,13 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.nt.l3.unicast.igp
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.nt.l3.unicast.igp.topology.rev131021.igp.termination.point.attributes.igp.termination.point.attributes.termination.point.type.Ip;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.nt.l3.unicast.igp.topology.rev131021.igp.termination.point.attributes.igp.termination.point.attributes.termination.point.type.IpBuilder;
 import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.DataObjectStep;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public final class NodeChangedListener implements ClusteredDataTreeChangeListener<Node> {
+public final class NodeChangedListener implements DataTreeChangeListener<Node> {
     private static final Logger LOG = LoggerFactory.getLogger(NodeChangedListener.class);
     private final InstanceIdentifier<Topology> target;
     private final DataBroker dataProvider;
@@ -285,7 +285,7 @@ public final class NodeChangedListener implements ClusteredDataTreeChangeListene
                 new TerminationPointKey(tp)).build();
     }
 
-    private InstanceIdentifier<Node> nodeIdentifier(final NodeId node) {
+    private @NonNull InstanceIdentifier<Node> nodeIdentifier(final NodeId node) {
         return target.child(Node.class, new NodeKey(node));
     }
 
@@ -394,24 +394,23 @@ public final class NodeChangedListener implements ClusteredDataTreeChangeListene
     }
 
     @Override
-    public void onDataTreeChanged(final Collection<DataTreeModification<Node>> changes) {
-        final ReadWriteTransaction trans = dataProvider.newReadWriteTransaction();
+    public void onDataTreeChanged(final List<DataTreeModification<Node>> changes) {
+        final var trans = dataProvider.newReadWriteTransaction();
 
-        final Set<InstanceIdentifier<ReportedLsp>> lsps = new HashSet<>();
-        final Set<InstanceIdentifier<Node>> nodes = new HashSet<>();
+        final var lsps = new HashSet<InstanceIdentifier<ReportedLsp>>();
+        final var nodes = new HashSet<InstanceIdentifier<Node>>();
 
-        final Map<InstanceIdentifier<?>, DataObject> original = new HashMap<>();
-        final Map<InstanceIdentifier<?>, DataObject> updated = new HashMap<>();
-        final Map<InstanceIdentifier<?>, DataObject> created = new HashMap<>();
+        final var original = new HashMap<InstanceIdentifier<?>, DataObject>();
+        final var updated = new HashMap<InstanceIdentifier<?>, DataObject>();
+        final var created = new HashMap<InstanceIdentifier<?>, DataObject>();
 
-        for (final DataTreeModification<?> change : changes) {
-            final InstanceIdentifier<?> iid = change.getRootPath().getRootIdentifier();
-            final DataObjectModification<?> rootNode = change.getRootNode();
-            handleChangedNode(rootNode, iid, lsps, nodes, original, updated, created);
+        for (final var change : changes) {
+            handleChangedNode(change.getRootNode(), change.getRootPath().path(), lsps, nodes, original, updated,
+                created);
         }
 
         // Now walk all nodes, check for removals/additions and cascade them to LSPs
-        for (final InstanceIdentifier<Node> iid : nodes) {
+        for (var iid : nodes) {
             enumerateLsps(iid, (Node) original.get(iid), lsps);
             enumerateLsps(iid, (Node) updated.get(iid), lsps);
             enumerateLsps(iid, (Node) created.get(iid), lsps);
@@ -442,28 +441,26 @@ public final class NodeChangedListener implements ClusteredDataTreeChangeListene
         categorizeIdentifier(iid, lsps, nodes);
 
         // Get the subtrees
-        switch (changedNode.getModificationType()) {
+        switch (changedNode.modificationType()) {
             case DELETE:
-                original.put(iid, changedNode.getDataBefore());
+                original.put(iid, changedNode.dataBefore());
                 break;
             case SUBTREE_MODIFIED:
-                original.put(iid, changedNode.getDataBefore());
-                updated.put(iid, changedNode.getDataAfter());
+                original.put(iid, changedNode.dataBefore());
+                updated.put(iid, changedNode.dataAfter());
                 break;
             case WRITE:
-                created.put(iid, changedNode.getDataAfter());
+                created.put(iid, changedNode.dataAfter());
                 break;
             default:
-                throw new IllegalArgumentException("Unhandled modification type " + changedNode.getModificationType());
+                throw new IllegalArgumentException("Unhandled modification type " + changedNode.modificationType());
         }
 
-        for (DataObjectModification<? extends DataObject> child : changedNode.getModifiedChildren()) {
-            final List<PathArgument> pathArguments = new ArrayList<>();
-            for (PathArgument pathArgument : iid.getPathArguments()) {
-                pathArguments.add(pathArgument);
-            }
-            pathArguments.add(child.getIdentifier());
-            final InstanceIdentifier<?> childIID = InstanceIdentifier.unsafeOf(pathArguments);
+        for (var child : changedNode.modifiedChildren()) {
+            final var pathArguments = new ArrayList<DataObjectStep<?>>();
+            iid.getPathArguments().forEach(pathArguments::add);
+            pathArguments.add(child.step());
+            final var childIID = InstanceIdentifier.unsafeOf(pathArguments);
             handleChangedNode(child, childIID, lsps, nodes, original, updated, created);
         }
     }
index 51c9d251fc8b7eb2606eaec0c5f587b9ded7da06..43d148c8f119f30de78667053c129daf68e33e9b 100644 (file)
@@ -17,9 +17,8 @@ import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.opendaylight.bgpcep.programming.spi.InstructionScheduler;
 import org.opendaylight.bgpcep.topology.DefaultTopologyReference;
 import org.opendaylight.mdsal.common.api.CommitInfo;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
-import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonService;
+import org.opendaylight.mdsal.singleton.api.ServiceGroupIdentifier;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
@@ -36,17 +35,17 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public final class PCEPTunnelClusterSingletonService implements ClusterSingletonService, AutoCloseable {
-
     private static final Logger LOG = LoggerFactory.getLogger(PCEPTunnelClusterSingletonService.class);
+
     private final PCEPTunnelTopologyProvider ttp;
     private final TunnelProgramming tp;
     private final ServiceGroupIdentifier sgi;
     private final TopologyId tunnelTopologyId;
-    private final TunnelProviderDependencies dependencies;
+
     @GuardedBy("this")
     private ServiceRegistration<?> serviceRegistration;
     @GuardedBy("this")
-    private ClusterSingletonServiceRegistration pcepTunnelCssReg;
+    private Registration pcepTunnelCssReg;
     @GuardedBy("this")
     private Registration reg;
 
@@ -55,7 +54,6 @@ public final class PCEPTunnelClusterSingletonService implements ClusterSingleton
             final InstanceIdentifier<Topology> pcepTopology,
             final TopologyId tunnelTopologyId
     ) {
-        this.dependencies = requireNonNull(dependencies);
         this.tunnelTopologyId = requireNonNull(tunnelTopologyId);
         final TopologyId pcepTopologyId = pcepTopology.firstKeyOf(Topology.class).getTopologyId();
         final BundleContext bundleContext = dependencies.getBundleContext();
@@ -94,13 +92,13 @@ public final class PCEPTunnelClusterSingletonService implements ClusterSingleton
             FrameworkUtil.asDictionary(Map.of(
                 PCEPTunnelTopologyProvider.class.getName(), tunnelTopologyId.getValue())));
 
-        LOG.info("PCEP Tunnel Cluster Singleton service {} registered", getIdentifier().getName());
+        LOG.info("PCEP Tunnel Cluster Singleton service {} registered", getIdentifier().value());
         pcepTunnelCssReg = dependencies.getCssp().registerClusterSingletonService(this);
     }
 
     @Override
     public synchronized void instantiateServiceInstance() {
-        LOG.info("Instantiate PCEP Tunnel Topology Provider Singleton Service {}", getIdentifier().getName());
+        LOG.info("Instantiate PCEP Tunnel Topology Provider Singleton Service {}", getIdentifier().value());
 
         reg = tp.register(InstanceIdentifier.builder(NetworkTopology.class)
             .child(Topology.class, new TopologyKey(tunnelTopologyId))
@@ -110,8 +108,7 @@ public final class PCEPTunnelClusterSingletonService implements ClusterSingleton
 
     @Override
     public synchronized ListenableFuture<? extends CommitInfo> closeServiceInstance() {
-        LOG.info("Close Service Instance PCEP Tunnel Topology Provider Singleton Service {}",
-                getIdentifier().getName());
+        LOG.info("Close Service Instance PCEP Tunnel Topology Provider Singleton Service {}", getIdentifier().value());
         reg.close();
         tp.close();
         ttp.close();
@@ -126,13 +123,13 @@ public final class PCEPTunnelClusterSingletonService implements ClusterSingleton
     @Override
     @SuppressWarnings("checkstyle:IllegalCatch")
     public synchronized void close() {
-        LOG.info("Close PCEP Tunnel Topology Provider Singleton Service {}", getIdentifier().getName());
+        LOG.info("Close PCEP Tunnel Topology Provider Singleton Service {}", getIdentifier().value());
 
         if (pcepTunnelCssReg != null) {
             try {
                 pcepTunnelCssReg.close();
             } catch (final Exception e) {
-                LOG.debug("Failed to close PCEP Tunnel Topology service {}", sgi.getName(), e);
+                LOG.debug("Failed to close PCEP Tunnel Topology service {}", sgi.value(), e);
             }
             pcepTunnelCssReg = null;
         }
index 87085b41f88894b039e825077f793d5fa75dfe89..ca2b149015b8d29e3556bb806b4c23edf6c77f58 100644 (file)
@@ -22,7 +22,7 @@ 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.TopologyBuilder;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.TopologyTypesBuilder;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -37,7 +37,7 @@ public final class PCEPTunnelTopologyProvider extends DefaultTopologyReference i
     private final DataBroker dataBroker;
     private final TopologyId tunneltopologyId;
     @GuardedBy("this")
-    private ListenerRegistration<NodeChangedListener> reg;
+    private Registration reg;
 
     public PCEPTunnelTopologyProvider(
             final DataBroker dataBroker,
@@ -48,15 +48,15 @@ public final class PCEPTunnelTopologyProvider extends DefaultTopologyReference i
         super(tunnelTopology);
         this.dataBroker = dataBroker;
         this.tunneltopologyId = tunneltopologyId;
-        this.ncl = new NodeChangedListener(dataBroker, pcepTopologyId, tunnelTopology);
-        this.src = pcepTopology.child(Node.class);
-        this.ref = new DefaultTopologyReference(tunnelTopology);
+        ncl = new NodeChangedListener(dataBroker, pcepTopologyId, tunnelTopology);
+        src = pcepTopology.child(Node.class);
+        ref = new DefaultTopologyReference(tunnelTopology);
     }
 
     synchronized void init() {
-        final WriteTransaction tx = this.dataBroker.newWriteOnlyTransaction();
+        final WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
         tx.mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, getTopologyReference().getInstanceIdentifier(),
-                new TopologyBuilder().setTopologyId(this.tunneltopologyId)
+                new TopologyBuilder().setTopologyId(tunneltopologyId)
                         .setTopologyTypes(new TopologyTypesBuilder()
                                 .addAugmentation(new TopologyTypes1Builder()
                                         .setTopologyTunnelPcep(
@@ -67,20 +67,19 @@ public final class PCEPTunnelTopologyProvider extends DefaultTopologyReference i
         } catch (final InterruptedException | ExecutionException e) {
             LOG.error("Failed to create Tunnel Topology root", e);
         }
-        this.reg = this.ncl.getDataProvider()
-                .registerDataTreeChangeListener(DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, this.src),
-                        this.ncl);
+        reg = ncl.getDataProvider()
+            .registerTreeChangeListener(DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, src), ncl);
     }
 
     public TopologyReference getTopologyReference() {
-        return this.ref;
+        return ref;
     }
 
     @Override
     public synchronized void close() {
-        if (this.reg != null) {
-            this.reg.close();
-            this.reg = null;
+        if (reg != null) {
+            reg.close();
+            reg = null;
         }
     }
 }
index 66c625280eba05da35d6b3065591a5b9f205b919..8ca912d115b79b4fcd8908a4fc25d948e16a3d99 100644 (file)
@@ -10,15 +10,15 @@ package org.opendaylight.bgpcep.pcep.tunnel.provider;
 import static java.util.Objects.requireNonNull;
 
 import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
+import org.opendaylight.mdsal.binding.api.RpcService;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonServiceProvider;
 import org.osgi.framework.BundleContext;
 
 final class TunnelProviderDependencies {
     private final DataBroker dataBroker;
     private final ClusterSingletonServiceProvider cssp;
-    private final RpcConsumerRegistry rpcConsumerRegistry;
+    private final RpcService rpcService;
     private final RpcProviderService rpcProviderRegistry;
     private final BundleContext bundleContext;
 
@@ -26,7 +26,7 @@ final class TunnelProviderDependencies {
             final DataBroker dataBroker,
             final ClusterSingletonServiceProvider cssp,
             final RpcProviderService rpcProviderRegistry,
-            final RpcConsumerRegistry rpcConsumerRegistry,
+            final RpcService rpcService,
             final BundleContext bundleContext
     ) {
 
@@ -34,26 +34,26 @@ final class TunnelProviderDependencies {
         this.cssp = requireNonNull(cssp);
         this.rpcProviderRegistry = requireNonNull(rpcProviderRegistry);
         this.bundleContext = requireNonNull(bundleContext);
-        this.rpcConsumerRegistry = requireNonNull(rpcConsumerRegistry);
+        this.rpcService = requireNonNull(rpcService);
     }
 
     DataBroker getDataBroker() {
-        return this.dataBroker;
+        return dataBroker;
     }
 
     ClusterSingletonServiceProvider getCssp() {
-        return this.cssp;
+        return cssp;
     }
 
-    RpcConsumerRegistry getRpcConsumerRegistry() {
-        return this.rpcConsumerRegistry;
+    RpcService getRpcConsumerRegistry() {
+        return rpcService;
     }
 
     RpcProviderService getRpcProviderRegistry() {
-        return this.rpcProviderRegistry;
+        return rpcProviderRegistry;
     }
 
     BundleContext getBundleContext() {
-        return this.bundleContext;
+        return bundleContext;
     }
 }
index dbed0b12d0669e9aa070add6c7d474e7da11f689..19e56634d005c59b432e0d2af2235bc2c8bb97a7 100644 (file)
@@ -9,22 +9,19 @@ package org.opendaylight.bgpcep.pcep.tunnel.provider;
 
 import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.CONFIGURATION;
 
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
 import org.apache.commons.lang3.StringUtils;
 import org.checkerframework.checker.lock.qual.GuardedBy;
-import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.DataObjectModification;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
-import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
+import org.opendaylight.mdsal.binding.api.RpcService;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonServiceProvider;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.config.rev181109.PcepTunnelTopologyConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev181109.TopologyTypes1;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
@@ -43,7 +40,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @Component(service = { })
-public final class TunnelProviderDeployer implements ClusteredDataTreeChangeListener<Topology>, AutoCloseable {
+public final class TunnelProviderDeployer implements DataTreeChangeListener<Topology>, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(TunnelProviderDeployer.class);
     private static final long TIMEOUT_NS = TimeUnit.SECONDS.toNanos(5);
 
@@ -55,13 +52,13 @@ public final class TunnelProviderDeployer implements ClusteredDataTreeChangeList
     @Activate
     public TunnelProviderDeployer(@Reference final DataBroker dataBroker,
             @Reference final RpcProviderService rpcProviderRegistry,
-            @Reference final RpcConsumerRegistry rpcConsumerRegistry,
+            @Reference final RpcService rpcService,
             @Reference final ClusterSingletonServiceProvider cssp,
             // FIXME: do not reference BundleContext in an alternative constructor
             final BundleContext bundleContext) {
-        dependencies = new TunnelProviderDependencies(dataBroker, cssp, rpcProviderRegistry, rpcConsumerRegistry,
+        dependencies = new TunnelProviderDependencies(dataBroker, cssp, rpcProviderRegistry, rpcService,
                 bundleContext);
-        reg = dataBroker.registerDataTreeChangeListener(DataTreeIdentifier.create(CONFIGURATION,
+        reg = dataBroker.registerTreeChangeListener(DataTreeIdentifier.of(CONFIGURATION,
                 InstanceIdentifier.builder(NetworkTopology.class).child(Topology.class).build()), this);
         LOG.info("Tunnel Provider Deployer created");
     }
@@ -88,27 +85,21 @@ public final class TunnelProviderDeployer implements ClusteredDataTreeChangeList
     }
 
     @Override
-    public synchronized void onDataTreeChanged(final Collection<DataTreeModification<Topology>> changes) {
-        final List<DataObjectModification<Topology>> topoChanges = changes.stream()
-                .map(DataTreeModification::getRootNode)
-                .collect(Collectors.toList());
-
-        topoChanges.stream().iterator().forEachRemaining(this::handleTopologyChange);
-    }
-
-    private synchronized void handleTopologyChange(final DataObjectModification<Topology> topo) {
-        switch (topo.getModificationType()) {
-            case SUBTREE_MODIFIED:
-                updateTunnelTopologyProvider(topo.getDataAfter());
-                break;
-            case WRITE:
-                createTunnelTopologyProvider(topo.getDataAfter());
-                break;
-            case DELETE:
-                removeTunnelTopologyProvider(topo.getDataBefore());
-                break;
-            default:
-        }
+    public synchronized void onDataTreeChanged(final List<DataTreeModification<Topology>> changes) {
+        changes.stream().map(DataTreeModification::getRootNode).forEach(topo -> {
+            switch (topo.modificationType()) {
+                case SUBTREE_MODIFIED:
+                    updateTunnelTopologyProvider(topo.dataAfter());
+                    break;
+                case WRITE:
+                    createTunnelTopologyProvider(topo.dataAfter());
+                    break;
+                case DELETE:
+                    removeTunnelTopologyProvider(topo.dataBefore());
+                    break;
+                default:
+            }
+        });
     }
 
     private static boolean filterPcepTopologies(final TopologyTypes topologyTypes) {
index d633bc53cf83c53a48a06bbc547ab4db230478e7..b2d719cb668e7625e18a4ac82f386b50f4657a74 100644 (file)
@@ -18,7 +18,7 @@ import org.opendaylight.bgpcep.programming.topology.TopologyProgrammingUtil;
 import org.opendaylight.bgpcep.programming.tunnel.TunnelProgrammingUtil;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
-import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.AdministrativeStatus;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.Arguments3Builder;
@@ -48,11 +48,11 @@ final class UpdateTunnelInstructionExecutor extends AbstractInstructionExecutor
     private final UpdateLsp updateLsp;
 
     UpdateTunnelInstructionExecutor(final PcepUpdateTunnelInput updateTunnelInput, final DataBroker dataProvider,
-            final RpcConsumerRegistry rpcConsumerRegistry) {
+            final RpcService rpcService) {
         super(updateTunnelInput);
         this.updateTunnelInput = updateTunnelInput;
         this.dataProvider = dataProvider;
-        updateLsp = rpcConsumerRegistry.getRpc(UpdateLsp.class);
+        updateLsp = rpcService.getRpc(UpdateLsp.class);
     }
 
     @Override
index 0bca5198301684e3105585434e82965fe87d0f0f..6c40dd6f4cc9bda0f1697b57d4592b10a7776ad4 100644 (file)
@@ -57,7 +57,7 @@ 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.NodeKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.node.attributes.SupportingNode;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 import org.opendaylight.yangtools.yang.common.Uint32;
@@ -82,7 +82,7 @@ public class NodeChangedListenerTest extends AbstractConcurrentDataBrokerTest {
     private static final InstanceIdentifier<Topology> TUNNEL_TOPO_IID = InstanceIdentifier
             .builder(NetworkTopology.class).child(Topology.class, new TopologyKey(TUNNEL_TOPOLOGY_ID)).build();
 
-    private ListenerRegistration<NodeChangedListener> listenerRegistration;
+    private Registration listenerRegistration;
 
     @Before
     public void setUp() throws InterruptedException, ExecutionException {
@@ -95,7 +95,7 @@ public class NodeChangedListenerTest extends AbstractConcurrentDataBrokerTest {
         wTx.commit().get();
         final NodeChangedListener nodeListener = new NodeChangedListener(getDataBroker(),
                 PCEP_TOPOLOGY_ID, TUNNEL_TOPO_IID);
-        this.listenerRegistration = getDataBroker().registerDataTreeChangeListener(DataTreeIdentifier.create(
+        listenerRegistration = getDataBroker().registerTreeChangeListener(DataTreeIdentifier.of(
                 LogicalDatastoreType.OPERATIONAL, PCEP_TOPO_IID.child(Node.class)), nodeListener);
     }
 
@@ -197,7 +197,7 @@ public class NodeChangedListenerTest extends AbstractConcurrentDataBrokerTest {
 
     @After
     public void tearDown() {
-        this.listenerRegistration.close();
+        listenerRegistration.close();
     }
 
     private void createNode(final NodeId nodeId, final String ipv4Address, final String lspName, final Uint32 lspId,
index 29155d79d4c4b6a9984d9277ec42b2029449e107..84dcbf0abea54ec46a80e1aa078c94f0d237dea0 100644 (file)
@@ -29,12 +29,12 @@ import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.bgpcep.programming.spi.Instruction;
 import org.opendaylight.bgpcep.programming.spi.InstructionScheduler;
 import org.opendaylight.bgpcep.programming.spi.SchedulerException;
-import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonServiceProvider;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
@@ -130,7 +130,7 @@ public class TunnelProgrammingTest extends AbstractConcurrentDataBrokerTest {
     @Mock
     private RpcProviderService rpr;
     @Mock
-    private RpcConsumerRegistry rpcs;
+    private RpcService rpcs;
     @Mock
     private BundleContext bundleContext;
 
index 0572fabb81cca7977a0a495d05f2b75e11f9f657..c4b92d1d6b7fb8256afc8e39fe46a9dcdc71bd44 100644 (file)
@@ -59,7 +59,7 @@
         </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
-            <artifactId>mdsal-singleton-common-api</artifactId>
+            <artifactId>mdsal-singleton-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
index e826f2dc482e4de3b11005764b4aaa994b49693e..e328cc188a448e93c04764b040a47659aaf4edd8 100644 (file)
@@ -42,10 +42,9 @@ import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
-import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonService;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonServiceProvider;
+import org.opendaylight.mdsal.singleton.api.ServiceGroupIdentifier;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev150720.CancelInstruction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev150720.CancelInstructionInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev150720.CancelInstructionOutput;
@@ -89,7 +88,7 @@ final class DefaultInstructionScheduler implements ClusterSingletonService, Inst
     private final Timer timer;
     private final String instructionId;
     private final ServiceGroupIdentifier sgi;
-    private final ClusterSingletonServiceRegistration csspReg;
+    private final Registration csspReg;
     private final RpcProviderService rpcProviderRegistry;
     @GuardedBy("this")
     private Registration reg;
@@ -168,14 +167,14 @@ final class DefaultInstructionScheduler implements ClusterSingletonService, Inst
         this.timer = requireNonNull(timer);
         qid = KeyedInstanceIdentifier.builder(InstructionsQueue.class,
                 new InstructionsQueueKey(this.instructionId)).build();
-        sgi = ServiceGroupIdentifier.create(this.instructionId + "-service-group");
-        LOG.info("Creating Programming Service {}.", sgi.getName());
+        sgi = new ServiceGroupIdentifier(this.instructionId + "-service-group");
+        LOG.info("Creating Programming Service {}.", sgi.value());
         csspReg = cssp.registerClusterSingletonService(this);
     }
 
     @Override
     public synchronized void instantiateServiceInstance() {
-        LOG.info("Instruction Queue service {} instantiated", sgi.getName());
+        LOG.info("Instruction Queue service {} instantiated", sgi.value());
         reg = rpcProviderRegistry.registerRpcImplementations(ImmutableClassToInstanceMap.<Rpc<?, ?>>builder()
             .put(CancelInstruction.class, this::cancelInstruction)
             .put(CleanInstructions.class, this::cleanInstructions)
@@ -401,7 +400,7 @@ final class DefaultInstructionScheduler implements ClusterSingletonService, Inst
     private synchronized void tryScheduleInstruction(final InstructionImpl instruction) {
         final ListenableFuture<ExecutionResult<Details>> f = instruction.ready();
         if (f != null) {
-            Futures.addCallback(f, new FutureCallback<ExecutionResult<Details>>() {
+            Futures.addCallback(f, new FutureCallback<>() {
                 @Override
                 public void onSuccess(final ExecutionResult<Details> result) {
                     tryScheduleDependants(instruction);
@@ -413,12 +412,11 @@ final class DefaultInstructionScheduler implements ClusterSingletonService, Inst
                 }
             }, MoreExecutors.directExecutor());
         }
-
     }
 
     @Override
     public synchronized FluentFuture<? extends CommitInfo> closeServiceInstance() {
-        LOG.info("Closing Instruction Queue service {}", sgi.getName());
+        LOG.info("Closing Instruction Queue service {}", sgi.value());
 
         if (reg != null) {
             reg.close();
index e510444adf91f5cf86a0fc62731f6c36faa7f53f..8e2113bf4280db51fb4e2985fbf2559fc08b1ba3 100644 (file)
@@ -23,7 +23,7 @@ import org.opendaylight.bgpcep.programming.spi.InstructionSchedulerFactory;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonServiceProvider;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Deactivate;
index 857b279abcf051a41c52671f22210e954b6de5fa..b82b0e4a003701eb3dc13fc76ec6e23064297c1c 100644 (file)
@@ -16,9 +16,8 @@ import org.junit.Before;
 import org.mockito.Mock;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
-import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonService;
+import org.opendaylight.mdsal.singleton.api.ClusterSingletonServiceProvider;
 import org.opendaylight.yangtools.concepts.Registration;
 
 abstract class AbstractProgrammingTest extends AbstractConcurrentDataBrokerTest {
@@ -27,7 +26,7 @@ abstract class AbstractProgrammingTest extends AbstractConcurrentDataBrokerTest
     @Mock
     ClusterSingletonServiceProvider cssp;
     @Mock
-    ClusterSingletonServiceRegistration singletonServiceRegistration;
+    Registration singletonServiceRegistration;
     @Mock
     private Registration registration;
     ClusterSingletonService singletonService;
@@ -39,16 +38,16 @@ abstract class AbstractProgrammingTest extends AbstractConcurrentDataBrokerTest
     @Before
     public void setUp() throws Exception {
         doAnswer(invocationOnMock -> {
-            this.singletonService = (ClusterSingletonService) invocationOnMock.getArguments()[0];
-            return this.singletonServiceRegistration;
-        }).when(this.cssp).registerClusterSingletonService(any(ClusterSingletonService.class));
+            singletonService = invocationOnMock.getArgument(0);
+            return singletonServiceRegistration;
+        }).when(cssp).registerClusterSingletonService(any(ClusterSingletonService.class));
         doAnswer(invocationOnMock -> {
-            this.singletonService.closeServiceInstance().get();
+            singletonService.closeServiceInstance().get();
             return null;
-        }).when(this.singletonServiceRegistration).close();
+        }).when(singletonServiceRegistration).close();
 
-        doReturn(this.registration).when(this.rpcRegistry).registerRpcImplementations(any());
+        doReturn(registration).when(rpcRegistry).registerRpcImplementations(any());
 
-        doNothing().when(this.registration).close();
+        doNothing().when(registration).close();
     }
 }
index c45155b09ff47b44a1eb0c7430e870a7df59adb0..2c1cac36d31b638ab11131c6343a485cfada50fb 100644 (file)
@@ -49,7 +49,7 @@
         </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>
-            <artifactId>mdsal-singleton-common-api</artifactId>
+            <artifactId>mdsal-singleton-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
index 9ca8facad395db7554217d9cfdb44d87f66c1afb..3cdcd0f02accbb588ea30c0b162451e40f9cd4db 100644 (file)
@@ -9,7 +9,7 @@ package org.opendaylight.bgpcep.programming.spi;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
+import org.opendaylight.mdsal.singleton.api.ServiceGroupIdentifier;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev150720.SubmitInstructionInput;
 import org.opendaylight.yangtools.concepts.Identifiable;
 import org.opendaylight.yangtools.concepts.Registration;