From 7526de25301597d670657400b541b10455311fbe Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 8 Jan 2024 11:36:29 +0100 Subject: [PATCH] Bump upstreams Adopt: - yangtools-13.0.1 - mdsal-13.0.0 Also adopts AbstractDOMDataBroker from mdsal-dom-spi, so that we have less code duplication and maintenance. UTs mocking NormalizedNode are updated to ContainerNode, as mocking sealed classes does not work with Mockito (out of the box). Change-Id: I6d3d3c8ced297b6850aea951040d16437df9e3f0 Signed-off-by: Robert Varga --- .../listener/DsbenchmarkListener.java | 26 +-- .../listener/DsbenchmarkListenerProvider.java | 29 +-- .../dsbenchmark/txchain/TxchainBaDelete.java | 17 +- .../dsbenchmark/txchain/TxchainBaRead.java | 16 +- .../dsbenchmark/txchain/TxchainBaWrite.java | 19 +- .../dsbenchmark/txchain/TxchainDomDelete.java | 17 +- .../dsbenchmark/txchain/TxchainDomRead.java | 18 +- .../dsbenchmark/txchain/TxchainDomWrite.java | 18 +- .../impl/GlobalBindingRTCClient.java | 17 +- .../impl/RoutedBindingRTClient.java | 6 +- .../impl/RpcbenchmarkProvider.java | 6 +- bundle-parent/pom.xml | 4 +- docs/pom.xml | 4 +- .../src/main/feature/feature.xml | 2 +- .../src/main/feature/feature.xml | 8 +- .../src/main/feature/feature.xml | 8 +- .../src/main/feature/feature.xml | 4 +- .../src/main/feature/feature.xml | 4 +- .../src/main/feature/feature.xml | 4 +- .../src/main/feature/feature.xml | 8 +- .../odl-toaster/src/main/feature/feature.xml | 2 +- opendaylight/blueprint/pom.xml | 4 +- .../blueprint/ext/BindingContext.java | 14 +- .../ext/DataStoreAppConfigMetadata.java | 6 +- opendaylight/md-sal/cds-access-api/pom.xml | 5 + opendaylight/md-sal/eos-dom-akka/pom.xml | 9 +- .../eos/akka/AkkaEntityOwnershipService.java | 7 +- .../eos/akka/CandidateRegistration.java | 4 +- .../eos/akka/ListenerRegistration.java | 7 +- .../owner/SingleEntityListenerActor.java | 14 +- .../type/EntityTypeListenerActor.java | 3 +- .../type/command/EntityOwnerChanged.java | 38 +++- .../eos/akka/AbstractNativeEosTest.java | 31 +-- .../akka/AkkaEntityOwnershipServiceTest.java | 69 +++---- .../eos/akka/EntityRpcHandlerTest.java | 24 +-- .../ClusterSingletonIntegrationTest.java | 58 +++--- opendaylight/md-sal/mdsal-it-base/pom.xml | 2 +- opendaylight/md-sal/parent/pom.xml | 2 +- .../test/sal/binding/it/RoutedServiceIT.java | 6 +- .../command/ActivateEosDatacenterCommand.java | 6 +- .../AddReplicasForAllShardsCommand.java | 6 +- .../admin/command/AddShardReplicaCommand.java | 6 +- .../admin/command/BackupDatastoreCommand.java | 6 +- ...MemberVotingStatesForAllShardsCommand.java | 6 +- ...angeMemberVotingStatesForShardCommand.java | 6 +- .../DeactivateEosDatacenterCommand.java | 6 +- ...MemberVotingStatesForAllShardsCommand.java | 6 +- .../GetKnownClientsForAllShardsCommand.java | 6 +- .../admin/command/GetShardRoleCommand.java | 6 +- .../admin/command/LocateShardCommand.java | 6 +- .../admin/command/MakeLeaderLocalCommand.java | 6 +- .../RemoveAllShardReplicasCommand.java | 6 +- .../command/RemoveShardReplicaCommand.java | 6 +- .../RemoteYangTextSourceProvider.java | 2 +- .../provider/impl/RemoteSchemaProvider.java | 26 ++- .../RemoteYangTextSourceProviderImpl.java | 14 +- ...angTextSchemaSourceSerializationProxy.java | 19 +- .../utils/stream/SerializationUtilsTest.java | 6 +- .../transformer/NormalizedNodePrunerTest.java | 10 +- .../impl/RemoteSchemaProviderTest.java | 15 +- .../RemoteYangTextSourceProviderImplTest.java | 15 +- .../YangTextSourceSerializationProxyTest.java | 23 ++- .../md-sal/sal-distributed-datastore/pom.xml | 6 + .../cluster/databroker/AbstractDOMBroker.java | 131 ------------- .../AbstractDOMBrokerTransaction.java | 135 ------------- .../AbstractDOMBrokerWriteTransaction.java | 154 --------------- .../AbstractDOMTransactionFactory.java | 130 ------------- .../databroker/ConcurrentDOMDataBroker.java | 11 +- .../DOMBrokerReadOnlyTransaction.java | 54 ------ .../DOMBrokerReadWriteTransaction.java | 50 ----- .../databroker/DOMBrokerTransactionChain.java | 139 -------------- .../DOMBrokerWriteOnlyTransaction.java | 35 ---- .../cluster/databroker/OSGiDOMDataBroker.java | 16 +- .../dds/FailedDataTreeModification.java | 17 +- .../dds/LocalReadWriteProxyTransaction.java | 2 +- .../cluster/datastore/AbstractDataStore.java | 100 +++++----- .../DataTreeChangeListenerProxy.java | 100 +++++----- .../DataTreeChangeListenerSupport.java | 15 +- .../DataTreeCohortActorRegistry.java | 32 ++-- .../DataTreeCohortRegistrationProxy.java | 10 +- ...tShardDataTreeChangeListenerPublisher.java | 23 +-- ...yedDataTreeChangeListenerRegistration.java | 16 +- .../DistributedDataStoreFactory.java | 2 +- .../DistributedDataStoreInterface.java | 5 +- .../cluster/datastore/OSGiDOMStore.java | 49 ++--- .../datastore/OSGiDistributedDataStore.java | 2 +- .../RootDataTreeChangeListenerProxy.java | 18 +- .../controller/cluster/datastore/Shard.java | 10 +- .../cluster/datastore/ShardDataTree.java | 5 +- .../ShardDataTreeChangeListenerPublisher.java | 5 +- ...TreeChangeListenerPublisherActorProxy.java | 4 +- .../ShardDataTreeChangePublisherActor.java | 7 +- .../messages/UpdateSchemaContext.java | 11 +- .../VersionedExternalizableMessage.java | 2 - .../AtomicShardContextProvider.java | 14 +- .../shardmanager/ShardInformation.java | 4 +- .../datastore/shardmanager/ShardManager.java | 16 +- .../utils/PruningDataTreeModification.java | 4 +- .../datastore/utils/RootScatterGather.java | 11 +- ...AbstractDOMBrokerWriteTransactionTest.java | 113 ----------- .../ClientBackedReadTransactionTest.java | 4 +- .../ClientBackedReadWriteTransactionTest.java | 4 +- .../ClientBackedWriteTransactionTest.java | 4 +- .../ConcurrentDOMDataBrokerTest.java | 41 ++-- ...ctDistributedDataStoreIntegrationTest.java | 28 ++- .../DataTreeChangeListenerProxyTest.java | 178 +++++++++--------- ...butedDataStoreRemotingIntegrationTest.java | 60 +++--- .../cluster/datastore/JsonExportTest.java | 35 ++-- .../CommitTransactionPayloadTest.java | 24 +-- .../controller/remote/rpc/OpsManager.java | 6 +- .../controller/remote/rpc/OpsRegistrar.java | 25 ++- .../remote/rpc/OpsRegistrarTest.java | 6 +- .../cli/DefaultInstanceIdentifierSupport.java | 2 +- .../cli/car/RegisterCommitCohortCommand.java | 4 +- .../cli/car/RegisterLoggingDtclCommand.java | 4 +- .../cli/car/RegisterOwnershipCommand.java | 4 +- .../karaf/cli/car/StopStressTestCommand.java | 4 +- .../it/karaf/cli/car/StressTestCommand.java | 4 +- .../car/UnregisterCommitCohortCommand.java | 4 +- .../car/UnregisterLoggingDtclsCommand.java | 4 +- .../cli/car/UnregisterOwnershipCommand.java | 4 +- .../karaf/cli/car/purchase/BuyCarCommand.java | 4 +- .../control/AddShardReplicaCommand.java | 4 +- .../CheckPublishNotificationsCommand.java | 8 +- .../control/IsClientAbortedCommand.java | 4 +- .../control/RegisterBoundConstantCommand.java | 4 +- .../control/RegisterConstantCommand.java | 4 +- .../RegisterDefaultConstantCommand.java | 8 +- .../RegisterFlappingSingletonCommand.java | 4 +- .../RegisterSingletonConstantCommand.java | 9 +- .../control/RemoveShardReplicaCommand.java | 4 +- .../control/ShutdownShardReplicaCommand.java | 4 +- .../StartPublishNotificationsCommand.java | 4 +- .../control/SubscribeDdtlCommand.java | 4 +- .../control/SubscribeDtclCommand.java | 4 +- .../lowlevel/control/SubscribeYnlCommand.java | 4 +- .../UnregisterBoundConstantCommand.java | 4 +- .../control/UnregisterConstantCommand.java | 4 +- .../UnregisterDefaultConstantCommand.java | 4 +- .../UnregisterFlappingSingletonCommand.java | 4 +- .../UnregisterSingletonConstantCommand.java | 4 +- .../control/UnsubscribeDdtlCommand.java | 4 +- .../control/UnsubscribeDtclCommand.java | 4 +- .../control/UnsubscribeYnlCommand.java | 8 +- .../control/WriteTransactionsCommand.java | 4 +- .../it/karaf/cli/people/AddPersonCommand.java | 4 +- .../cli/rpc/test/BasicGlobalCommand.java | 4 +- .../clustering-test-app/provider/pom.xml | 2 +- .../it/provider/BasicRpcTestProvider.java | 8 +- .../provider/CarDataTreeChangeListener.java | 26 +-- .../clustering/it/provider/CarProvider.java | 35 ++-- .../provider/MdsalLowLevelTestProvider.java | 35 ++-- .../impl/FlappingSingletonService.java | 19 +- .../it/provider/impl/GetConstantService.java | 10 +- .../impl/RoutedGetConstantService.java | 13 +- .../impl/SingletonGetConstantService.java | 18 +- .../impl/WriteTransactionsHandler.java | 14 +- .../kitchen/impl/KitchenServiceImpl.java | 6 +- .../toaster/provider/OpendaylightToaster.java | 48 +++-- 159 files changed, 973 insertions(+), 2043 deletions(-) delete mode 100644 opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBroker.java delete mode 100644 opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBrokerTransaction.java delete mode 100644 opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBrokerWriteTransaction.java delete mode 100644 opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMTransactionFactory.java delete mode 100644 opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/DOMBrokerReadOnlyTransaction.java delete mode 100644 opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/DOMBrokerReadWriteTransaction.java delete mode 100644 opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/DOMBrokerTransactionChain.java delete mode 100644 opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/DOMBrokerWriteOnlyTransaction.java delete mode 100644 opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBrokerWriteTransactionTest.java diff --git a/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/listener/DsbenchmarkListener.java b/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/listener/DsbenchmarkListener.java index 75523eff7a..34c2bfdb68 100644 --- a/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/listener/DsbenchmarkListener.java +++ b/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/listener/DsbenchmarkListener.java @@ -7,15 +7,11 @@ */ package org.opendaylight.dsbenchmark.listener; -import java.util.Collection; +import java.util.List; import java.util.concurrent.atomic.AtomicInteger; -import org.opendaylight.mdsal.binding.api.DataObjectModification; -import org.opendaylight.mdsal.binding.api.DataObjectModification.ModificationType; import org.opendaylight.mdsal.binding.api.DataTreeChangeListener; import org.opendaylight.mdsal.binding.api.DataTreeModification; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.TestExec; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,8 +21,7 @@ public class DsbenchmarkListener implements DataTreeChangeListener { private final AtomicInteger numDataChanges = new AtomicInteger(0); @Override - public void onDataTreeChanged( - final Collection> changes) { + public void onDataTreeChanged(final List> changes) { // Since we're registering the same DsbenchmarkListener object for both // OPERATIONAL and CONFIG, the onDataTreeChanged() method can be called // from different threads, and we need to use atomic counters. @@ -40,20 +35,19 @@ public class DsbenchmarkListener implements DataTreeChangeListener { } private static synchronized void logDataTreeChangeEvent(final int eventNum, - final Collection> changes) { + final List> changes) { LOG.debug("DsbenchmarkListener-onDataTreeChanged: Event {}", eventNum); - for (DataTreeModification change : changes) { - final DataObjectModification rootNode = change.getRootNode(); - final ModificationType modType = rootNode.getModificationType(); - final PathArgument changeId = rootNode.getIdentifier(); - final Collection> modifications = - rootNode.getModifiedChildren(); + for (var change : changes) { + final var rootNode = change.getRootNode(); + final var modType = rootNode.modificationType(); + final var changeId = rootNode.step(); + final var modifications = rootNode.modifiedChildren(); LOG.debug(" changeId {}, modType {}, mods: {}", changeId, modType, modifications.size()); - for (DataObjectModification mod : modifications) { - LOG.debug(" mod-getDataAfter: {}", mod.getDataAfter()); + for (var mod : modifications) { + LOG.debug(" mod-getDataAfter: {}", mod.dataAfter()); } } } diff --git a/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/listener/DsbenchmarkListenerProvider.java b/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/listener/DsbenchmarkListenerProvider.java index 6bc931ca11..f07fb31923 100644 --- a/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/listener/DsbenchmarkListenerProvider.java +++ b/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/listener/DsbenchmarkListenerProvider.java @@ -15,7 +15,7 @@ import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.api.DataTreeIdentifier; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.TestExec; -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; @@ -24,7 +24,8 @@ public class DsbenchmarkListenerProvider { private static final Logger LOG = LoggerFactory.getLogger(DsbenchmarkListenerProvider.class); private static final InstanceIdentifier TEST_EXEC_IID = InstanceIdentifier.builder(TestExec.class).build(); - private final List> listeners = new ArrayList<>(); + private final List listeners = new ArrayList<>(); + private final List registrations = new ArrayList<>(); private final DataBroker dataBroker; public DsbenchmarkListenerProvider(final DataBroker dataBroker) { @@ -34,11 +35,12 @@ public class DsbenchmarkListenerProvider { public void createAndRegisterListeners(final int numListeners) { for (int i = 0; i < numListeners; i++) { - DsbenchmarkListener listener = new DsbenchmarkListener(); - listeners.add(dataBroker.registerDataTreeChangeListener( - DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, TEST_EXEC_IID), listener)); - listeners.add(dataBroker.registerDataTreeChangeListener( - DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, TEST_EXEC_IID), listener)); + var listener = new DsbenchmarkListener(); + listeners.add(listener); + registrations.add(dataBroker.registerDataTreeChangeListener( + DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, TEST_EXEC_IID), listener)); + registrations.add(dataBroker.registerDataTreeChangeListener( + DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, TEST_EXEC_IID), listener)); } LOG.debug("DsbenchmarkListenerProvider created {} listeneres", numListeners); @@ -47,8 +49,8 @@ public class DsbenchmarkListenerProvider { public long getDataChangeCount() { long dataChanges = 0; - for (ListenerRegistration listenerRegistration : listeners) { - dataChanges += listenerRegistration.getInstance().getNumDataChanges(); + for (var listener : listeners) { + dataChanges += listener.getNumDataChanges(); } LOG.debug("DsbenchmarkListenerProvider , total data changes {}", dataChanges); return dataChanges; @@ -57,11 +59,14 @@ public class DsbenchmarkListenerProvider { public long getEventCountAndDestroyListeners() { long totalEvents = 0; - for (ListenerRegistration listenerRegistration : listeners) { - totalEvents += listenerRegistration.getInstance().getNumEvents(); - listenerRegistration.close(); + registrations.forEach(Registration::close); + registrations.clear(); + + for (var listener : listeners) { + totalEvents += listener.getNumEvents(); } listeners.clear(); + LOG.debug("DsbenchmarkListenerProvider destroyed listeneres, total events {}", totalEvents); return totalEvents; } diff --git a/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainBaDelete.java b/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainBaDelete.java index bd947acddb..41b233774a 100644 --- a/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainBaDelete.java +++ b/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainBaDelete.java @@ -12,9 +12,7 @@ import com.google.common.util.concurrent.MoreExecutors; import java.util.concurrent.ExecutionException; import org.opendaylight.dsbenchmark.DatastoreAbstractWriter; 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.WriteTransaction; import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; @@ -24,10 +22,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchm import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.test.exec.OuterList; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.test.exec.OuterListKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.Empty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class TxchainBaDelete extends DatastoreAbstractWriter implements TransactionChainListener { +public class TxchainBaDelete extends DatastoreAbstractWriter implements FutureCallback { private static final Logger LOG = LoggerFactory.getLogger(TxchainBaDelete.class); private final DataBroker bindingDataBroker; @@ -53,7 +52,8 @@ public class TxchainBaDelete extends DatastoreAbstractWriter implements Transact @Override public void executeList() { final LogicalDatastoreType dsType = getDataStoreType(); - final TransactionChain chain = bindingDataBroker.createMergingTransactionChain(this); + final TransactionChain chain = bindingDataBroker.createMergingTransactionChain(); + chain.addCallback(this); WriteTransaction tx = chain.newWriteOnlyTransaction(); int txSubmitted = 0; @@ -104,13 +104,12 @@ public class TxchainBaDelete extends DatastoreAbstractWriter implements Transact } @Override - public void onTransactionChainFailed(final TransactionChain chain, final Transaction transaction, - final Throwable cause) { - LOG.error("Broken chain {} in TxchainBaDelete, transaction {}", chain, transaction.getIdentifier(), cause); + public void onFailure(final Throwable cause) { + LOG.error("Broken chain in TxchainBaDelete", cause); } @Override - public void onTransactionChainSuccessful(final TransactionChain chain) { - LOG.debug("TxchainBaDelete closed successfully, chain {}", chain); + public void onSuccess(final Empty chain) { + LOG.debug("TxchainBaDelete closed successfully"); } } diff --git a/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainBaRead.java b/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainBaRead.java index ed203e72c8..a455995666 100644 --- a/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainBaRead.java +++ b/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainBaRead.java @@ -13,9 +13,6 @@ import java.util.concurrent.ExecutionException; import org.opendaylight.dsbenchmark.DatastoreAbstractWriter; 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.common.api.LogicalDatastoreType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.StartTestInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.StartTestInput.DataStore; @@ -27,7 +24,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class TxchainBaRead extends DatastoreAbstractWriter implements TransactionChainListener { +public class TxchainBaRead extends DatastoreAbstractWriter { private static final Logger LOG = LoggerFactory.getLogger(TxchainBaRead.class); private final DataBroker bindingDataBroker; @@ -92,15 +89,4 @@ public class TxchainBaRead extends DatastoreAbstractWriter implements Transactio } } } - - @Override - public void onTransactionChainFailed(final TransactionChain chain, final Transaction transaction, - final Throwable cause) { - LOG.error("Broken chain {} in TxchainBaDelete, transaction {}", chain, transaction.getIdentifier(), cause); - } - - @Override - public void onTransactionChainSuccessful(final TransactionChain chain) { - LOG.debug("TxchainBaDelete closed successfully, chain {}", chain); - } } diff --git a/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainBaWrite.java b/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainBaWrite.java index 53c9e2fae4..3640f607db 100644 --- a/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainBaWrite.java +++ b/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainBaWrite.java @@ -16,9 +16,6 @@ import java.util.concurrent.ExecutionException; import org.opendaylight.dsbenchmark.BaListBuilder; import org.opendaylight.dsbenchmark.DatastoreAbstractWriter; 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.common.api.CommitInfo; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.StartTestInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.StartTestInput.DataStore; @@ -26,10 +23,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchm import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.TestExec; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.test.exec.OuterList; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.Empty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class TxchainBaWrite extends DatastoreAbstractWriter implements TransactionChainListener { +public class TxchainBaWrite extends DatastoreAbstractWriter implements FutureCallback { private static final Logger LOG = LoggerFactory.getLogger(TxchainBaWrite.class); private final DataBroker dataBroker; @@ -49,7 +47,8 @@ public class TxchainBaWrite extends DatastoreAbstractWriter implements Transacti @Override public void executeList() { - final var chain = dataBroker.createMergingTransactionChain(this); + final var chain = dataBroker.createMergingTransactionChain(); + chain.addCallback(this); final var dsType = getDataStoreType(); var tx = chain.newWriteOnlyTransaction(); @@ -106,14 +105,12 @@ public class TxchainBaWrite extends DatastoreAbstractWriter implements Transacti } @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); } @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"); } } diff --git a/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainDomDelete.java b/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainDomDelete.java index 75dee62673..c0280c6b02 100644 --- a/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainDomDelete.java +++ b/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainDomDelete.java @@ -14,21 +14,20 @@ import org.opendaylight.dsbenchmark.DatastoreAbstractWriter; 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.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.StartTestInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.StartTestInput.DataStore; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.TestExec; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.test.exec.OuterList; +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; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class TxchainDomDelete extends DatastoreAbstractWriter implements DOMTransactionChainListener { +public class TxchainDomDelete extends DatastoreAbstractWriter implements FutureCallback { private static final Logger LOG = LoggerFactory.getLogger(TxchainDomDelete.class); private final DOMDataBroker domDataBroker; @@ -57,7 +56,8 @@ public class TxchainDomDelete extends DatastoreAbstractWriter implements DOMTran final org.opendaylight.yangtools.yang.common.QName olId = QName.create(OuterList.QNAME, "id"); final YangInstanceIdentifier pid = YangInstanceIdentifier.builder().node(TestExec.QNAME).node(OuterList.QNAME).build(); - final DOMTransactionChain chain = domDataBroker.createMergingTransactionChain(this); + final DOMTransactionChain chain = domDataBroker.createMergingTransactionChain(); + chain.addCallback(this); DOMDataTreeWriteTransaction tx = chain.newWriteOnlyTransaction(); int txSubmitted = 0; @@ -108,13 +108,12 @@ public class TxchainDomDelete extends DatastoreAbstractWriter implements DOMTran } @Override - public void onTransactionChainFailed(final DOMTransactionChain chain, final DOMDataTreeTransaction transaction, - final Throwable cause) { - LOG.error("Broken chain {} in TxchainDomDelete, transaction {}", chain, transaction.getIdentifier(), cause); + public void onFailure(final Throwable cause) { + LOG.error("Broken chain in TxchainDomDelete", cause); } @Override - public void onTransactionChainSuccessful(final DOMTransactionChain chain) { - LOG.debug("TxchainDomDelete closed successfully, chain {}", chain); + public void onSuccess(final Empty result) { + LOG.debug("TxchainDomDelete closed successfully"); } } diff --git a/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainDomRead.java b/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainDomRead.java index 5c70edcd6c..cccdb4ecdb 100644 --- a/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainDomRead.java +++ b/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainDomRead.java @@ -14,9 +14,6 @@ import org.opendaylight.dsbenchmark.DatastoreAbstractWriter; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataBroker; import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction; -import org.opendaylight.mdsal.dom.api.DOMDataTreeTransaction; -import org.opendaylight.mdsal.dom.api.DOMTransactionChain; -import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.StartTestInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.StartTestInput.DataStore; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.TestExec; @@ -28,7 +25,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class TxchainDomRead extends DatastoreAbstractWriter implements DOMTransactionChainListener { +public class TxchainDomRead extends DatastoreAbstractWriter { private static final Logger LOG = LoggerFactory.getLogger(TxchainDomRead.class); private final DOMDataBroker domDataBroker; @@ -54,7 +51,7 @@ public class TxchainDomRead extends DatastoreAbstractWriter implements DOMTransa @Override public void executeList() { final LogicalDatastoreType dsType = getDataStoreType(); - final org.opendaylight.yangtools.yang.common.QName olId = QName.create(OuterList.QNAME, "id"); + final QName olId = QName.create(OuterList.QNAME, "id"); final YangInstanceIdentifier pid = YangInstanceIdentifier.builder().node(TestExec.QNAME).node(OuterList.QNAME).build(); @@ -75,15 +72,4 @@ public class TxchainDomRead extends DatastoreAbstractWriter implements DOMTransa } } } - - @Override - public void onTransactionChainFailed(final DOMTransactionChain chain, final DOMDataTreeTransaction transaction, - final Throwable cause) { - LOG.error("Broken chain {} in TxchainDomDelete, transaction {}", chain, transaction.getIdentifier(), cause); - } - - @Override - public void onTransactionChainSuccessful(final DOMTransactionChain chain) { - LOG.debug("TxchainDomDelete closed successfully, chain {}", chain); - } } diff --git a/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainDomWrite.java b/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainDomWrite.java index ae7e1a1dd7..b50a7e0ad1 100644 --- a/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainDomWrite.java +++ b/benchmark/dsbenchmark/src/main/java/org/opendaylight/dsbenchmark/txchain/TxchainDomWrite.java @@ -15,20 +15,18 @@ import org.opendaylight.dsbenchmark.DatastoreAbstractWriter; import org.opendaylight.dsbenchmark.DomListBuilder; import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.mdsal.dom.api.DOMDataBroker; -import org.opendaylight.mdsal.dom.api.DOMDataTreeTransaction; -import org.opendaylight.mdsal.dom.api.DOMTransactionChain; -import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.StartTestInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.StartTestInput.DataStore; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.TestExec; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.dsbenchmark.rev150105.test.exec.OuterList; +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.MapEntryNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class TxchainDomWrite extends DatastoreAbstractWriter implements DOMTransactionChainListener { +public class TxchainDomWrite extends DatastoreAbstractWriter implements FutureCallback { private static final Logger LOG = LoggerFactory.getLogger(TxchainDomWrite.class); private final DOMDataBroker dataBroker; @@ -50,7 +48,8 @@ public class TxchainDomWrite extends DatastoreAbstractWriter implements DOMTrans public void executeList() { final var dsType = getDataStoreType(); final var pid = YangInstanceIdentifier.of(TestExec.QNAME, OuterList.QNAME); - final var chain = dataBroker.createMergingTransactionChain(this); + final var chain = dataBroker.createMergingTransactionChain(); + chain.addCallback(this); var tx = chain.newWriteOnlyTransaction(); int txSubmitted = 0; @@ -109,13 +108,12 @@ public class TxchainDomWrite extends DatastoreAbstractWriter implements DOMTrans } @Override - public void onTransactionChainFailed(final DOMTransactionChain chain, final DOMDataTreeTransaction transaction, - final Throwable cause) { - LOG.error("Broken chain {} in TxchainDomWrite, transaction {}", chain, transaction.getIdentifier(), cause); + public void onFailure(final Throwable cause) { + LOG.error("Broken chain in TxchainDomWrite", cause); } @Override - public void onTransactionChainSuccessful(final DOMTransactionChain chain) { - LOG.debug("Chain {} closed successfully", chain); + public void onSuccess(final Empty result) { + LOG.debug("Chain closed successfully"); } } diff --git a/benchmark/rpcbenchmark/src/main/java/rpcbenchmark/impl/GlobalBindingRTCClient.java b/benchmark/rpcbenchmark/src/main/java/rpcbenchmark/impl/GlobalBindingRTCClient.java index ba15d6305d..86e3a097bf 100644 --- a/benchmark/rpcbenchmark/src/main/java/rpcbenchmark/impl/GlobalBindingRTCClient.java +++ b/benchmark/rpcbenchmark/src/main/java/rpcbenchmark/impl/GlobalBindingRTCClient.java @@ -9,19 +9,15 @@ package rpcbenchmark.impl; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; -import java.util.Map; import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; import java.util.concurrent.atomic.AtomicLong; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.rpcbench.payload.rev150702.GlobalRpcBench; import org.opendaylight.yang.gen.v1.rpcbench.payload.rev150702.GlobalRpcBenchInput; import org.opendaylight.yang.gen.v1.rpcbench.payload.rev150702.GlobalRpcBenchInputBuilder; -import org.opendaylight.yang.gen.v1.rpcbench.payload.rev150702.GlobalRpcBenchOutput; import org.opendaylight.yang.gen.v1.rpcbench.payload.rev150702.payload.Payload; import org.opendaylight.yang.gen.v1.rpcbench.payload.rev150702.payload.PayloadBuilder; import org.opendaylight.yang.gen.v1.rpcbench.payload.rev150702.payload.PayloadKey; -import org.opendaylight.yangtools.yang.common.RpcResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,8 +40,8 @@ public class GlobalBindingRTCClient implements RTCClient { return rpcError.get(); } - public GlobalBindingRTCClient(final RpcConsumerRegistry registry, final int inSize) { - this.globalRpcBench = registry.getRpc(GlobalRpcBench.class); + public GlobalBindingRTCClient(final RpcService rpcService, final int inSize) { + globalRpcBench = rpcService.getRpc(GlobalRpcBench.class); this.inSize = inSize; Builder listVals = ImmutableMap.builderWithExpectedSize(inSize); @@ -62,12 +58,12 @@ public class GlobalBindingRTCClient implements RTCClient { int error = 0; for (int i = 0; i < iterations; i++) { - Future> output = globalRpcBench.invoke(inVal); + final var output = globalRpcBench.invoke(inVal); try { - RpcResult rpcResult = output.get(); + final var rpcResult = output.get(); if (rpcResult.isSuccessful()) { - Map retVal = rpcResult.getResult().getPayload(); + final var retVal = rpcResult.getResult().getPayload(); if (retVal.size() == inSize) { ok++; } @@ -90,5 +86,4 @@ public class GlobalBindingRTCClient implements RTCClient { // TODO Auto-generated method stub } - } diff --git a/benchmark/rpcbenchmark/src/main/java/rpcbenchmark/impl/RoutedBindingRTClient.java b/benchmark/rpcbenchmark/src/main/java/rpcbenchmark/impl/RoutedBindingRTClient.java index 6112a0e3dd..bd5e83e8bf 100644 --- a/benchmark/rpcbenchmark/src/main/java/rpcbenchmark/impl/RoutedBindingRTClient.java +++ b/benchmark/rpcbenchmark/src/main/java/rpcbenchmark/impl/RoutedBindingRTClient.java @@ -16,7 +16,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.atomic.AtomicLong; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.rpcbench.payload.rev150702.RoutedRpcBench; import org.opendaylight.yang.gen.v1.rpcbench.payload.rev150702.RoutedRpcBenchInput; import org.opendaylight.yang.gen.v1.rpcbench.payload.rev150702.RoutedRpcBenchInputBuilder; @@ -37,9 +37,9 @@ public class RoutedBindingRTClient implements RTCClient { private final List inVal = new ArrayList<>(); private final int inSize; - public RoutedBindingRTClient(final RpcConsumerRegistry registry, final int inSize, + public RoutedBindingRTClient(final RpcService rpcService, final int inSize, final List> routeIid) { - this.routedRpcBench = registry.getRpc(RoutedRpcBench.class); + routedRpcBench = rpcService.getRpc(RoutedRpcBench.class); this.inSize = inSize; Builder listVals = ImmutableMap.builderWithExpectedSize(inSize); diff --git a/benchmark/rpcbenchmark/src/main/java/rpcbenchmark/impl/RpcbenchmarkProvider.java b/benchmark/rpcbenchmark/src/main/java/rpcbenchmark/impl/RpcbenchmarkProvider.java index 44c9e71272..356a034b54 100644 --- a/benchmark/rpcbenchmark/src/main/java/rpcbenchmark/impl/RpcbenchmarkProvider.java +++ b/benchmark/rpcbenchmark/src/main/java/rpcbenchmark/impl/RpcbenchmarkProvider.java @@ -22,8 +22,8 @@ import java.util.concurrent.atomic.AtomicReference; import javax.annotation.PreDestroy; import javax.inject.Inject; import javax.inject.Singleton; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; import org.opendaylight.mdsal.binding.api.RpcProviderService; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.rpcbench.payload.rev150702.RpcbenchRpcRoutes; import org.opendaylight.yang.gen.v1.rpcbench.payload.rev150702.rpcbench.rpc.routes.RpcRoute; import org.opendaylight.yang.gen.v1.rpcbench.payload.rev150702.rpcbench.rpc.routes.RpcRouteKey; @@ -59,14 +59,14 @@ public final class RpcbenchmarkProvider implements AutoCloseable { private final AtomicReference execStatus = new AtomicReference<>(ExecStatus.Idle); private final RpcProviderService providerRegistry; - private final RpcConsumerRegistry consumerRegistry; + private final RpcService consumerRegistry; private final GlobalBindingRTCServer globalServer; private final Registration reg; @Inject @Activate public RpcbenchmarkProvider(@Reference final RpcProviderService providerRegistry, - @Reference final RpcConsumerRegistry consumerRegistry) { + @Reference final RpcService consumerRegistry) { this.providerRegistry = requireNonNull(providerRegistry); this.consumerRegistry = requireNonNull(consumerRegistry); globalServer = new GlobalBindingRTCServer(providerRegistry); diff --git a/bundle-parent/pom.xml b/bundle-parent/pom.xml index c231ea6e0c..75dc6966f6 100644 --- a/bundle-parent/pom.xml +++ b/bundle-parent/pom.xml @@ -10,8 +10,8 @@ 4.0.0 org.opendaylight.mdsal - dom-parent - 12.0.4 + bundle-parent + 13.0.0 diff --git a/docs/pom.xml b/docs/pom.xml index bf9ac75932..746b665c0d 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -212,8 +212,8 @@ https://commons.apache.org/proper/commons-lang/javadocs/api-release/ https://www.javadoc.io/doc/org.opendaylight.odlparent/odlparent-docs/13.0.10/ - https://www.javadoc.io/doc/org.opendaylight.yangtools/yangtools-docs/11.0.5/ - https://www.javadoc.io/doc/org.opendaylight.mdsal/mdsal-docs/12.0.4/ + https://www.javadoc.io/doc/org.opendaylight.yangtools/yangtools-docs/13.0.1/ + https://www.javadoc.io/doc/org.opendaylight.mdsal/mdsal-docs/13.0.0/ diff --git a/features/odl-clustering-test-app/src/main/feature/feature.xml b/features/odl-clustering-test-app/src/main/feature/feature.xml index c95d9943cf..69d3b61ee2 100644 --- a/features/odl-clustering-test-app/src/main/feature/feature.xml +++ b/features/odl-clustering-test-app/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-mdsal-model-rfc6991 + odl-mdsal-model-rfc6991 diff --git a/features/odl-controller-blueprint/src/main/feature/feature.xml b/features/odl-controller-blueprint/src/main/feature/feature.xml index 668fc452b0..82dfaca522 100644 --- a/features/odl-controller-blueprint/src/main/feature/feature.xml +++ b/features/odl-controller-blueprint/src/main/feature/feature.xml @@ -8,10 +8,10 @@ --> - odl-yangtools-codec - odl-mdsal-binding-api - odl-mdsal-binding-runtime - odl-mdsal-dom-api + odl-yangtools-codec + odl-mdsal-binding-api + odl-mdsal-binding-runtime + odl-mdsal-dom-api mvn:org.opendaylight.controller/blueprint/${project.version} diff --git a/features/odl-controller-broker-local/src/main/feature/feature.xml b/features/odl-controller-broker-local/src/main/feature/feature.xml index 1c001649b9..2068ab79f9 100644 --- a/features/odl-controller-broker-local/src/main/feature/feature.xml +++ b/features/odl-controller-broker-local/src/main/feature/feature.xml @@ -8,9 +8,9 @@ --> - odl-mdsal-dom - odl-mdsal-eos-binding - odl-mdsal-eos-dom - odl-mdsal-singleton-dom + odl-mdsal-dom + odl-mdsal-eos-binding + odl-mdsal-eos-dom + odl-mdsal-singleton-dom diff --git a/features/odl-controller-mdsal-common/src/main/feature/feature.xml b/features/odl-controller-mdsal-common/src/main/feature/feature.xml index 2ecaff2ca8..7ae191c7be 100644 --- a/features/odl-controller-mdsal-common/src/main/feature/feature.xml +++ b/features/odl-controller-mdsal-common/src/main/feature/feature.xml @@ -8,7 +8,7 @@ --> - odl-mdsal-common - odl-mdsal-binding-runtime + odl-mdsal-common + odl-mdsal-binding-runtime diff --git a/features/odl-mdsal-broker/src/main/feature/feature.xml b/features/odl-mdsal-broker/src/main/feature/feature.xml index 75bc4404ef..ffa724ca99 100644 --- a/features/odl-mdsal-broker/src/main/feature/feature.xml +++ b/features/odl-mdsal-broker/src/main/feature/feature.xml @@ -8,7 +8,7 @@ --> - odl-mdsal-singleton-dom - odl-mdsal-eos-binding + odl-mdsal-singleton-dom + odl-mdsal-eos-binding diff --git a/features/odl-mdsal-clustering-commons/src/main/feature/feature.xml b/features/odl-mdsal-clustering-commons/src/main/feature/feature.xml index 83b63b4059..f4034164f1 100644 --- a/features/odl-mdsal-clustering-commons/src/main/feature/feature.xml +++ b/features/odl-mdsal-clustering-commons/src/main/feature/feature.xml @@ -11,7 +11,7 @@ odl-apache-commons-lang3 odl-dropwizard-metrics odl-servlet-api - odl-yangtools-data - odl-yangtools-codec + odl-yangtools-data + odl-yangtools-codec diff --git a/features/odl-mdsal-distributed-datastore/src/main/feature/feature.xml b/features/odl-mdsal-distributed-datastore/src/main/feature/feature.xml index 269402109f..bf7451b93d 100644 --- a/features/odl-mdsal-distributed-datastore/src/main/feature/feature.xml +++ b/features/odl-mdsal-distributed-datastore/src/main/feature/feature.xml @@ -9,10 +9,10 @@ odl-apache-commons-text - odl-yangtools-codec - odl-mdsal-eos-dom - odl-mdsal-dom-broker - odl-mdsal-binding-dom-adapter + odl-yangtools-codec + odl-mdsal-eos-dom + odl-mdsal-dom-broker + odl-mdsal-binding-dom-adapter mvn:org.opendaylight.controller/sal-clustering-config/${project.version}/xml/akkaconf diff --git a/features/odl-toaster/src/main/feature/feature.xml b/features/odl-toaster/src/main/feature/feature.xml index a13fbd7ce1..9a6b3e79d1 100644 --- a/features/odl-toaster/src/main/feature/feature.xml +++ b/features/odl-toaster/src/main/feature/feature.xml @@ -8,6 +8,6 @@ --> - odl-mdsal-binding-runtime + odl-mdsal-binding-runtime diff --git a/opendaylight/blueprint/pom.xml b/opendaylight/blueprint/pom.xml index 4eec604143..0f3a6bbbd6 100644 --- a/opendaylight/blueprint/pom.xml +++ b/opendaylight/blueprint/pom.xml @@ -27,14 +27,14 @@ org.opendaylight.yangtools yangtools-artifacts - 11.0.5 + 13.0.1 pom import org.opendaylight.mdsal mdsal-artifacts - 12.0.4 + 13.0.0 pom import diff --git a/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/BindingContext.java b/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/BindingContext.java index 86d7c45379..67905aeaf8 100644 --- a/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/BindingContext.java +++ b/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/BindingContext.java @@ -24,13 +24,16 @@ import org.opendaylight.yangtools.yang.binding.Key; import org.opendaylight.yangtools.yang.binding.KeyAware; import org.opendaylight.yangtools.yang.binding.contract.Naming; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream; -import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder; +import org.opendaylight.yangtools.yang.data.spi.node.ImmutableNodes; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; @@ -109,8 +112,8 @@ public abstract class BindingContext { } @Override - public NormalizedNode newDefaultNode(final SchemaTreeInference dataSchema) { - return ImmutableNodes.containerNode(bindingQName); + public ContainerNode newDefaultNode(final SchemaTreeInference dataSchema) { + return ImmutableNodes.newContainerBuilder().withNodeIdentifier(new NodeIdentifier(bindingQName)).build(); } } @@ -149,7 +152,10 @@ public abstract class BindingContext { checkArgument(keys.size() == 1, "Expected only 1 key for list %s", appConfigBindingClass); QName listKeyQName = keys.iterator().next(); - return ImmutableNodes.mapEntryBuilder(bindingQName, listKeyQName, appConfigListKeyValue).build(); + return ImmutableNodes.newMapEntryBuilder() + .withNodeIdentifier(NodeIdentifierWithPredicates.of(bindingQName, listKeyQName, appConfigListKeyValue)) + .withChild(ImmutableNodes.leafNode(listKeyQName, appConfigListKeyValue)) + .build(); } } } diff --git a/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/DataStoreAppConfigMetadata.java b/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/DataStoreAppConfigMetadata.java index 1e105bd717..bb3c55a1e3 100644 --- a/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/DataStoreAppConfigMetadata.java +++ b/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/DataStoreAppConfigMetadata.java @@ -32,7 +32,7 @@ import org.opendaylight.mdsal.binding.api.ReadTransaction; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMSchemaService; -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.DataObject; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -70,7 +70,7 @@ public class DataStoreAppConfigMetadata extends AbstractDependentComponentFactor private final AtomicBoolean readingInitialAppConfig = new AtomicBoolean(true); private volatile BindingContext bindingContext; - private volatile ListenerRegistration appConfigChangeListenerReg; + private volatile Registration appConfigChangeListenerReg; private volatile DataObject currentAppConfig; // Note: the BindingNormalizedNodeSerializer interface is annotated as deprecated because there's an @@ -148,7 +148,7 @@ public class DataStoreAppConfigMetadata extends AbstractDependentComponentFactor // the data isn't present, we won't get an initial DTCN update so the read will indicate the data // isn't present. - DataTreeIdentifier dataTreeId = DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, + DataTreeIdentifier dataTreeId = DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, bindingContext.appConfigPath); appConfigChangeListenerReg = dataBroker.registerDataTreeChangeListener(dataTreeId, (ClusteredDataTreeChangeListener) this::onAppConfigChanged); diff --git a/opendaylight/md-sal/cds-access-api/pom.xml b/opendaylight/md-sal/cds-access-api/pom.xml index 9854427147..c3a6048fc3 100644 --- a/opendaylight/md-sal/cds-access-api/pom.xml +++ b/opendaylight/md-sal/cds-access-api/pom.xml @@ -12,6 +12,11 @@ bundle + + com.github.spotbugs + spotbugs-annotations + true + com.google.guava guava diff --git a/opendaylight/md-sal/eos-dom-akka/pom.xml b/opendaylight/md-sal/eos-dom-akka/pom.xml index a0350ad30a..5fba17f73a 100644 --- a/opendaylight/md-sal/eos-dom-akka/pom.xml +++ b/opendaylight/md-sal/eos-dom-akka/pom.xml @@ -22,6 +22,11 @@ bundle + + com.github.spotbugs + spotbugs-annotations + true + com.google.guava guava @@ -126,12 +131,12 @@ org.opendaylight.mdsal - mdsal-singleton-common-api + mdsal-singleton-api test org.opendaylight.mdsal - mdsal-singleton-dom-impl + mdsal-singleton-impl test diff --git a/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/AkkaEntityOwnershipService.java b/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/AkkaEntityOwnershipService.java index e4db596f8b..714273375c 100644 --- a/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/AkkaEntityOwnershipService.java +++ b/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/AkkaEntityOwnershipService.java @@ -59,9 +59,7 @@ import org.opendaylight.mdsal.binding.dom.codec.api.BindingInstanceIdentifierCod import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException; import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState; import org.opendaylight.mdsal.eos.dom.api.DOMEntity; -import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipCandidateRegistration; import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListener; -import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration; import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.entity.owners.norev.GetEntities; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.entity.owners.norev.GetEntitiesInput; @@ -170,7 +168,7 @@ public class AkkaEntityOwnershipService implements DOMEntityOwnershipService, Da } @Override - public DOMEntityOwnershipCandidateRegistration registerCandidate(final DOMEntity entity) + public Registration registerCandidate(final DOMEntity entity) throws CandidateAlreadyRegisteredException { if (!registeredEntities.add(entity)) { throw new CandidateAlreadyRegisteredException(entity); @@ -184,8 +182,7 @@ public class AkkaEntityOwnershipService implements DOMEntityOwnershipService, Da } @Override - public DOMEntityOwnershipListenerRegistration registerListener(final String entityType, - final DOMEntityOwnershipListener listener) { + public Registration registerListener(final String entityType, final DOMEntityOwnershipListener listener) { LOG.debug("Registering listener {} for type {}", listener, entityType); listenerRegistry.tell(new RegisterListener(entityType, listener)); diff --git a/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/CandidateRegistration.java b/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/CandidateRegistration.java index 56a2f099f6..fd80ee1c56 100644 --- a/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/CandidateRegistration.java +++ b/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/CandidateRegistration.java @@ -10,11 +10,9 @@ package org.opendaylight.controller.eos.akka; import static java.util.Objects.requireNonNull; import org.opendaylight.mdsal.eos.dom.api.DOMEntity; -import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipCandidateRegistration; import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; -final class CandidateRegistration extends AbstractObjectRegistration - implements DOMEntityOwnershipCandidateRegistration { +final class CandidateRegistration extends AbstractObjectRegistration { private final AkkaEntityOwnershipService service; CandidateRegistration(final DOMEntity instance, final AkkaEntityOwnershipService service) { diff --git a/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/ListenerRegistration.java b/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/ListenerRegistration.java index 435babe8ec..8d101c24c6 100644 --- a/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/ListenerRegistration.java +++ b/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/ListenerRegistration.java @@ -12,11 +12,9 @@ import static java.util.Objects.requireNonNull; import com.google.common.base.MoreObjects; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListener; -import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration; import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; -final class ListenerRegistration extends AbstractObjectRegistration - implements DOMEntityOwnershipListenerRegistration { +final class ListenerRegistration extends AbstractObjectRegistration { private final AkkaEntityOwnershipService service; private final @NonNull String entityType; @@ -27,8 +25,7 @@ final class ListenerRegistration extends AbstractObjectRegistration private void triggerNoOwnerNotification() { LOG.debug("Triggering initial notification without an owner for: {}", entity); - - toNotify.tell(new EntityOwnerChanged(new DOMEntityOwnershipChange( - entity, EntityOwnershipChangeState.REMOTE_OWNERSHIP_LOST_NO_OWNER))); + toNotify.tell(new EntityOwnerChanged(entity, EntityOwnershipStateChange.REMOTE_OWNERSHIP_LOST_NO_OWNER, false)); } private Behavior onOwnerChanged(final OwnerChanged ownerChanged) { @@ -133,8 +130,8 @@ public class SingleEntityListenerActor extends AbstractBehavior currentOwner = newOwner; - toNotify.tell(new EntityOwnerChanged(new DOMEntityOwnershipChange( - entity, EntityOwnershipChangeState.from(wasOwner, isOwner, hasOwner)))); + toNotify.tell(new EntityOwnerChanged(entity, EntityOwnershipStateChange.from(wasOwner, isOwner, hasOwner), + false)); } private void handleOwnerLost(final Replicator.Deleted> changed) { @@ -143,7 +140,6 @@ public class SingleEntityListenerActor extends AbstractBehavior LOG.debug("Owner lost for entity:{}, currentOwner: {}, wasOwner: {}", entity, currentOwner, wasOwner); currentOwner = ""; - toNotify.tell(new EntityOwnerChanged(new DOMEntityOwnershipChange( - entity, EntityOwnershipChangeState.from(wasOwner, false, false)))); + toNotify.tell(new EntityOwnerChanged(entity, EntityOwnershipStateChange.from(wasOwner, false, false), false)); } } diff --git a/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/registry/listener/type/EntityTypeListenerActor.java b/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/registry/listener/type/EntityTypeListenerActor.java index e97fe77a2f..7e445c581c 100644 --- a/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/registry/listener/type/EntityTypeListenerActor.java +++ b/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/registry/listener/type/EntityTypeListenerActor.java @@ -110,8 +110,7 @@ public class EntityTypeListenerActor extends AbstractBehavior onOwnerChanged(final EntityOwnerChanged rsp) { LOG.debug("{} : Entity-type: {} listener, owner change: {}", localMember, entityType, rsp); - - listener.ownershipChanged(rsp.getOwnershipChange()); + listener.ownershipChanged(rsp.entity(), rsp.change(), false); return this; } diff --git a/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/registry/listener/type/command/EntityOwnerChanged.java b/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/registry/listener/type/command/EntityOwnerChanged.java index 02d0e2fe50..ee0f54f431 100644 --- a/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/registry/listener/type/command/EntityOwnerChanged.java +++ b/opendaylight/md-sal/eos-dom-akka/src/main/java/org/opendaylight/controller/eos/akka/registry/listener/type/command/EntityOwnerChanged.java @@ -10,25 +10,45 @@ package org.opendaylight.controller.eos.akka.registry.listener.type.command; import static java.util.Objects.requireNonNull; import com.google.common.base.MoreObjects; -import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipChange; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.opendaylight.controller.eos.akka.registry.listener.type.EntityTypeListenerActor; +import org.opendaylight.mdsal.eos.common.api.EntityOwnershipStateChange; +import org.opendaylight.mdsal.eos.dom.api.DOMEntity; /** - * Notification sent to EntityTypeListenerActor when there is an owner change for an Entity of a given type. + * Notification sent to {@link EntityTypeListenerActor} when there is an owner change for an Entity of a given type. */ +@NonNullByDefault public final class EntityOwnerChanged extends TypeListenerCommand { - private final @NonNull DOMEntityOwnershipChange ownershipChange; + private final DOMEntity entity; + private final EntityOwnershipStateChange change; + private final boolean inJeopardy; - public EntityOwnerChanged(final DOMEntityOwnershipChange ownershipChange) { - this.ownershipChange = requireNonNull(ownershipChange); + public EntityOwnerChanged(final DOMEntity entity, final EntityOwnershipStateChange change, + final boolean inJeopardy) { + this.entity = requireNonNull(entity); + this.change = requireNonNull(change); + this.inJeopardy = requireNonNull(inJeopardy); } - public @NonNull DOMEntityOwnershipChange getOwnershipChange() { - return ownershipChange; + public DOMEntity entity() { + return entity; + } + + public EntityOwnershipStateChange change() { + return change; + } + + public boolean inJeopardy() { + return inJeopardy; } @Override public String toString() { - return MoreObjects.toStringHelper(this).add("ownershipChange", ownershipChange).toString(); + return MoreObjects.toStringHelper(this) + .add("entity", entity) + .add("change", change) + .add("inJeopardy", inJeopardy) + .toString(); } } diff --git a/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/AbstractNativeEosTest.java b/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/AbstractNativeEosTest.java index c4e97d60cb..6adba42c09 100644 --- a/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/AbstractNativeEosTest.java +++ b/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/AbstractNativeEosTest.java @@ -50,14 +50,15 @@ import org.opendaylight.controller.eos.akka.registry.candidate.CandidateRegistry import org.opendaylight.controller.eos.akka.registry.candidate.command.CandidateRegistryCommand; import org.opendaylight.controller.eos.akka.registry.candidate.command.RegisterCandidate; import org.opendaylight.controller.eos.akka.registry.candidate.command.UnregisterCandidate; +import org.opendaylight.controller.eos.akka.registry.listener.type.command.EntityOwnerChanged; import org.opendaylight.controller.eos.akka.registry.listener.type.command.RegisterListener; import org.opendaylight.controller.eos.akka.registry.listener.type.command.TypeListenerRegistryCommand; import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext; import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator; import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeGenerator; import org.opendaylight.mdsal.binding.runtime.spi.BindingRuntimeHelpers; +import org.opendaylight.mdsal.eos.common.api.EntityOwnershipStateChange; import org.opendaylight.mdsal.eos.dom.api.DOMEntity; -import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipChange; import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -336,13 +337,13 @@ public abstract class AbstractNativeEosTest { await().until(() -> !listener.getChanges().isEmpty()); await().atMost(Duration.ofSeconds(10)).untilAsserted(() -> { - final List changes = listener.getChanges(); - final DOMEntityOwnershipChange domEntityOwnershipChange = listener.getChanges().get(changes.size() - 1); - assertEquals(entity, domEntityOwnershipChange.getEntity()); + final var changes = listener.getChanges(); + final var domEntityOwnershipChange = listener.getChanges().get(changes.size() - 1); + assertEquals(entity, domEntityOwnershipChange.entity()); - assertEquals(hasOwner, domEntityOwnershipChange.getState().hasOwner()); - assertEquals(isOwner, domEntityOwnershipChange.getState().isOwner()); - assertEquals(wasOwner, domEntityOwnershipChange.getState().wasOwner()); + assertEquals(hasOwner, domEntityOwnershipChange.change().hasOwner()); + assertEquals(isOwner, domEntityOwnershipChange.change().isOwner()); + assertEquals(wasOwner, domEntityOwnershipChange.change().wasOwner()); }); } @@ -415,11 +416,9 @@ public abstract class AbstractNativeEosTest { } protected static final class MockEntityOwnershipListener implements DOMEntityOwnershipListener { - - private final Logger log; - - private final List changes = new ArrayList<>(); + private final List changes = new ArrayList<>(); private final String member; + private final Logger log; public MockEntityOwnershipListener(final String member) { log = LoggerFactory.getLogger("EOS-listener-" + member); @@ -427,13 +426,15 @@ public abstract class AbstractNativeEosTest { } @Override - public void ownershipChanged(final DOMEntityOwnershipChange ownershipChange) { - log.info("{} Received ownershipCHanged: {}", member, ownershipChange); + public void ownershipChanged(final DOMEntity entity, final EntityOwnershipStateChange change, + final boolean inJeopardy) { + final var changed = new EntityOwnerChanged(entity, change, inJeopardy); + log.info("{} Received ownershipCHanged: {}", member, changed); log.info("{} changes: {}", member, changes.size()); - changes.add(ownershipChange); + changes.add(changed); } - public List getChanges() { + public List getChanges() { return changes; } diff --git a/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/AkkaEntityOwnershipServiceTest.java b/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/AkkaEntityOwnershipServiceTest.java index 522eb55dc7..652102f903 100644 --- a/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/AkkaEntityOwnershipServiceTest.java +++ b/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/AkkaEntityOwnershipServiceTest.java @@ -26,6 +26,7 @@ import akka.cluster.ddata.typed.javadsl.DistributedData; import akka.cluster.ddata.typed.javadsl.Replicator; import com.typesafe.config.ConfigFactory; import java.time.Duration; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.concurrent.CompletionStage; @@ -40,8 +41,6 @@ import org.opendaylight.controller.eos.akka.registry.candidate.CandidateRegistry import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException; import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState; import org.opendaylight.mdsal.eos.dom.api.DOMEntity; -import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipCandidateRegistration; -import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration; import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.entity.owners.norev.EntityName; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.entity.owners.norev.EntityType; @@ -53,6 +52,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controll 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.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; +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.api.YangInstanceIdentifier.NodeIdentifier; @@ -88,9 +88,9 @@ public class AkkaEntityOwnershipServiceTest extends AbstractNativeEosTest { final YangInstanceIdentifier entityId = YangInstanceIdentifier.of(QNAME); final DOMEntity entity = new DOMEntity(ENTITY_TYPE, entityId); - final DOMEntityOwnershipCandidateRegistration reg = service.registerCandidate(entity); + final Registration reg = service.registerCandidate(entity); + assertNotNull(reg); - verifyEntityOwnershipCandidateRegistration(entity, reg); verifyEntityCandidateRegistered(ENTITY_TYPE, entityId, "member-1"); try { @@ -102,9 +102,9 @@ public class AkkaEntityOwnershipServiceTest extends AbstractNativeEosTest { } final DOMEntity entity2 = new DOMEntity(ENTITY_TYPE2, entityId); - final DOMEntityOwnershipCandidateRegistration reg2 = service.registerCandidate(entity2); + final Registration reg2 = service.registerCandidate(entity2); - verifyEntityOwnershipCandidateRegistration(entity2, reg2); + assertNotNull(reg2); verifyEntityCandidateRegistered(ENTITY_TYPE2, entityId, "member-1"); } @@ -113,9 +113,9 @@ public class AkkaEntityOwnershipServiceTest extends AbstractNativeEosTest { final YangInstanceIdentifier entityId = YangInstanceIdentifier.of(QNAME); final DOMEntity entity = new DOMEntity(ENTITY_TYPE, entityId); - final DOMEntityOwnershipCandidateRegistration reg = service.registerCandidate(entity); + final Registration reg = service.registerCandidate(entity); + assertNotNull(reg); - verifyEntityOwnershipCandidateRegistration(entity, reg); verifyEntityCandidateRegistered(ENTITY_TYPE, entityId, "member-1"); reg.close(); @@ -132,13 +132,11 @@ public class AkkaEntityOwnershipServiceTest extends AbstractNativeEosTest { final DOMEntity entity = new DOMEntity(ENTITY_TYPE, entityId); final MockEntityOwnershipListener listener = new MockEntityOwnershipListener("member-1"); - final DOMEntityOwnershipListenerRegistration reg = service.registerListener(entity.getType(), listener); + final Registration reg = service.registerListener(entity.getType(), listener); assertNotNull("EntityOwnershipListenerRegistration null", reg); - assertEquals("getEntityType", entity.getType(), reg.getEntityType()); - assertEquals("getInstance", listener, reg.getInstance()); - final DOMEntityOwnershipCandidateRegistration candidate = service.registerCandidate(entity); + final Registration candidate = service.registerCandidate(entity); verifyListenerState(listener, entity, true, true, false); final int changes = listener.getChanges().size(); @@ -157,7 +155,7 @@ public class AkkaEntityOwnershipServiceTest extends AbstractNativeEosTest { public void testGetOwnershipState() throws Exception { final DOMEntity entity = new DOMEntity(ENTITY_TYPE, "one"); - final DOMEntityOwnershipCandidateRegistration registration = service.registerCandidate(entity); + final Registration registration = service.registerCandidate(entity); verifyGetOwnershipState(service, entity, EntityOwnershipState.IS_OWNER); final RunningContext runningContext = service.getRunningContext(); @@ -197,40 +195,41 @@ public class AkkaEntityOwnershipServiceTest extends AbstractNativeEosTest { final DOMEntity entity = new DOMEntity(ENTITY_TYPE, entityId); - final DOMEntityOwnershipCandidateRegistration reg = service.registerCandidate(entity); + final Registration reg = service.registerCandidate(entity); - verifyEntityOwnershipCandidateRegistration(entity, reg); + assertNotNull(reg); verifyEntityCandidateRegistered(ENTITY_TYPE, entityId, "member-1"); - var getEntityResult = service.getEntity(new GetEntityInputBuilder() + var result = service.getEntity(new GetEntityInputBuilder() .setName(new EntityName(CODEC_CONTEXT.fromYangInstanceIdentifier(entityId))) .setType(new EntityType(ENTITY_TYPE)) .build()) - .get(); + .get() + .getResult(); - assertEquals(getEntityResult.getResult().getOwnerNode().getValue(), "member-1"); - assertEquals(getEntityResult.getResult().getCandidateNodes().get(0).getValue(), "member-1"); + assertEquals(result.getOwnerNode().getValue(), "member-1"); + assertEquals(result.getCandidateNodes().get(0).getValue(), "member-1"); // we should not be able to retrieve the entity when using string final String entityPathEncoded = "/network-topology:network-topology/topology[topology-id='test']/node[node-id='test://test-node']"; - getEntityResult = service.getEntity(new GetEntityInputBuilder() - .setName(new EntityName(entityPathEncoded)) - .setType(new EntityType(ENTITY_TYPE)) - .build()) - .get(); + result = service.getEntity(new GetEntityInputBuilder() + .setName(new EntityName(entityPathEncoded)) + .setType(new EntityType(ENTITY_TYPE)) + .build()) + .get() + .getResult(); - assertNull(getEntityResult.getResult().getOwnerNode()); - assertTrue(getEntityResult.getResult().getCandidateNodes().isEmpty()); + assertNull(result.getOwnerNode()); + assertEquals(List.of(), result.getCandidateNodes()); final var getEntitiesResult = service.getEntities(new GetEntitiesInputBuilder().build()).get().getResult(); - - assertEquals(getEntitiesResult.getEntities().size(), 1); - assertTrue(getEntitiesResult.getEntities().get(new EntitiesKey( - new EntityName(CODEC_CONTEXT.fromYangInstanceIdentifier(entityId)), new EntityType(ENTITY_TYPE))) - .getCandidateNodes().contains(new NodeName("member-1"))); - assertTrue(getEntitiesResult.getEntities().get(new EntitiesKey( + final var entities = getEntitiesResult.nonnullEntities(); + assertEquals(1, entities.size()); + assertTrue(entities.get(new EntitiesKey(new EntityName(CODEC_CONTEXT.fromYangInstanceIdentifier(entityId)), + new EntityType(ENTITY_TYPE))).getCandidateNodes().contains(new NodeName("member-1"))); + assertTrue(entities.get(new EntitiesKey( new EntityName(CODEC_CONTEXT.fromYangInstanceIdentifier(entityId)), new EntityType(ENTITY_TYPE))) .getOwnerNode().getValue().equals("member-1")); @@ -302,10 +301,4 @@ public class AkkaEntityOwnershipServiceTest extends AbstractNativeEosTest { return success.get(CandidateRegistry.KEY).getEntries(); } - - private static void verifyEntityOwnershipCandidateRegistration(final DOMEntity entity, - final DOMEntityOwnershipCandidateRegistration reg) { - assertNotNull("EntityOwnershipCandidateRegistration null", reg); - assertEquals("getInstance", entity, reg.getInstance()); - } } diff --git a/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/EntityRpcHandlerTest.java b/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/EntityRpcHandlerTest.java index 78a77aff15..28991c1e51 100644 --- a/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/EntityRpcHandlerTest.java +++ b/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/EntityRpcHandlerTest.java @@ -26,7 +26,6 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.opendaylight.mdsal.eos.dom.api.DOMEntity; -import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipCandidateRegistration; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.entity.owners.norev.EntityName; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.entity.owners.norev.EntityType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.entity.owners.norev.GetEntitiesInputBuilder; @@ -37,6 +36,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controll 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.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; +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.api.YangInstanceIdentifier.NodeIdentifier; @@ -101,7 +101,7 @@ public class EntityRpcHandlerTest extends AbstractNativeEosTest { final DOMEntity entity = new DOMEntity(ENTITY_TYPE, entityId); - final DOMEntityOwnershipCandidateRegistration reg = service1.registerCandidate(entity); + final Registration reg = service1.registerCandidate(entity); await().untilAsserted(() -> { final var getEntityResult = service1.getEntity(new GetEntityInputBuilder() @@ -117,16 +117,16 @@ public class EntityRpcHandlerTest extends AbstractNativeEosTest { // immediately, so that the rpc actor retries with distributed-data asap await().atMost(Duration.ofSeconds(2)).untilAsserted(() -> { final var getEntitiesResult = service2.getEntities(new GetEntitiesInputBuilder().build()).get().getResult(); - - assertEquals(getEntitiesResult.getEntities().size(), 1); - assertTrue(getEntitiesResult.getEntities().get(new EntitiesKey( - new EntityName(CODEC_CONTEXT.fromYangInstanceIdentifier(entityId)), - new EntityType(ENTITY_TYPE))) - .getCandidateNodes().contains(new NodeName("member-1"))); - assertTrue(getEntitiesResult.getEntities().get(new EntitiesKey( - new EntityName(CODEC_CONTEXT.fromYangInstanceIdentifier(entityId)), - new EntityType(ENTITY_TYPE))) - .getOwnerNode().getValue().equals("member-1")); + final var entities = getEntitiesResult.nonnullEntities(); + assertEquals(1, entities.size()); + assertTrue(entities.get(new EntitiesKey( + new EntityName(CODEC_CONTEXT.fromYangInstanceIdentifier(entityId)), + new EntityType(ENTITY_TYPE))) + .getCandidateNodes().contains(new NodeName("member-1"))); + assertTrue(entities.get(new EntitiesKey( + new EntityName(CODEC_CONTEXT.fromYangInstanceIdentifier(entityId)), + new EntityType(ENTITY_TYPE))) + .getOwnerNode().getValue().equals("member-1")); }); await().atMost(Duration.ofSeconds(2)).untilAsserted(() -> { diff --git a/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/service/ClusterSingletonIntegrationTest.java b/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/service/ClusterSingletonIntegrationTest.java index 90bfb88b20..f544ed1a4a 100644 --- a/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/service/ClusterSingletonIntegrationTest.java +++ b/opendaylight/md-sal/eos-dom-akka/src/test/java/org/opendaylight/controller/eos/akka/service/ClusterSingletonIntegrationTest.java @@ -28,11 +28,10 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.opendaylight.controller.eos.akka.AbstractNativeEosTest; -import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService; -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.dom.impl.DOMClusterSingletonServiceProviderImpl; +import org.opendaylight.mdsal.singleton.api.ClusterSingletonService; +import org.opendaylight.mdsal.singleton.api.ServiceGroupIdentifier; +import org.opendaylight.mdsal.singleton.impl.EOSClusterSingletonServiceProvider; +import org.opendaylight.yangtools.concepts.Registration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,9 +43,9 @@ public class ClusterSingletonIntegrationTest extends AbstractNativeEosTest { private MockNativeEntityOwnershipService node2; private MockNativeEntityOwnershipService node3; - private MockSingletonService singletonNode1; - private MockSingletonService singletonNode2; - private MockSingletonService singletonNode3; + private EOSClusterSingletonServiceProvider singletonNode1; + private EOSClusterSingletonServiceProvider singletonNode2; + private EOSClusterSingletonServiceProvider singletonNode3; @Before @@ -55,14 +54,9 @@ public class ClusterSingletonIntegrationTest extends AbstractNativeEosTest { node2 = startupNativeService(2551, List.of("member-2"), THREE_NODE_SEED_NODES); node3 = startupNativeService(2552, List.of("member-3"), THREE_NODE_SEED_NODES); - singletonNode1 = new MockSingletonService(node1); - singletonNode1.initializeProvider(); - - singletonNode2 = new MockSingletonService(node2); - singletonNode2.initializeProvider(); - - singletonNode3 = new MockSingletonService(node3); - singletonNode3.initializeProvider(); + singletonNode1 = new EOSClusterSingletonServiceProvider(node1); + singletonNode2 = new EOSClusterSingletonServiceProvider(node2); + singletonNode3 = new EOSClusterSingletonServiceProvider(node3); waitUntillNodeReady(node3); } @@ -90,8 +84,7 @@ public class ClusterSingletonIntegrationTest extends AbstractNativeEosTest { @Test public void testSingletonOwnershipHandoff() { final MockClusterSingletonService service = new MockClusterSingletonService("member-1", "service-1"); - final ClusterSingletonServiceRegistration registration = - singletonNode1.registerClusterSingletonService(service); + final Registration registration = singletonNode1.registerClusterSingletonService(service); verifyServiceActive(service); @@ -108,14 +101,12 @@ public class ClusterSingletonIntegrationTest extends AbstractNativeEosTest { @Test public void testSingletonOwnershipHandoffOnNodeShutdown() throws Exception { MockClusterSingletonService service2 = new MockClusterSingletonService("member-2", "service-1"); - ClusterSingletonServiceRegistration registration2 = - singletonNode2.registerClusterSingletonService(service2); + Registration registration2 = singletonNode2.registerClusterSingletonService(service2); verifyServiceActive(service2); final MockClusterSingletonService service3 = new MockClusterSingletonService("member-3", "service-1"); - final ClusterSingletonServiceRegistration registration3 = - singletonNode3.registerClusterSingletonService(service3); + final Registration registration3 = singletonNode3.registerClusterSingletonService(service3); verifyServiceInactive(service3, 2); @@ -124,8 +115,7 @@ public class ClusterSingletonIntegrationTest extends AbstractNativeEosTest { verifyServiceActive(service3); node2 = startupNativeService(2551, List.of("member-1"), THREE_NODE_SEED_NODES); - singletonNode2 = new MockSingletonService(node2); - singletonNode2.initializeProvider(); + singletonNode2 = new EOSClusterSingletonServiceProvider(node2); waitUntillNodeReady(node2); service2 = new MockClusterSingletonService("member-2", "service-1"); @@ -135,7 +125,7 @@ public class ClusterSingletonIntegrationTest extends AbstractNativeEosTest { verifyServiceInactive(service2, 5); } - private void waitUntillNodeReady(MockNativeEntityOwnershipService node) { + private static void waitUntillNodeReady(final MockNativeEntityOwnershipService node) { // need to wait until all nodes are ready final Cluster cluster = Cluster.get(Adapter.toTyped(node.getActorSystem())); Awaitility.await().atMost(Duration.ofSeconds(20)).until(() -> { @@ -155,19 +145,19 @@ public class ClusterSingletonIntegrationTest extends AbstractNativeEosTest { }); } - private static void verifyServiceActive(MockClusterSingletonService service) { + private static void verifyServiceActive(final MockClusterSingletonService service) { await().untilAsserted(() -> assertTrue(service.isActivated())); } - private static void verifyServiceActive(MockClusterSingletonService service, long delay) { + private static void verifyServiceActive(final MockClusterSingletonService service, final long delay) { await().pollDelay(delay, TimeUnit.SECONDS).untilAsserted(() -> assertTrue(service.isActivated())); } - private static void verifyServiceInactive(MockClusterSingletonService service) { + private static void verifyServiceInactive(final MockClusterSingletonService service) { await().untilAsserted(() -> assertFalse(service.isActivated())); } - private static void verifyServiceInactive(MockClusterSingletonService service, long delay) { + private static void verifyServiceInactive(final MockClusterSingletonService service, final long delay) { await().pollDelay(delay, TimeUnit.SECONDS).untilAsserted(() -> assertFalse(service.isActivated())); } @@ -177,9 +167,9 @@ public class ClusterSingletonIntegrationTest extends AbstractNativeEosTest { private final ServiceGroupIdentifier identifier; private boolean activated = false; - MockClusterSingletonService(String member, String identifier) { + MockClusterSingletonService(final String member, final String identifier) { this.member = member; - this.identifier = ServiceGroupIdentifier.create(identifier); + this.identifier = new ServiceGroupIdentifier(identifier); } @Override @@ -204,10 +194,4 @@ public class ClusterSingletonIntegrationTest extends AbstractNativeEosTest { return activated; } } - - private static class MockSingletonService extends DOMClusterSingletonServiceProviderImpl { - MockSingletonService(DOMEntityOwnershipService entityOwnershipService) { - super(entityOwnershipService); - } - } } diff --git a/opendaylight/md-sal/mdsal-it-base/pom.xml b/opendaylight/md-sal/mdsal-it-base/pom.xml index 516f615e76..db9d18b510 100644 --- a/opendaylight/md-sal/mdsal-it-base/pom.xml +++ b/opendaylight/md-sal/mdsal-it-base/pom.xml @@ -26,7 +26,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html org.opendaylight.mdsal mdsal-artifacts - 12.0.4 + 13.0.0 pom import diff --git a/opendaylight/md-sal/parent/pom.xml b/opendaylight/md-sal/parent/pom.xml index 5cfa5bca53..36a26f5a41 100644 --- a/opendaylight/md-sal/parent/pom.xml +++ b/opendaylight/md-sal/parent/pom.xml @@ -11,7 +11,7 @@ org.opendaylight.mdsal binding-parent - 12.0.4 + 13.0.0 diff --git a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceIT.java b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceIT.java index 0cd2ef7b6e..5cdde319cd 100644 --- a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceIT.java +++ b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceIT.java @@ -20,8 +20,8 @@ import java.util.Set; import javax.inject.Inject; import org.junit.Before; import org.junit.Test; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; import org.opendaylight.mdsal.binding.api.RpcProviderService; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.rpc.routing.rev140701.RoutedSimpleRoute; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.rpc.routing.rev140701.RoutedSimpleRouteInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.rpc.routing.rev140701.RoutedSimpleRouteInputBuilder; @@ -52,7 +52,7 @@ public class RoutedServiceIT extends AbstractIT { @Inject @Filter(timeout = 120 * 1000) - RpcConsumerRegistry rpcConsumerRegistry; + RpcService rpcService; /** * Prepare mocks. @@ -86,7 +86,7 @@ public class RoutedServiceIT extends AbstractIT { assertNotNull("Registration should not be null", firstReg); assertNotSame(secondReg, firstReg); - RoutedSimpleRoute consumerService = rpcConsumerRegistry.getRpc(RoutedSimpleRoute.class); + RoutedSimpleRoute consumerService = rpcService.getRpc(RoutedSimpleRoute.class); assertNotNull("MD-SAL instance of test Service should be returned", consumerService); assertNotSame("Provider instance and consumer instance should not be same.", routedSimpleRouteRpc1, consumerService); diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ActivateEosDatacenterCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ActivateEosDatacenterCommand.java index 736603d04a..ec23a08159 100644 --- a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ActivateEosDatacenterCommand.java +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ActivateEosDatacenterCommand.java @@ -11,7 +11,7 @@ import com.google.common.util.concurrent.ListenableFuture; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; -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.controller.md.sal.cluster.admin.rev151013.ActivateEosDatacenter; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ActivateEosDatacenterInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -20,11 +20,11 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "cluster-admin", name = "activate-eos-datacenter", description = "Run an activate-eos-datacenter test") public class ActivateEosDatacenterCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcConsumerRegistry; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { - return rpcConsumerRegistry.getRpc(ActivateEosDatacenter.class) + return rpcService.getRpc(ActivateEosDatacenter.class) .invoke(new ActivateEosDatacenterInputBuilder().build()); } } diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AddReplicasForAllShardsCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AddReplicasForAllShardsCommand.java index 5deb01ec41..51f086b722 100644 --- a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AddReplicasForAllShardsCommand.java +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AddReplicasForAllShardsCommand.java @@ -11,7 +11,7 @@ import com.google.common.util.concurrent.ListenableFuture; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; -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.controller.md.sal.cluster.admin.rev151013.AddReplicasForAllShards; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.AddReplicasForAllShardsInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -21,11 +21,11 @@ import org.opendaylight.yangtools.yang.common.RpcResult; description = "Run an add-replicas-for-all-shards test") public class AddReplicasForAllShardsCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcConsumerRegistry; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { - return rpcConsumerRegistry.getRpc(AddReplicasForAllShards.class) + return rpcService.getRpc(AddReplicasForAllShards.class) .invoke(new AddReplicasForAllShardsInputBuilder().build()); } } diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AddShardReplicaCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AddShardReplicaCommand.java index fa6fcbdfb3..3639fbd5b6 100644 --- a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AddShardReplicaCommand.java +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/AddShardReplicaCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Argument; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; -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.controller.md.sal.cluster.admin.rev151013.AddShardReplica; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.AddShardReplicaInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.DataStoreType; @@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "cluster-admin", name = "add-shard-replica", description = "Run an add-shard-replica test") public class AddShardReplicaCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcConsumerRegistry; + private RpcService rpcService; @Argument(index = 0, name = "shard-name", required = true) private String shardName; @Argument(index = 1, name = "data-store-type", required = true, description = "config / operational") @@ -30,7 +30,7 @@ public class AddShardReplicaCommand extends AbstractRpcAction { @Override protected ListenableFuture> invokeRpc() { - return rpcConsumerRegistry.getRpc(AddShardReplica.class) + return rpcService.getRpc(AddShardReplica.class) .invoke(new AddShardReplicaInputBuilder() .setShardName(shardName) .setDataStoreType(DataStoreType.forName(dataStoreType)) diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/BackupDatastoreCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/BackupDatastoreCommand.java index 2fc4fda4d7..4f19d0f3a9 100644 --- a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/BackupDatastoreCommand.java +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/BackupDatastoreCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Argument; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; -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.controller.md.sal.cluster.admin.rev151013.BackupDatastore; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.BackupDatastoreInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.common.Uint32; @Command(scope = "cluster-admin", name = "backup-datastore", description = "Run a backup-datastore test") public class BackupDatastoreCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcConsumerRegistry; + private RpcService rpcService; @Argument(index = 0, name = "file-path", required = true) private String filePath; @Argument(index = 1, name = "timeout", required = true) @@ -30,7 +30,7 @@ public class BackupDatastoreCommand extends AbstractRpcAction { @Override protected ListenableFuture> invokeRpc() { - return rpcConsumerRegistry.getRpc(BackupDatastore.class) + return rpcService.getRpc(BackupDatastore.class) .invoke(new BackupDatastoreInputBuilder() .setFilePath(filePath) .setTimeout(Uint32.valueOf(timeout)) diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ChangeMemberVotingStatesForAllShardsCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ChangeMemberVotingStatesForAllShardsCommand.java index ccc299a52e..cef7e9d938 100644 --- a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ChangeMemberVotingStatesForAllShardsCommand.java +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ChangeMemberVotingStatesForAllShardsCommand.java @@ -13,7 +13,7 @@ import org.apache.karaf.shell.api.action.Argument; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; -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.controller.md.sal.cluster.admin.rev151013.ChangeMemberVotingStatesForAllShards; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ChangeMemberVotingStatesForAllShardsInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.member.voting.states.input.MemberVotingState; @@ -26,7 +26,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; description = "Run a change-member-voting-states-for-all-shards test") public class ChangeMemberVotingStatesForAllShardsCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcConsumerRegistry; + private RpcService rpcService; @Argument(index = 0, name = "member-name", required = true) private String memberName; @Argument(index = 1, name = "voting", required = true) @@ -39,7 +39,7 @@ public class ChangeMemberVotingStatesForAllShardsCommand extends AbstractRpcActi .setVoting(voting) .build(); - return rpcConsumerRegistry.getRpc(ChangeMemberVotingStatesForAllShards.class) + return rpcService.getRpc(ChangeMemberVotingStatesForAllShards.class) .invoke(new ChangeMemberVotingStatesForAllShardsInputBuilder() .setMemberVotingState(List.of(memberVotingState)) .build()); diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ChangeMemberVotingStatesForShardCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ChangeMemberVotingStatesForShardCommand.java index 33cb4030d9..e98a3090b6 100644 --- a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ChangeMemberVotingStatesForShardCommand.java +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/ChangeMemberVotingStatesForShardCommand.java @@ -14,7 +14,7 @@ import org.apache.karaf.shell.api.action.Argument; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; -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.controller.md.sal.cluster.admin.rev151013.ChangeMemberVotingStatesForShard; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.ChangeMemberVotingStatesForShardInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.DataStoreType; @@ -27,7 +27,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; description = "Run a change-member-voting-states-for-shard test") public class ChangeMemberVotingStatesForShardCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcConsumerRegistry; + private RpcService rpcService; @Argument(index = 0, name = "shard-name", required = true) private String shardName; @Argument(index = 1, name = "data-store-type", required = true, description = "config / operational") @@ -44,7 +44,7 @@ public class ChangeMemberVotingStatesForShardCommand extends AbstractRpcAction { .setVoting(voting) .build(); - return rpcConsumerRegistry.getRpc(ChangeMemberVotingStatesForShard.class) + return rpcService.getRpc(ChangeMemberVotingStatesForShard.class) .invoke(new ChangeMemberVotingStatesForShardInputBuilder() .setShardName(shardName) .setDataStoreType(DataStoreType.forName(dataStoreType)) diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/DeactivateEosDatacenterCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/DeactivateEosDatacenterCommand.java index badb94d037..0ca0003c7e 100644 --- a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/DeactivateEosDatacenterCommand.java +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/DeactivateEosDatacenterCommand.java @@ -11,7 +11,7 @@ import com.google.common.util.concurrent.ListenableFuture; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; -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.controller.md.sal.cluster.admin.rev151013.DeactivateEosDatacenter; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.DeactivateEosDatacenterInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -21,11 +21,11 @@ import org.opendaylight.yangtools.yang.common.RpcResult; description = "Run a deactivate-eos-datacenter test") public class DeactivateEosDatacenterCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcConsumerRegistry; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { - return rpcConsumerRegistry.getRpc(DeactivateEosDatacenter.class) + return rpcService.getRpc(DeactivateEosDatacenter.class) .invoke(new DeactivateEosDatacenterInputBuilder().build()); } } diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/FlipMemberVotingStatesForAllShardsCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/FlipMemberVotingStatesForAllShardsCommand.java index 5e251eb21a..78c0b6f809 100644 --- a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/FlipMemberVotingStatesForAllShardsCommand.java +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/FlipMemberVotingStatesForAllShardsCommand.java @@ -11,7 +11,7 @@ import com.google.common.util.concurrent.ListenableFuture; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; -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.controller.md.sal.cluster.admin.rev151013.FlipMemberVotingStatesForAllShards; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.FlipMemberVotingStatesForAllShardsInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -21,11 +21,11 @@ import org.opendaylight.yangtools.yang.common.RpcResult; description = "Run a flip-member-voting-states-for-all-shards test") public class FlipMemberVotingStatesForAllShardsCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcConsumerRegistry; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { - return rpcConsumerRegistry.getRpc(FlipMemberVotingStatesForAllShards.class) + return rpcService.getRpc(FlipMemberVotingStatesForAllShards.class) .invoke(new FlipMemberVotingStatesForAllShardsInputBuilder().build()); } } diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/GetKnownClientsForAllShardsCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/GetKnownClientsForAllShardsCommand.java index 89a743ec8e..c002846680 100644 --- a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/GetKnownClientsForAllShardsCommand.java +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/GetKnownClientsForAllShardsCommand.java @@ -11,7 +11,7 @@ import com.google.common.util.concurrent.ListenableFuture; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; -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.controller.md.sal.cluster.admin.rev151013.GetKnownClientsForAllShards; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.GetKnownClientsForAllShardsInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -21,11 +21,11 @@ import org.opendaylight.yangtools.yang.common.RpcResult; description = "Run a get-known-clients-for-all-shards test") public class GetKnownClientsForAllShardsCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcConsumerRegistry; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { - return rpcConsumerRegistry.getRpc(GetKnownClientsForAllShards.class) + return rpcService.getRpc(GetKnownClientsForAllShards.class) .invoke(new GetKnownClientsForAllShardsInputBuilder().build()); } } diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/GetShardRoleCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/GetShardRoleCommand.java index 5279a12790..50a88e942c 100644 --- a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/GetShardRoleCommand.java +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/GetShardRoleCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Argument; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; -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.controller.md.sal.cluster.admin.rev151013.DataStoreType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.GetShardRole; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.GetShardRoleInputBuilder; @@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "cluster-admin", name = "get-shard-role", description = "Run a get-shard-role test") public class GetShardRoleCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcConsumerRegistry; + private RpcService rpcService; @Argument(index = 0, name = "shard-name", required = true) private String shardName; @Argument(index = 1, name = "data-store-type", required = true, description = "config / operational") @@ -30,7 +30,7 @@ public class GetShardRoleCommand extends AbstractRpcAction { @Override protected ListenableFuture> invokeRpc() { - return rpcConsumerRegistry.getRpc(GetShardRole.class) + return rpcService.getRpc(GetShardRole.class) .invoke(new GetShardRoleInputBuilder() .setShardName(shardName) .setDataStoreType(DataStoreType.forName(dataStoreType)) diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/LocateShardCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/LocateShardCommand.java index 78f4d6e7af..6a1b1731a6 100644 --- a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/LocateShardCommand.java +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/LocateShardCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Argument; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; -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.controller.md.sal.cluster.admin.rev151013.DataStoreType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.LocateShard; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.LocateShardInputBuilder; @@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "cluster-admin", name = "locate-shard", description = "Run a locate-shard test") public class LocateShardCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcConsumerRegistry; + private RpcService rpcService; @Argument(index = 0, name = "shard-name", required = true) private String shardName; @Argument(index = 1, name = "data-store-type", required = true, description = "config / operational") @@ -30,7 +30,7 @@ public class LocateShardCommand extends AbstractRpcAction { @Override protected ListenableFuture> invokeRpc() { - return rpcConsumerRegistry.getRpc(LocateShard.class) + return rpcService.getRpc(LocateShard.class) .invoke(new LocateShardInputBuilder() .setShardName(shardName) .setDataStoreType(DataStoreType.forName(dataStoreType)) diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/MakeLeaderLocalCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/MakeLeaderLocalCommand.java index 4f85984787..90aa8fc653 100644 --- a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/MakeLeaderLocalCommand.java +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/MakeLeaderLocalCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Argument; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; -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.controller.md.sal.cluster.admin.rev151013.DataStoreType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.MakeLeaderLocal; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.MakeLeaderLocalInputBuilder; @@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "cluster-admin", name = "make-leader-local", description = "Run a make-leader-local test") public class MakeLeaderLocalCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcConsumerRegistry; + private RpcService rpcService; @Argument(index = 0, name = "shard-name", required = true) private String shardName; @Argument(index = 1, name = "data-store-type", required = true, description = "config / operational") @@ -30,7 +30,7 @@ public class MakeLeaderLocalCommand extends AbstractRpcAction { @Override protected ListenableFuture> invokeRpc() { - return rpcConsumerRegistry.getRpc(MakeLeaderLocal.class) + return rpcService.getRpc(MakeLeaderLocal.class) .invoke(new MakeLeaderLocalInputBuilder() .setShardName(shardName) .setDataStoreType(DataStoreType.forName(dataStoreType)) diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/RemoveAllShardReplicasCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/RemoveAllShardReplicasCommand.java index b179446b0c..c33b66330d 100644 --- a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/RemoveAllShardReplicasCommand.java +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/RemoveAllShardReplicasCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Argument; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; -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.controller.md.sal.cluster.admin.rev151013.RemoveAllShardReplicas; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.RemoveAllShardReplicasInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -22,13 +22,13 @@ import org.opendaylight.yangtools.yang.common.RpcResult; description = "Run a remove-all-shard-replicas test") public class RemoveAllShardReplicasCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcConsumerRegistry; + private RpcService rpcService; @Argument(index = 0, name = "member-name",required = true) private String memberName; @Override protected ListenableFuture> invokeRpc() { - return rpcConsumerRegistry.getRpc(RemoveAllShardReplicas.class) + return rpcService.getRpc(RemoveAllShardReplicas.class) .invoke(new RemoveAllShardReplicasInputBuilder() .setMemberName(memberName) .build()); diff --git a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/RemoveShardReplicaCommand.java b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/RemoveShardReplicaCommand.java index fb4e7fe66f..9738f4fb77 100644 --- a/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/RemoveShardReplicaCommand.java +++ b/opendaylight/md-sal/sal-cluster-admin-karaf-cli/src/main/java/org/opendaylight/controller/cluster/datastore/admin/command/RemoveShardReplicaCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Argument; import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; -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.controller.md.sal.cluster.admin.rev151013.DataStoreType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.RemoveShardReplica; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.cluster.admin.rev151013.RemoveShardReplicaInputBuilder; @@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "cluster-admin", name = "remove-shard-replica", description = "Run a remove-shard-replica") public class RemoveShardReplicaCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcConsumerRegistry; + private RpcService rpcService; @Argument(index = 0, name = "shard-name", required = true) private String shardName; @Argument(index = 1, name = "data-store-type", required = true, description = "config / operational") @@ -32,7 +32,7 @@ public class RemoveShardReplicaCommand extends AbstractRpcAction { @Override protected ListenableFuture> invokeRpc() { - return rpcConsumerRegistry.getRpc(RemoveShardReplica.class) + return rpcService.getRpc(RemoveShardReplica.class) .invoke(new RemoveShardReplicaInputBuilder() .setShardName(shardName) .setDataStoreType(DataStoreType.forName(dataStoreType)) diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/RemoteYangTextSourceProvider.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/RemoteYangTextSourceProvider.java index 03b44b5851..c8ceb13ed9 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/RemoteYangTextSourceProvider.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/RemoteYangTextSourceProvider.java @@ -11,7 +11,7 @@ import com.google.common.annotations.Beta; import java.util.Set; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.controller.cluster.schema.provider.impl.YangTextSchemaSourceSerializationProxy; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import scala.concurrent.Future; /** diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteSchemaProvider.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteSchemaProvider.java index c9e507836d..7a53188718 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteSchemaProvider.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteSchemaProvider.java @@ -12,19 +12,18 @@ import com.google.common.annotations.Beta; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; import org.opendaylight.controller.cluster.schema.provider.RemoteYangTextSourceProvider; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.YangTextSource; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import scala.concurrent.ExecutionContext; -import scala.concurrent.Future; /** * Provides schema sources from {@link RemoteYangTextSourceProvider}. */ @Beta -public class RemoteSchemaProvider implements SchemaSourceProvider { +public class RemoteSchemaProvider implements SchemaSourceProvider { private static final Logger LOG = LoggerFactory.getLogger(RemoteSchemaProvider.class); private final RemoteYangTextSourceProvider remoteRepo; @@ -37,21 +36,18 @@ public class RemoteSchemaProvider implements SchemaSourceProvider getSource(final SourceIdentifier sourceIdentifier) { + public ListenableFuture getSource(final SourceIdentifier sourceIdentifier) { LOG.trace("Getting yang schema source for {}", sourceIdentifier.name().getLocalName()); - Future result = remoteRepo.getYangTextSchemaSource(sourceIdentifier); - - final SettableFuture res = SettableFuture.create(); - result.onComplete(new OnComplete() { + final var res = SettableFuture.create(); + remoteRepo.getYangTextSchemaSource(sourceIdentifier).onComplete(new OnComplete<>() { @Override - public void onComplete(final Throwable throwable, - final YangTextSchemaSourceSerializationProxy yangTextSchemaSourceSerializationProxy) { - if (yangTextSchemaSourceSerializationProxy != null) { - res.set(yangTextSchemaSourceSerializationProxy.getRepresentation()); + public void onComplete(final Throwable failure, final YangTextSchemaSourceSerializationProxy success) { + if (success != null) { + res.set(success.getRepresentation()); } - if (throwable != null) { - res.setException(throwable); + if (failure != null) { + res.setException(failure); } } }, executionContext); diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteYangTextSourceProviderImpl.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteYangTextSourceProviderImpl.java index 5e88952dda..eea0aa8607 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteYangTextSourceProviderImpl.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteYangTextSourceProviderImpl.java @@ -17,9 +17,9 @@ import com.google.common.util.concurrent.MoreExecutors; import java.io.IOException; import java.util.Set; import org.opendaylight.controller.cluster.schema.provider.RemoteYangTextSourceProvider; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.YangTextSource; import org.opendaylight.yangtools.yang.model.repo.api.SchemaRepository; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import scala.concurrent.Future; @@ -51,16 +51,16 @@ public class RemoteYangTextSourceProviderImpl implements RemoteYangTextSourcePro LOG.trace("Sending yang schema source for {}", identifier); final Promise promise = akka.dispatch.Futures.promise(); - ListenableFuture future = - repository.getSchemaSource(identifier, YangTextSchemaSource.class); + ListenableFuture future = + repository.getSchemaSource(identifier, YangTextSource.class); - Futures.addCallback(future, new FutureCallback() { + Futures.addCallback(future, new FutureCallback() { @Override - public void onSuccess(final YangTextSchemaSource result) { + public void onSuccess(final YangTextSource result) { try { promise.success(new YangTextSchemaSourceSerializationProxy(result)); } catch (IOException e) { - LOG.warn("Unable to read schema source for {}", result.getIdentifier(), e); + LOG.warn("Unable to read schema source for {}", result.sourceId(), e); promise.failure(e); } } diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/impl/YangTextSchemaSourceSerializationProxy.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/impl/YangTextSchemaSourceSerializationProxy.java index 1d3e3ba31f..9ad9948e6c 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/impl/YangTextSchemaSourceSerializationProxy.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/impl/YangTextSchemaSourceSerializationProxy.java @@ -13,11 +13,12 @@ import java.io.IOException; import java.io.Serializable; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.YangTextSource; +import org.opendaylight.yangtools.yang.model.spi.source.DelegatedYangTextSource; /** - * {@link org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource} serialization proxy. + * {@link YangTextSource} serialization proxy. */ @Beta public class YangTextSchemaSourceSerializationProxy implements Serializable { @@ -27,15 +28,15 @@ public class YangTextSchemaSourceSerializationProxy implements Serializable { private final Revision revision; private final String name; - public YangTextSchemaSourceSerializationProxy(final YangTextSchemaSource source) throws IOException { - final var id = source.getIdentifier(); - revision = id.revision(); - name = id.name().getLocalName(); + public YangTextSchemaSourceSerializationProxy(final YangTextSource source) throws IOException { + final var sourceId = source.sourceId(); + revision = sourceId.revision(); + name = sourceId.name().getLocalName(); schemaSource = source.read(); } - public YangTextSchemaSource getRepresentation() { - return YangTextSchemaSource.delegateForCharSource(new SourceIdentifier(Unqualified.of(name), revision), + public YangTextSource getRepresentation() { + return new DelegatedYangTextSource(new SourceIdentifier(Unqualified.of(name), revision), CharSource.wrap(schemaSource)); } } diff --git a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtilsTest.java b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtilsTest.java index e98b61844a..1facd072ca 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtilsTest.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtilsTest.java @@ -41,7 +41,7 @@ public class SerializationUtilsTest { public void testSerializeDeserializeNodes() throws Exception { final var normalizedNode = createNormalizedNode(); final var bytes = serialize(normalizedNode); - assertEquals(10556, bytes.length); + assertEquals(10567, bytes.length); assertEquals(normalizedNode, deserialize(bytes)); } @@ -94,7 +94,7 @@ public class SerializationUtilsTest { } final byte[] bytes = bos.toByteArray(); - assertEquals(10558, bytes.length); + assertEquals(10569, bytes.length); final var applierCalled = new AtomicBoolean(false); try (var in = new DataInputStream(new ByteArrayInputStream(bytes))) { @@ -139,7 +139,7 @@ public class SerializationUtilsTest { .withChild(stringLeaf) .withChild(createLeaf("longStringLeaf", "0123456789".repeat(1000))) .withChild(createLeaf("stringLeaf", QName.create("base", "qName"))) - .withChild(createLeaf("stringLeaf", YangInstanceIdentifier.of())) + .withChild(createLeaf("stringLeaf", YangInstanceIdentifier.of(QName.create("test", "test")))) .withChild(Builders.mapBuilder() .withNodeIdentifier(id("mapNode")) .withChild(entry1) diff --git a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePrunerTest.java b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePrunerTest.java index 14b7bc8568..e8a4a88080 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePrunerTest.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePrunerTest.java @@ -28,7 +28,6 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; -import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; @@ -229,15 +228,14 @@ public class NormalizedNodePrunerTest { @Test public void testAnyXMLNodeNotPrunedWhenHasParent() throws IOException { - AbstractNormalizedNodePruner pruner = prunerFullSchema(TestModel.TEST_PATH); - DOMSourceAnyxmlNode child = Builders.anyXmlBuilder().withNodeIdentifier( + final var pruner = prunerFullSchema(TestModel.TEST_PATH); + final var child = Builders.anyXmlBuilder().withNodeIdentifier( new NodeIdentifier(TestModel.ANY_XML_QNAME)).withValue(mock(DOMSource.class)).build(); - NormalizedNode input = Builders.containerBuilder().withNodeIdentifier( + final var input = Builders.containerBuilder().withNodeIdentifier( new NodeIdentifier(TestModel.TEST_QNAME)).withChild(child).build(); NormalizedNodeWriter.forStreamWriter(pruner).write(input); - NormalizedNode actual = pruner.getResult().orElseThrow(); - assertEquals("normalizedNode", input, actual); + assertEquals("normalizedNode", input, pruner.getResult().orElseThrow()); } @Test diff --git a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteSchemaProviderTest.java b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteSchemaProviderTest.java index 8530f099ca..611bebfd61 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteSchemaProviderTest.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteSchemaProviderTest.java @@ -17,16 +17,15 @@ import static org.mockito.Mockito.mock; import akka.dispatch.ExecutionContexts; import akka.dispatch.Futures; import com.google.common.io.CharSource; -import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; import java.io.IOException; import java.util.concurrent.ExecutionException; import org.junit.Before; import org.junit.Test; import org.opendaylight.controller.cluster.schema.provider.RemoteYangTextSourceProvider; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.DelegatedYangTextSource; public class RemoteSchemaProviderTest { private static final SourceIdentifier ID = new SourceIdentifier("Test", "2015-10-30"); @@ -43,21 +42,21 @@ public class RemoteSchemaProviderTest { @Test public void getExistingYangTextSchemaSource() throws IOException, InterruptedException, ExecutionException { - YangTextSchemaSource schemaSource = YangTextSchemaSource.delegateForCharSource(ID, CharSource.wrap("Test")); + final var schemaSource = new DelegatedYangTextSource(ID, CharSource.wrap("Test")); doReturn(Futures.successful(new YangTextSchemaSourceSerializationProxy(schemaSource))) .when(mockedRemoteSchemaRepository).getYangTextSchemaSource(ID); - YangTextSchemaSource providedSource = remoteSchemaProvider.getSource(ID).get(); - assertEquals(ID, providedSource.getIdentifier()); + final var providedSource = remoteSchemaProvider.getSource(ID).get(); + assertEquals(ID, providedSource.sourceId()); assertEquals(schemaSource.read(), providedSource.read()); } @Test public void getNonExistingSchemaSource() throws InterruptedException { - final var exception = new SchemaSourceException("Source not provided"); + final var exception = new SchemaSourceException(ID, "Source not provided"); doReturn(Futures.failed(exception)).when(mockedRemoteSchemaRepository).getYangTextSchemaSource(ID); - ListenableFuture sourceFuture = remoteSchemaProvider.getSource(ID); + final var sourceFuture = remoteSchemaProvider.getSource(ID); assertTrue(sourceFuture.isDone()); final var cause = assertThrows(ExecutionException.class, sourceFuture::get).getCause(); diff --git a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteYangTextSourceProviderImplTest.java b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteYangTextSourceProviderImplTest.java index 85fe58584b..a63be0aa00 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteYangTextSourceProviderImplTest.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteYangTextSourceProviderImplTest.java @@ -22,10 +22,11 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.YangTextSource; import org.opendaylight.yangtools.yang.model.repo.api.SchemaRepository; import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.DelegatedYangTextSource; import scala.concurrent.Await; import scala.concurrent.duration.FiniteDuration; @@ -46,24 +47,24 @@ public class RemoteYangTextSourceProviderImplTest { @Test public void testGetExistingYangTextSchemaSource() throws Exception { - var schemaSource = YangTextSchemaSource.delegateForCharSource(ID, CharSource.wrap("Test source.")); + var schemaSource = new DelegatedYangTextSource(ID, CharSource.wrap("Test source.")); doReturn(Futures.immediateFuture(schemaSource)).when(mockedLocalRepository) - .getSchemaSource(ID, YangTextSchemaSource.class); + .getSchemaSource(ID, YangTextSource.class); var retrievedSourceFuture = remoteRepository.getYangTextSchemaSource(ID); assertTrue(retrievedSourceFuture.isCompleted()); var resultSchemaSource = Await.result(retrievedSourceFuture, FiniteDuration.Zero()).getRepresentation(); - assertEquals(resultSchemaSource.getIdentifier(), schemaSource.getIdentifier()); + assertEquals(resultSchemaSource.sourceId(), schemaSource.sourceId()); assertEquals(resultSchemaSource.read(), schemaSource.read()); } @Test public void testGetNonExistentYangTextSchemaSource() throws Exception { - final var exception = new SchemaSourceException("Source is not provided"); + final var exception = new SchemaSourceException(ID, "Source is not provided"); doReturn(Futures.immediateFailedFuture(exception)).when(mockedLocalRepository) - .getSchemaSource(ID, YangTextSchemaSource.class); + .getSchemaSource(ID, YangTextSource.class); var retrievedSourceFuture = remoteRepository.getYangTextSchemaSource(ID); assertTrue(retrievedSourceFuture.isCompleted()); diff --git a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/YangTextSourceSerializationProxyTest.java b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/YangTextSourceSerializationProxyTest.java index 7e84a4e8fe..ced954640c 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/YangTextSourceSerializationProxyTest.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/YangTextSourceSerializationProxyTest.java @@ -17,44 +17,43 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.junit.Before; import org.junit.Test; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.YangTextSource; +import org.opendaylight.yangtools.yang.model.spi.source.DelegatedYangTextSource; public class YangTextSourceSerializationProxyTest { - private YangTextSchemaSource schemaSource; + private YangTextSource schemaSource; @Before public void setUp() { - schemaSource = YangTextSchemaSource.delegateForCharSource(new SourceIdentifier("test", "2015-10-30"), + schemaSource = new DelegatedYangTextSource(new SourceIdentifier("test", "2015-10-30"), CharSource.wrap("Test source.")); } @Test public void serializeAndDeserializeProxy() throws ClassNotFoundException, IOException { - YangTextSchemaSourceSerializationProxy proxy = new YangTextSchemaSourceSerializationProxy(schemaSource); + final var proxy = new YangTextSchemaSourceSerializationProxy(schemaSource); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(proxy); final byte[] bytes = bos.toByteArray(); - assertEquals(333, bytes.length); + assertEquals(323, bytes.length); ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes)); - YangTextSchemaSourceSerializationProxy deserializedProxy = - (YangTextSchemaSourceSerializationProxy) ois.readObject(); + final var deserializedProxy = (YangTextSchemaSourceSerializationProxy) ois.readObject(); - assertEquals(deserializedProxy.getRepresentation().getIdentifier(), proxy.getRepresentation().getIdentifier()); + assertEquals(deserializedProxy.getRepresentation().sourceId(), proxy.getRepresentation().sourceId()); assertEquals(deserializedProxy.getRepresentation().read(), proxy.getRepresentation().read()); } @Test public void testProxyEqualsBackingYangTextSource() throws IOException { - YangTextSchemaSourceSerializationProxy serializationProxy = - new YangTextSchemaSourceSerializationProxy(schemaSource); + final var serializationProxy = new YangTextSchemaSourceSerializationProxy(schemaSource); - assertEquals(serializationProxy.getRepresentation().getIdentifier(), schemaSource.getIdentifier()); + assertEquals(serializationProxy.getRepresentation().sourceId(), schemaSource.sourceId()); assertEquals(serializationProxy.getRepresentation().read(), schemaSource.read()); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/pom.xml b/opendaylight/md-sal/sal-distributed-datastore/pom.xml index 79d258da9a..ea7c1d5177 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/pom.xml +++ b/opendaylight/md-sal/sal-distributed-datastore/pom.xml @@ -12,6 +12,12 @@ bundle + + com.github.spotbugs + spotbugs-annotations + true + + org.slf4j diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBroker.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBroker.java deleted file mode 100644 index 4ab1c15782..0000000000 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBroker.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * 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.controller.cluster.databroker; - -import static com.google.common.base.Preconditions.checkState; - -import com.google.common.collect.ClassToInstanceMap; -import com.google.common.collect.ImmutableClassToInstanceMap; -import com.google.common.collect.ImmutableClassToInstanceMap.Builder; -import java.util.EnumMap; -import java.util.Map; -import java.util.concurrent.atomic.AtomicLong; -import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension; -import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; -import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService; -import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohort; -import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistration; -import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistry; -import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; -import org.opendaylight.mdsal.dom.api.DOMTransactionChain; -import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener; -import org.opendaylight.mdsal.dom.spi.PingPongMergingDOMDataBroker; -import org.opendaylight.mdsal.dom.spi.store.DOMStore; -import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionChain; -import org.opendaylight.mdsal.dom.spi.store.DOMStoreTreeChangePublisher; -import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public abstract class AbstractDOMBroker extends AbstractDOMTransactionFactory - implements PingPongMergingDOMDataBroker { - - private static final Logger LOG = LoggerFactory.getLogger(AbstractDOMBroker.class); - - private final AtomicLong txNum = new AtomicLong(); - private final AtomicLong chainNum = new AtomicLong(); - private final ClassToInstanceMap extensions; - - private volatile AutoCloseable closeable; - - protected AbstractDOMBroker(final Map datastores) { - super(datastores); - - Builder extBuilder = ImmutableClassToInstanceMap.builder(); - if (isSupported(datastores, DOMStoreTreeChangePublisher.class)) { - extBuilder.put(DOMDataTreeChangeService.class, new DOMDataTreeChangeService() { - @Override - public ListenerRegistration registerDataTreeChangeListener( - final DOMDataTreeIdentifier treeId, final L listener) { - DOMStore store = getDOMStore(treeId.getDatastoreType()); - return ((DOMStoreTreeChangePublisher) store).registerTreeChangeListener( - treeId.getRootIdentifier(), listener); - } - }); - } - - if (isSupported(datastores, DOMDataTreeCommitCohortRegistry.class)) { - extBuilder.put(DOMDataTreeCommitCohortRegistry.class, new DOMDataTreeCommitCohortRegistry() { - @Override - public DOMDataTreeCommitCohortRegistration registerCommitCohort( - final DOMDataTreeIdentifier path, final T cohort) { - DOMStore store = getDOMStore(path.getDatastoreType()); - return ((DOMDataTreeCommitCohortRegistry) store).registerCommitCohort(path, cohort); - } - }); - } - - extensions = extBuilder.build(); - } - - private static boolean isSupported(final Map datastores, - final Class expDOMStoreInterface) { - return datastores.values().stream().allMatch(expDOMStoreInterface::isInstance); - } - - public void setCloseable(final AutoCloseable closeable) { - this.closeable = closeable; - } - - @Override - @SuppressWarnings("checkstyle:IllegalCatch") - public void close() { - super.close(); - - if (closeable != null) { - try { - closeable.close(); - } catch (Exception e) { - LOG.debug("Error closing instance", e); - } - } - } - - @Override - protected Object newTransactionIdentifier() { - return "DOM-" + txNum.getAndIncrement(); - } - - @Override - public ClassToInstanceMap getExtensions() { - return extensions; - } - - @Override - public DOMTransactionChain createTransactionChain(final DOMTransactionChainListener listener) { - checkNotClosed(); - - final Map backingChains = - new EnumMap<>(LogicalDatastoreType.class); - for (Map.Entry entry : getTxFactories().entrySet()) { - backingChains.put(entry.getKey(), entry.getValue().createTransactionChain()); - } - - final long chainId = chainNum.getAndIncrement(); - LOG.debug("Transaction chain {} created with listener {}, backing store chains {}", chainId, listener, - backingChains); - return new DOMBrokerTransactionChain(chainId, backingChains, this, listener); - } - - private DOMStore getDOMStore(final LogicalDatastoreType type) { - DOMStore store = getTxFactories().get(type); - checkState(store != null, "Requested logical data store is not available."); - return store; - } -} diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBrokerTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBrokerTransaction.java deleted file mode 100644 index e064818695..0000000000 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBrokerTransaction.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * 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.controller.cluster.databroker; - -import static com.google.common.base.Preconditions.checkArgument; -import static java.util.Objects.requireNonNull; - -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.MoreObjects; -import com.google.common.base.MoreObjects.ToStringHelper; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.VarHandle; -import java.util.Map; -import java.util.Map.Entry; -import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.mdsal.common.api.TransactionDatastoreMismatchException; -import org.opendaylight.mdsal.dom.api.DOMDataTreeTransaction; -import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransaction; -import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionFactory; - -public abstract class AbstractDOMBrokerTransaction implements DOMDataTreeTransaction { - - private static final VarHandle BACKING_TX; - - static { - try { - BACKING_TX = MethodHandles.lookup() - .findVarHandle(AbstractDOMBrokerTransaction.class, "backingTx", Entry.class); - } catch (NoSuchFieldException | IllegalAccessException e) { - throw new ExceptionInInitializerError(e); - } - } - - private final @NonNull Object identifier; - private final Map storeTxFactories; - - @SuppressFBWarnings(value = "UWF_UNWRITTEN_FIELD", - justification = "https://github.com/spotbugs/spotbugs/issues/2749") - private volatile Entry backingTx; - - /** - * Creates new transaction. - * - * @param identifier Identifier of transaction. - */ - protected AbstractDOMBrokerTransaction(final Object identifier, - final Map storeTxFactories) { - this.identifier = requireNonNull(identifier, "Identifier should not be null"); - this.storeTxFactories = requireNonNull(storeTxFactories, "Store Transaction Factories should not be null"); - checkArgument(!storeTxFactories.isEmpty(), "Store Transaction Factories should not be empty"); - } - - /** - * Returns sub-transaction associated with supplied key. - * - * @param datastoreType the data store type - * @return the sub-transaction - * @throws NullPointerException if datastoreType is null - * @throws IllegalArgumentException if no sub-transaction is associated with datastoreType. - * @throws TransactionDatastoreMismatchException if datastoreType mismatches the one used at first access - */ - protected final T getSubtransaction(final LogicalDatastoreType datastoreType) { - requireNonNull(datastoreType, "datastoreType must not be null."); - - var entry = backingTx; - if (entry == null) { - if (!storeTxFactories.containsKey(datastoreType)) { - throw new IllegalArgumentException(datastoreType + " is not supported"); - } - final var tx = createTransaction(datastoreType); - final var newEntry = Map.entry(datastoreType, tx); - final var witness = (Entry) BACKING_TX.compareAndExchange(this, null, newEntry); - if (witness != null) { - tx.close(); - entry = witness; - } else { - entry = newEntry; - } - } - - final var expected = entry.getKey(); - if (expected != datastoreType) { - throw new TransactionDatastoreMismatchException(expected, datastoreType); - } - return entry.getValue(); - } - - /** - * Returns sub-transaction if initialized. - */ - @VisibleForTesting - protected T getSubtransaction() { - final Entry entry; - return (entry = backingTx) == null ? null : entry.getValue(); - } - - protected abstract T createTransaction(LogicalDatastoreType datastoreType); - - @Override - public Object getIdentifier() { - return identifier; - } - - @SuppressWarnings("checkstyle:IllegalCatch") - protected void closeSubtransaction() { - final var local = backingTx; - if (local != null) { - try { - local.getValue().close(); - } catch (Exception e) { - throw new IllegalStateException("Uncaught exception occurred during closing transaction", e); - } - } - } - - protected DOMStoreTransactionFactory getTxFactory(final LogicalDatastoreType type) { - return storeTxFactories.get(type); - } - - @Override - public final String toString() { - return addToStringAttributes(MoreObjects.toStringHelper(this).omitNullValues()).toString(); - } - - protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { - return toStringHelper.add("identifier", identifier); - } -} diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBrokerWriteTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBrokerWriteTransaction.java deleted file mode 100644 index 401121552d..0000000000 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBrokerWriteTransaction.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * 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.controller.cluster.databroker; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkState; -import static java.util.Objects.requireNonNull; -import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFailedFluentFuture; - -import com.google.common.base.MoreObjects.ToStringHelper; -import com.google.common.util.concurrent.FluentFuture; -import com.google.common.util.concurrent.Futures; -import java.util.Map; -import java.util.concurrent.Future; -import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; -import org.opendaylight.mdsal.common.api.CommitInfo; -import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; -import org.opendaylight.mdsal.dom.broker.TransactionCommitFailedExceptionMapper; -import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionFactory; -import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public abstract class AbstractDOMBrokerWriteTransaction - extends AbstractDOMBrokerTransaction implements DOMDataTreeWriteTransaction { - - @SuppressWarnings("rawtypes") - private static final AtomicReferenceFieldUpdater - IMPL_UPDATER = AtomicReferenceFieldUpdater.newUpdater(AbstractDOMBrokerWriteTransaction.class, - AbstractDOMTransactionFactory.class, "commitImpl"); - @SuppressWarnings("rawtypes") - private static final AtomicReferenceFieldUpdater FUTURE_UPDATER = - AtomicReferenceFieldUpdater.newUpdater(AbstractDOMBrokerWriteTransaction.class, Future.class, - "commitFuture"); - private static final Logger LOG = LoggerFactory.getLogger(AbstractDOMBrokerWriteTransaction.class); - private static final Future CANCELLED_FUTURE = Futures.immediateCancelledFuture(); - - /** - * Implementation of real commit. It also acts as an indication that - * the transaction is running -- which we flip atomically using - * {@link #IMPL_UPDATER}. - */ - private volatile AbstractDOMTransactionFactory commitImpl; - - /** - * Future task of transaction commit. It starts off as null, but is - * set appropriately on {@link #submit()} and {@link #cancel()} via - * {@link AtomicReferenceFieldUpdater#lazySet(Object, Object)}. - *

- * Lazy set is safe for use because it is only referenced to in the - * {@link #cancel()} slow path, where we will busy-wait for it. The - * fast path gets the benefit of a store-store barrier instead of the - * usual store-load barrier. - */ - private volatile Future commitFuture; - - protected AbstractDOMBrokerWriteTransaction(final Object identifier, - final Map storeTxFactories, - final AbstractDOMTransactionFactory commitImpl) { - super(identifier, storeTxFactories); - this.commitImpl = requireNonNull(commitImpl, "commitImpl must not be null."); - } - - @Override - public void put(final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode data) { - checkRunning(commitImpl); - checkInstanceIdentifierReferencesData(path,data); - getSubtransaction(store).write(path, data); - } - - private static void checkInstanceIdentifierReferencesData(final YangInstanceIdentifier path, - final NormalizedNode data) { - checkArgument(data != null, "Attempted to store null data at %s", path); - final PathArgument lastArg = path.getLastPathArgument(); - if (lastArg != null) { - checkArgument(lastArg.equals(data.name()), - "Instance identifier references %s but data identifier is %s", lastArg, data); - } - } - - @Override - public void delete(final LogicalDatastoreType store, final YangInstanceIdentifier path) { - checkRunning(commitImpl); - getSubtransaction(store).delete(path); - } - - @Override - public void merge(final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode data) { - checkRunning(commitImpl); - checkInstanceIdentifierReferencesData(path, data); - getSubtransaction(store).merge(path, data); - } - - @Override - public boolean cancel() { - final AbstractDOMTransactionFactory impl = IMPL_UPDATER.getAndSet(this, null); - if (impl != null) { - LOG.trace("Transaction {} cancelled before submit", getIdentifier()); - FUTURE_UPDATER.lazySet(this, CANCELLED_FUTURE); - closeSubtransaction(); - return true; - } - - // The transaction is in process of being submitted or cancelled. Busy-wait - // for the corresponding future. - Future future; - do { - future = commitFuture; - } - while (future == null); - - return future.cancel(false); - } - - @Override - @SuppressWarnings("checkstyle:IllegalCatch") - public FluentFuture commit() { - final AbstractDOMTransactionFactory impl = IMPL_UPDATER.getAndSet(this, null); - checkRunning(impl); - - FluentFuture ret; - final var tx = getSubtransaction(); - if (tx == null) { - ret = CommitInfo.emptyFluentFuture(); - } else { - try { - ret = impl.commit(this, tx.ready()); - } catch (RuntimeException e) { - ret = immediateFailedFluentFuture(TransactionCommitFailedExceptionMapper.COMMIT_ERROR_MAPPER.apply(e)); - } - } - - FUTURE_UPDATER.lazySet(this, ret); - return ret; - } - - private void checkRunning(final AbstractDOMTransactionFactory impl) { - checkState(impl != null, "Transaction %s is no longer running", getIdentifier()); - } - - @Override - protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { - return super.addToStringAttributes(toStringHelper).add("running", commitImpl == null); - } -} diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMTransactionFactory.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMTransactionFactory.java deleted file mode 100644 index e41df8dfa2..0000000000 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMTransactionFactory.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * 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.controller.cluster.databroker; - -import com.google.common.base.Preconditions; -import com.google.common.util.concurrent.FluentFuture; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.VarHandle; -import java.util.EnumMap; -import java.util.Map; -import org.opendaylight.mdsal.common.api.CommitInfo; -import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction; -import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction; -import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; -import org.opendaylight.mdsal.dom.spi.store.DOMStoreThreePhaseCommitCohort; -import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public abstract class AbstractDOMTransactionFactory implements AutoCloseable { - private static final Logger LOG = LoggerFactory.getLogger(AbstractDOMTransactionFactory.class); - private static final VarHandle CLOSED; - - static { - try { - CLOSED = MethodHandles.lookup().findVarHandle(AbstractDOMTransactionFactory.class, "closed", boolean.class); - } catch (NoSuchFieldException | IllegalAccessException e) { - throw new ExceptionInInitializerError(e); - } - } - - private final Map storeTxFactories; - - private volatile boolean closed; - - protected AbstractDOMTransactionFactory(final Map txFactories) { - this.storeTxFactories = new EnumMap<>(txFactories); - } - - /** - * Implementations must return unique identifier for each and every call of - * this method. - * - * @return new Unique transaction identifier. - */ - protected abstract Object newTransactionIdentifier(); - - /** - * Submits a transaction asynchronously for commit. - * - * @param transaction the transaction to submit - * @param cohort the associated cohort - * @return a resulting Future - */ - protected abstract FluentFuture commit(DOMDataTreeWriteTransaction transaction, - DOMStoreThreePhaseCommitCohort cohort); - - /** - * Creates a new read-only transaction. - * - * @return the transaction instance - */ - public final DOMDataTreeReadTransaction newReadOnlyTransaction() { - checkNotClosed(); - - return new DOMBrokerReadOnlyTransaction(newTransactionIdentifier(), storeTxFactories); - } - - - /** - * Creates a new write-only transaction. - * - * @return the transaction instance - */ - public final DOMDataTreeWriteTransaction newWriteOnlyTransaction() { - checkNotClosed(); - - return new DOMBrokerWriteOnlyTransaction(newTransactionIdentifier(), storeTxFactories, this); - } - - - /** - * Creates a new read-write transaction. - * - * @return the transaction instance - */ - public final DOMDataTreeReadWriteTransaction newReadWriteTransaction() { - checkNotClosed(); - - return new DOMBrokerReadWriteTransaction(newTransactionIdentifier(), storeTxFactories, this); - } - - /** - * Convenience accessor of backing factories intended to be used only by - * finalization of this class. - * - * Note: - * Finalization of this class may want to access other functionality of - * supplied Transaction factories. - * - * @return Map of backing transaction factories. - */ - public final Map getTxFactories() { - return storeTxFactories; - } - - /** - * Checks if instance is not closed. - * - * @throws IllegalStateException If instance of this class was closed. - * - */ - protected final void checkNotClosed() { - Preconditions.checkState(!closed, "Transaction factory was closed. No further operations allowed."); - } - - @Override - public void close() { - if (!CLOSED.compareAndSet(this, false, true)) { - LOG.warn("Transaction factory was already closed", new Throwable()); - } - } -} diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBroker.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBroker.java index cef367fd3e..d208fcd5ea 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBroker.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBroker.java @@ -9,9 +9,9 @@ package org.opendaylight.controller.cluster.databroker; import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; -import static org.opendaylight.mdsal.dom.broker.TransactionCommitFailedExceptionMapper.CAN_COMMIT_ERROR_MAPPER; -import static org.opendaylight.mdsal.dom.broker.TransactionCommitFailedExceptionMapper.COMMIT_ERROR_MAPPER; -import static org.opendaylight.mdsal.dom.broker.TransactionCommitFailedExceptionMapper.PRE_COMMIT_MAPPER; +import static org.opendaylight.mdsal.dom.spi.TransactionCommitFailedExceptionMapper.CAN_COMMIT_ERROR_MAPPER; +import static org.opendaylight.mdsal.dom.spi.TransactionCommitFailedExceptionMapper.COMMIT_ERROR_MAPPER; +import static org.opendaylight.mdsal.dom.spi.TransactionCommitFailedExceptionMapper.PRE_COMMIT_MAPPER; import com.google.common.annotations.Beta; import com.google.common.util.concurrent.AbstractFuture; @@ -28,7 +28,8 @@ import org.opendaylight.mdsal.common.api.DataStoreUnavailableException; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.common.api.TransactionCommitFailedException; import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; -import org.opendaylight.mdsal.dom.broker.TransactionCommitFailedExceptionMapper; +import org.opendaylight.mdsal.dom.spi.AbstractDOMDataBroker; +import org.opendaylight.mdsal.dom.spi.TransactionCommitFailedExceptionMapper; import org.opendaylight.mdsal.dom.spi.store.DOMStore; import org.opendaylight.mdsal.dom.spi.store.DOMStoreThreePhaseCommitCohort; import org.opendaylight.yangtools.util.DurationStatisticsTracker; @@ -44,7 +45,7 @@ import org.slf4j.LoggerFactory; * @author Thomas Pantelis */ @Beta -public class ConcurrentDOMDataBroker extends AbstractDOMBroker { +public class ConcurrentDOMDataBroker extends AbstractDOMDataBroker { private static final Logger LOG = LoggerFactory.getLogger(ConcurrentDOMDataBroker.class); private static final String CAN_COMMIT = "CAN_COMMIT"; private static final String PRE_COMMIT = "PRE_COMMIT"; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/DOMBrokerReadOnlyTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/DOMBrokerReadOnlyTransaction.java deleted file mode 100644 index 38c46a4539..0000000000 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/DOMBrokerReadOnlyTransaction.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * 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.controller.cluster.databroker; - -import com.google.common.util.concurrent.FluentFuture; -import java.util.Map; -import java.util.Optional; -import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction; -import org.opendaylight.mdsal.dom.spi.store.DOMStoreReadTransaction; -import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionFactory; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; - -public class DOMBrokerReadOnlyTransaction - extends AbstractDOMBrokerTransaction implements DOMDataTreeReadTransaction { - - /** - * Creates new composite Transactions. - * - * @param identifier Identifier of transaction. - */ - protected DOMBrokerReadOnlyTransaction(final Object identifier, - final Map storeTxFactories) { - super(identifier, storeTxFactories); - } - - @Override - public FluentFuture> read(final LogicalDatastoreType store, - final YangInstanceIdentifier path) { - return getSubtransaction(store).read(path); - } - - @Override - public FluentFuture exists(final LogicalDatastoreType store, final YangInstanceIdentifier path) { - return getSubtransaction(store).exists(path); - } - - @Override - public void close() { - closeSubtransaction(); - } - - @Override - protected DOMStoreReadTransaction createTransaction(final LogicalDatastoreType key) { - return getTxFactory(key).newReadOnlyTransaction(); - } -} diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/DOMBrokerReadWriteTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/DOMBrokerReadWriteTransaction.java deleted file mode 100644 index d9031c2d62..0000000000 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/DOMBrokerReadWriteTransaction.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * 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.controller.cluster.databroker; - -import com.google.common.util.concurrent.FluentFuture; -import java.util.Map; -import java.util.Optional; -import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction; -import org.opendaylight.mdsal.dom.spi.store.DOMStoreReadWriteTransaction; -import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionFactory; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; - -public class DOMBrokerReadWriteTransaction extends AbstractDOMBrokerWriteTransaction - implements DOMDataTreeReadWriteTransaction { - - /** - * Constructs an instance. - * - * @param identifier identifier of transaction. - * @param storeTxFactories the backing transaction store factories - */ - protected DOMBrokerReadWriteTransaction(final Object identifier, - final Map storeTxFactories, - final AbstractDOMTransactionFactory commitImpl) { - super(identifier, storeTxFactories, commitImpl); - } - - @Override - public FluentFuture> read(final LogicalDatastoreType store, - final YangInstanceIdentifier path) { - return getSubtransaction(store).read(path); - } - - @Override - public FluentFuture exists(final LogicalDatastoreType store, final YangInstanceIdentifier path) { - return getSubtransaction(store).exists(path); - } - - @Override - protected DOMStoreReadWriteTransaction createTransaction(final LogicalDatastoreType key) { - return getTxFactory(key).newReadWriteTransaction(); - } -} diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/DOMBrokerTransactionChain.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/DOMBrokerTransactionChain.java deleted file mode 100644 index 12e6727df8..0000000000 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/DOMBrokerTransactionChain.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * 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.controller.cluster.databroker; - -import static com.google.common.base.Preconditions.checkState; -import static java.util.Objects.requireNonNull; - -import com.google.common.util.concurrent.FluentFuture; -import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.MoreExecutors; -import java.util.Map; -import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; -import java.util.concurrent.atomic.AtomicLong; -import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; -import org.opendaylight.mdsal.common.api.CommitInfo; -import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -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.dom.spi.store.DOMStoreThreePhaseCommitCohort; -import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionChain; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -final class DOMBrokerTransactionChain extends AbstractDOMTransactionFactory - implements DOMTransactionChain { - private enum State { - RUNNING, - CLOSING, - CLOSED, - FAILED, - } - - private static final AtomicIntegerFieldUpdater COUNTER_UPDATER = - AtomicIntegerFieldUpdater.newUpdater(DOMBrokerTransactionChain.class, "counter"); - private static final AtomicReferenceFieldUpdater STATE_UPDATER = - AtomicReferenceFieldUpdater.newUpdater(DOMBrokerTransactionChain.class, State.class, "state"); - private static final Logger LOG = LoggerFactory.getLogger(DOMBrokerTransactionChain.class); - private final AtomicLong txNum = new AtomicLong(); - private final AbstractDOMBroker broker; - private final DOMTransactionChainListener listener; - private final long chainId; - - private volatile State state = State.RUNNING; - private volatile int counter = 0; - - /** - * Constructs an instance. - * - * @param chainId - * ID of transaction chain - * @param chains - * Backing {@link DOMStoreTransactionChain}s. - * @param listener - * Listener, which listens on transaction chain events. - * @throws NullPointerException - * If any of arguments is null. - */ - DOMBrokerTransactionChain(final long chainId, final Map chains, - final AbstractDOMBroker broker, final DOMTransactionChainListener listener) { - super(chains); - this.chainId = chainId; - this.broker = requireNonNull(broker); - this.listener = requireNonNull(listener); - } - - private void checkNotFailed() { - checkState(state != State.FAILED, "Transaction chain has failed"); - } - - @Override - protected Object newTransactionIdentifier() { - return "DOM-CHAIN-" + chainId + "-" + txNum.getAndIncrement(); - } - - @Override - public FluentFuture commit( - final DOMDataTreeWriteTransaction transaction, final DOMStoreThreePhaseCommitCohort cohort) { - checkNotFailed(); - checkNotClosed(); - - final FluentFuture ret = broker.commit(transaction, cohort); - - COUNTER_UPDATER.incrementAndGet(this); - ret.addCallback(new FutureCallback() { - @Override - public void onSuccess(final CommitInfo result) { - transactionCompleted(); - } - - @Override - public void onFailure(final Throwable failure) { - transactionFailed(transaction, failure); - } - }, MoreExecutors.directExecutor()); - - return ret; - } - - @Override - public void close() { - final boolean success = STATE_UPDATER.compareAndSet(this, State.RUNNING, State.CLOSING); - if (!success) { - LOG.debug("Chain {} is no longer running", this); - return; - } - - super.close(); - for (DOMStoreTransactionChain subChain : getTxFactories().values()) { - subChain.close(); - } - - if (counter == 0) { - finishClose(); - } - } - - private void finishClose() { - state = State.CLOSED; - listener.onTransactionChainSuccessful(this); - } - - private void transactionCompleted() { - if (COUNTER_UPDATER.decrementAndGet(this) == 0 && state == State.CLOSING) { - finishClose(); - } - } - - private void transactionFailed(final DOMDataTreeWriteTransaction tx, final Throwable cause) { - state = State.FAILED; - LOG.debug("Transaction chain {} failed.", this, cause); - listener.onTransactionChainFailed(this, tx, cause); - } -} diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/DOMBrokerWriteOnlyTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/DOMBrokerWriteOnlyTransaction.java deleted file mode 100644 index 2f0915dfce..0000000000 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/DOMBrokerWriteOnlyTransaction.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2015 Huawei Technologies Co. Ltd. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * 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.controller.cluster.databroker; - -import java.util.Map; -import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionFactory; -import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction; - -public class DOMBrokerWriteOnlyTransaction extends AbstractDOMBrokerWriteTransaction { - - /** - * Constructs an instance. - * - * @param identifier identifier of transaction. - * @param storeTxFactories the backing transaction store factories - */ - public DOMBrokerWriteOnlyTransaction(Object identifier, - Map storeTxFactories, - AbstractDOMTransactionFactory commitImpl) { - super(identifier, storeTxFactories, commitImpl); - } - - @Override - protected DOMStoreWriteTransaction createTransaction(LogicalDatastoreType key) { - return getTxFactory(key).newWriteOnlyTransaction(); - } - -} diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/OSGiDOMDataBroker.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/OSGiDOMDataBroker.java index 3395c7268f..a86d3143c5 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/OSGiDOMDataBroker.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/OSGiDOMDataBroker.java @@ -8,19 +8,17 @@ package org.opendaylight.controller.cluster.databroker; import com.google.common.annotations.Beta; -import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.ImmutableMap; +import java.util.Collection; import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; import org.opendaylight.controller.md.sal.common.util.jmx.ThreadExecutorStatsMXBeanImpl; 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.DOMDataTreeReadTransaction; import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction; 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.dom.spi.store.DOMStore; import org.opendaylight.yangtools.util.DurationStatisticsTracker; import org.opendaylight.yangtools.util.concurrent.SpecialExecutors; @@ -75,18 +73,18 @@ public final class OSGiDOMDataBroker implements DOMDataBroker { } @Override - public ClassToInstanceMap getExtensions() { - return delegate.getExtensions(); + public Collection supportedExtensions() { + return delegate.supportedExtensions(); } @Override - public DOMTransactionChain createTransactionChain(final DOMTransactionChainListener listener) { - return delegate.createTransactionChain(listener); + public DOMTransactionChain createTransactionChain() { + return delegate.createTransactionChain(); } @Override - public DOMTransactionChain createMergingTransactionChain(final DOMTransactionChainListener listener) { - return delegate.createMergingTransactionChain(listener); + public DOMTransactionChain createMergingTransactionChain() { + return delegate.createMergingTransactionChain(); } @Activate diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/FailedDataTreeModification.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/FailedDataTreeModification.java index 50cd0bacd0..63dbc92856 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/FailedDataTreeModification.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/FailedDataTreeModification.java @@ -17,7 +17,6 @@ import org.opendaylight.yangtools.yang.data.tree.api.CursorAwareDataTreeModifica import org.opendaylight.yangtools.yang.data.tree.api.DataTreeModificationCursor; import org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.spi.AbstractEffectiveModelContextProvider; /** * A {@link CursorAwareDataTreeModification} which does not really do anything and throws an @@ -25,17 +24,13 @@ import org.opendaylight.yangtools.yang.model.spi.AbstractEffectiveModelContextPr * {@link DataTreeSnapshot#newModification()} fails, see {@link LocalReadWriteProxyTransaction} for details. Surrounding * code should guard against invocation of most of these methods. */ -final class FailedDataTreeModification extends AbstractEffectiveModelContextProvider - implements CursorAwareDataTreeModification { - private final @NonNull Exception cause; +record FailedDataTreeModification( + @NonNull EffectiveModelContext modelContext, + @NonNull Exception cause) implements CursorAwareDataTreeModification { - FailedDataTreeModification(final EffectiveModelContext context, final Exception cause) { - super(context); - this.cause = requireNonNull(cause); - } - - @NonNull Exception cause() { - return cause; + FailedDataTreeModification { + requireNonNull(modelContext); + requireNonNull(cause); } @Override diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadWriteProxyTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadWriteProxyTransaction.java index e3c46c549c..47ae6a2bc7 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadWriteProxyTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadWriteProxyTransaction.java @@ -107,7 +107,7 @@ final class LocalReadWriteProxyTransaction extends LocalProxyTransaction { } catch (Exception e) { LOG.debug("Failed to instantiate modification for {}", identifier, e); recordedFailure = e; - mod = new FailedDataTreeModification(snapshot.getEffectiveModelContext(), e); + mod = new FailedDataTreeModification(snapshot.modelContext(), e); } modification = mod; } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractDataStore.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractDataStore.java index 7be6afe923..b24481615e 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractDataStore.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractDataStore.java @@ -7,7 +7,6 @@ */ package org.opendaylight.controller.cluster.datastore; -import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; import akka.actor.ActorRef; @@ -22,10 +21,10 @@ import com.google.common.util.concurrent.SettableFuture; import com.google.common.util.concurrent.Uninterruptibles; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.List; -import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.controller.cluster.access.concepts.ClientIdentifier; import org.opendaylight.controller.cluster.common.actor.Dispatchers; import org.opendaylight.controller.cluster.databroker.actors.dds.DataStoreClient; @@ -37,19 +36,16 @@ import org.opendaylight.controller.cluster.datastore.shardmanager.AbstractShardM import org.opendaylight.controller.cluster.datastore.shardmanager.ShardManagerCreator; import org.opendaylight.controller.cluster.datastore.utils.ActorUtils; import org.opendaylight.controller.cluster.datastore.utils.PrimaryShardInfoFutureCache; -import org.opendaylight.mdsal.dom.api.ClusteredDOMDataTreeChangeListener; +import org.opendaylight.mdsal.dom.api.DOMDataBroker.CommitCohortExtension; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohort; -import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistration; -import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistry; import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; import org.opendaylight.mdsal.dom.spi.store.DOMStoreTreeChangePublisher; -import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import scala.concurrent.duration.Duration; @@ -57,10 +53,9 @@ import scala.concurrent.duration.Duration; /** * Base implementation of a distributed DOMStore. */ -public abstract class AbstractDataStore implements DistributedDataStoreInterface, EffectiveModelContextListener, - DatastoreContextPropertiesUpdater.Listener, DOMStoreTreeChangePublisher, - DOMDataTreeCommitCohortRegistry, AutoCloseable { - +public abstract class AbstractDataStore implements DistributedDataStoreInterface, + DatastoreContextPropertiesUpdater.Listener, DOMStoreTreeChangePublisher, CommitCohortExtension, + AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(AbstractDataStore.class); private final SettableFuture readinessFuture = SettableFuture.create(); @@ -153,8 +148,13 @@ public abstract class AbstractDataStore implements DistributedDataStoreInterface } @Override - public ListenerRegistration registerTreeChangeListener( - final YangInstanceIdentifier treeId, final L listener) { + public Registration registerTreeChangeListener(final YangInstanceIdentifier treeId, + final DOMDataTreeChangeListener listener) { + return registerTreeChangeListener(treeId, listener, true); + } + + private @NonNull Registration registerTreeChangeListener(final YangInstanceIdentifier treeId, + final DOMDataTreeChangeListener listener, final boolean clustered) { requireNonNull(treeId, "treeId should not be null"); requireNonNull(listener, "listener should not be null"); @@ -165,41 +165,44 @@ public abstract class AbstractDataStore implements DistributedDataStoreInterface if (treeId.isEmpty()) { // User is targeting root of the datastore. If there is more than one shard, we have to register with them // all and perform data composition. - final Set shardNames = actorUtils.getConfiguration().getAllShardNames(); + final var shardNames = actorUtils.getConfiguration().getAllShardNames(); if (shardNames.size() > 1) { - checkArgument(listener instanceof ClusteredDOMDataTreeChangeListener, - "Cannot listen on root without non-clustered listener %s", listener); + if (!clustered) { + throw new IllegalArgumentException( + "Cannot listen on root without non-clustered listener " + listener); + } return new RootDataTreeChangeListenerProxy<>(actorUtils, listener, shardNames); } } - final String shardName = actorUtils.getShardStrategyFactory().getStrategy(treeId).findShard(treeId); + final var shardName = actorUtils.getShardStrategyFactory().getStrategy(treeId).findShard(treeId); LOG.debug("Registering tree listener: {} for tree: {} shard: {}", listener, treeId, shardName); - final DataTreeChangeListenerProxy listenerRegistrationProxy = - new DataTreeChangeListenerProxy<>(actorUtils, listener, treeId); - listenerRegistrationProxy.init(shardName); + return DataTreeChangeListenerProxy.of(actorUtils, listener, treeId, clustered, shardName); + } - return listenerRegistrationProxy; + @Override + @Deprecated(since = "9.0.0", forRemoval = true) + public Registration registerLegacyTreeChangeListener(final YangInstanceIdentifier treeId, + final DOMDataTreeChangeListener listener) { + return registerTreeChangeListener(treeId, listener, false); } @Override - public DOMDataTreeCommitCohortRegistration registerCommitCohort( - final DOMDataTreeIdentifier subtree, final C cohort) { - YangInstanceIdentifier treeId = requireNonNull(subtree, "subtree should not be null").getRootIdentifier(); + public Registration registerCommitCohort(final DOMDataTreeIdentifier subtree, + final DOMDataTreeCommitCohort cohort) { + YangInstanceIdentifier treeId = requireNonNull(subtree, "subtree should not be null").path(); requireNonNull(cohort, "listener should not be null"); final String shardName = actorUtils.getShardStrategyFactory().getStrategy(treeId).findShard(treeId); LOG.debug("Registering cohort: {} for tree: {} shard: {}", cohort, treeId, shardName); - DataTreeCohortRegistrationProxy cohortProxy = - new DataTreeCohortRegistrationProxy<>(actorUtils, subtree, cohort); + final var cohortProxy = new DataTreeCohortRegistrationProxy<>(actorUtils, subtree, cohort); cohortProxy.init(shardName); return cohortProxy; } - @Override public void onModelContextUpdated(final EffectiveModelContext newModelContext) { actorUtils.setSchemaContext(newModelContext); } @@ -333,36 +336,27 @@ public abstract class AbstractDataStore implements DistributedDataStoreInterface } @Override - @SuppressWarnings("unchecked") - public ListenerRegistration registerProxyListener( - final YangInstanceIdentifier shardLookup, final YangInstanceIdentifier insideShard, - final DOMDataTreeChangeListener delegate) { - + public Registration registerProxyListener(final YangInstanceIdentifier shardLookup, + final YangInstanceIdentifier insideShard, final DOMDataTreeChangeListener delegate) { requireNonNull(shardLookup, "shardLookup should not be null"); requireNonNull(insideShard, "insideShard should not be null"); requireNonNull(delegate, "delegate should not be null"); - final String shardName = actorUtils.getShardStrategyFactory().getStrategy(shardLookup).findShard(shardLookup); - LOG.debug("Registering tree listener: {} for tree: {} shard: {}, path inside shard: {}", - delegate,shardLookup, shardName, insideShard); - - // wrap this in the ClusteredDOMDataTreeChangeLister interface - // since we always want clustered registration - final DataTreeChangeListenerProxy listenerRegistrationProxy = - new DataTreeChangeListenerProxy<>(actorUtils, new ClusteredDOMDataTreeChangeListener() { - @Override - public void onDataTreeChanged(final List changes) { - delegate.onDataTreeChanged(changes); - } - - @Override - public void onInitialData() { - delegate.onInitialData(); - } - }, insideShard); - listenerRegistrationProxy.init(shardName); - - return (ListenerRegistration) listenerRegistrationProxy; + final var shardName = actorUtils.getShardStrategyFactory().getStrategy(shardLookup).findShard(shardLookup); + LOG.debug("Registering tree listener: {} for tree: {} shard: {}, path inside shard: {}", delegate, shardLookup, + shardName, insideShard); + + return DataTreeChangeListenerProxy.of(actorUtils, new DOMDataTreeChangeListener() { + @Override + public void onDataTreeChanged(final List changes) { + delegate.onDataTreeChanged(changes); + } + + @Override + public void onInitialData() { + delegate.onInitialData(); + } + }, insideShard, true, shardName); } private Duration initialSettleTime() { diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerProxy.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerProxy.java index 37479871c7..be849284e7 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerProxy.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerProxy.java @@ -14,19 +14,20 @@ import akka.actor.ActorSelection; import akka.actor.PoisonPill; import akka.dispatch.OnComplete; import com.google.common.annotations.VisibleForTesting; +import com.google.common.util.concurrent.MoreExecutors; +import java.util.concurrent.Executor; import org.checkerframework.checker.lock.qual.GuardedBy; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.controller.cluster.datastore.exceptions.LocalShardNotFoundException; import org.opendaylight.controller.cluster.datastore.messages.CloseDataTreeNotificationListenerRegistration; import org.opendaylight.controller.cluster.datastore.messages.RegisterDataTreeChangeListener; import org.opendaylight.controller.cluster.datastore.messages.RegisterDataTreeNotificationListenerReply; import org.opendaylight.controller.cluster.datastore.utils.ActorUtils; -import org.opendaylight.mdsal.dom.api.ClusteredDOMDataTreeChangeListener; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; -import org.opendaylight.yangtools.concepts.AbstractListenerRegistration; +import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import scala.concurrent.Future; /** * Proxy class for holding required state to lazily instantiate a listener registration with an @@ -34,28 +35,61 @@ import scala.concurrent.Future; * * @param listener type */ -final class DataTreeChangeListenerProxy extends AbstractListenerRegistration { +final class DataTreeChangeListenerProxy extends AbstractObjectRegistration { private static final Logger LOG = LoggerFactory.getLogger(DataTreeChangeListenerProxy.class); private final ActorRef dataChangeListenerActor; private final ActorUtils actorUtils; private final YangInstanceIdentifier registeredPath; + private final boolean clustered; @GuardedBy("this") private ActorSelection listenerRegistrationActor; - DataTreeChangeListenerProxy(final ActorUtils actorUtils, final T listener, - final YangInstanceIdentifier registeredPath) { + @VisibleForTesting + private DataTreeChangeListenerProxy(final ActorUtils actorUtils, final DOMDataTreeChangeListener listener, + final YangInstanceIdentifier registeredPath, final boolean clustered, final String shardName) { super(listener); this.actorUtils = requireNonNull(actorUtils); this.registeredPath = requireNonNull(registeredPath); - this.dataChangeListenerActor = actorUtils.getActorSystem().actorOf( + this.clustered = clustered; + dataChangeListenerActor = actorUtils.getActorSystem().actorOf( DataTreeChangeListenerActor.props(getInstance(), registeredPath) .withDispatcher(actorUtils.getNotificationDispatcherPath())); - LOG.debug("{}: Created actor {} for DTCL {}", actorUtils.getDatastoreContext().getLogicalStoreType(), dataChangeListenerActor, listener); } + static @NonNull DataTreeChangeListenerProxy of(final ActorUtils actorUtils, + final DOMDataTreeChangeListener listener, final YangInstanceIdentifier registeredPath, + final boolean clustered, final String shardName) { + return ofTesting(actorUtils, listener, registeredPath, clustered, shardName, MoreExecutors.directExecutor()); + } + + @VisibleForTesting + static @NonNull DataTreeChangeListenerProxy ofTesting(final ActorUtils actorUtils, + final DOMDataTreeChangeListener listener, final YangInstanceIdentifier registeredPath, + final boolean clustered, final String shardName, final Executor executor) { + final var ret = new DataTreeChangeListenerProxy(actorUtils, listener, registeredPath, clustered, shardName); + executor.execute(() -> { + LOG.debug("{}: Starting discovery of shard {}", ret.logContext(), shardName); + actorUtils.findLocalShardAsync(shardName).onComplete(new OnComplete<>() { + @Override + public void onComplete(final Throwable failure, final ActorRef shard) { + if (failure instanceof LocalShardNotFoundException) { + LOG.debug("{}: No local shard found for {} - DataTreeChangeListener {} at path {} cannot be " + + "registered", ret.logContext(), shardName, listener, registeredPath); + } else if (failure != null) { + LOG.error("{}: Failed to find local shard {} - DataTreeChangeListener {} at path {} cannot be " + + "registered", ret.logContext(), shardName, listener, registeredPath, failure); + } else { + ret.doRegistration(shard); + } + } + }, actorUtils.getClientDispatcher()); + }); + return ret; + } + @Override protected synchronized void removeRegistration() { if (listenerRegistrationActor != null) { @@ -67,25 +101,6 @@ final class DataTreeChangeListenerProxy ext dataChangeListenerActor.tell(PoisonPill.getInstance(), ActorRef.noSender()); } - void init(final String shardName) { - Future findFuture = actorUtils.findLocalShardAsync(shardName); - findFuture.onComplete(new OnComplete() { - @Override - public void onComplete(final Throwable failure, final ActorRef shard) { - if (failure instanceof LocalShardNotFoundException) { - LOG.debug("{}: No local shard found for {} - DataTreeChangeListener {} at path {} " - + "cannot be registered", logContext(), shardName, getInstance(), registeredPath); - } else if (failure != null) { - LOG.error("{}: Failed to find local shard {} - DataTreeChangeListener {} at path {} " - + "cannot be registered", logContext(), shardName, getInstance(), registeredPath, - failure); - } else { - doRegistration(shard); - } - } - }, actorUtils.getClientDispatcher()); - } - private void setListenerRegistrationActor(final ActorSelection actor) { if (actor == null) { LOG.debug("{}: Ignoring null actor on {}", logContext(), this); @@ -94,7 +109,7 @@ final class DataTreeChangeListenerProxy ext synchronized (this) { if (!isClosed()) { - this.listenerRegistrationActor = actor; + listenerRegistrationActor = actor; return; } } @@ -104,25 +119,20 @@ final class DataTreeChangeListenerProxy ext } private void doRegistration(final ActorRef shard) { - - Future future = actorUtils.executeOperationAsync(shard, - new RegisterDataTreeChangeListener(registeredPath, dataChangeListenerActor, - getInstance() instanceof ClusteredDOMDataTreeChangeListener), - actorUtils.getDatastoreContext().getShardInitializationTimeout()); - - future.onComplete(new OnComplete<>() { - @Override - public void onComplete(final Throwable failure, final Object result) { - if (failure != null) { - LOG.error("{}: Failed to register DataTreeChangeListener {} at path {}", logContext(), + actorUtils.executeOperationAsync(shard, + new RegisterDataTreeChangeListener(registeredPath, dataChangeListenerActor, clustered), + actorUtils.getDatastoreContext().getShardInitializationTimeout()).onComplete(new OnComplete<>() { + @Override + public void onComplete(final Throwable failure, final Object result) { + if (failure != null) { + LOG.error("{}: Failed to register DataTreeChangeListener {} at path {}", logContext(), getInstance(), registeredPath, failure); - } else { - RegisterDataTreeNotificationListenerReply reply = (RegisterDataTreeNotificationListenerReply)result; - setListenerRegistrationActor(actorUtils.actorSelection( - reply.getListenerRegistrationPath())); + } else { + setListenerRegistrationActor(actorUtils.actorSelection( + ((RegisterDataTreeNotificationListenerReply) result).getListenerRegistrationPath())); + } } - } - }, actorUtils.getClientDispatcher()); + }, actorUtils.getClientDispatcher()); } @VisibleForTesting diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerSupport.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerSupport.java index 09586b270b..f5e1d1374b 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerSupport.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerSupport.java @@ -23,9 +23,9 @@ import org.slf4j.LoggerFactory; final class DataTreeChangeListenerSupport extends LeaderLocalDelegateFactory { private static final Logger LOG = LoggerFactory.getLogger(DataTreeChangeListenerSupport.class); - private final Collection> + private final Collection delayedDataTreeChangeListenerRegistrations = ConcurrentHashMap.newKeySet(); - private final Collection> + private final Collection delayedListenerOnAllRegistrations = ConcurrentHashMap.newKeySet(); private final Collection leaderOnlyListenerActors = ConcurrentHashMap.newKeySet(); private final Collection allListenerActors = ConcurrentHashMap.newKeySet(); @@ -62,8 +62,7 @@ final class DataTreeChangeListenerSupport extends LeaderLocalDelegateFactory reg : - delayedListenerOnAllRegistrations) { + for (var reg : delayedListenerOnAllRegistrations) { reg.doRegistration(this); } @@ -71,8 +70,7 @@ final class DataTreeChangeListenerSupport extends LeaderLocalDelegateFactory reg : - delayedDataTreeChangeListenerRegistrations) { + for (var reg : delayedDataTreeChangeListenerRegistrations) { reg.doRegistration(this); } @@ -91,9 +89,8 @@ final class DataTreeChangeListenerSupport extends LeaderLocalDelegateFactory delayedReg = - new DelayedDataTreeChangeListenerRegistration<>(message, registrationActor); - final Collection> delayedRegList; + final var delayedReg = new DelayedDataTreeChangeListenerRegistration(message, registrationActor); + final Collection delayedRegList; if (message.isRegisterOnAllInstances()) { delayedRegList = delayedListenerOnAllRegistrations; } else { diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortActorRegistry.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortActorRegistry.java index c2a6c78273..fa10f947db 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortActorRegistry.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortActorRegistry.java @@ -26,8 +26,6 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataTreeCandidate; import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; import org.opendaylight.mdsal.dom.spi.AbstractRegistrationTree; -import org.opendaylight.mdsal.dom.spi.RegistrationTreeNode; -import org.opendaylight.mdsal.dom.spi.RegistrationTreeSnapshot; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate; @@ -40,13 +38,12 @@ import org.slf4j.LoggerFactory; /** * Registry of user commit cohorts, which is responsible for handling registration and calculation * of affected cohorts based on {@link DataTreeCandidate}. This class is NOT thread-safe. - * */ class DataTreeCohortActorRegistry extends AbstractRegistrationTree { private static final Logger LOG = LoggerFactory.getLogger(DataTreeCohortActorRegistry.class); - private final Map> cohortToNode = new HashMap<>(); + private final Map> cohortToNode = new HashMap<>(); Collection getCohortActors() { return new ArrayList<>(cohortToNode.keySet()); @@ -57,8 +54,7 @@ class DataTreeCohortActorRegistry extends AbstractRegistrationTree { takeLock(); try { final ActorRef cohortRef = cohort.getCohort(); - final RegistrationTreeNode node = - findNodeFor(cohort.getPath().getRootIdentifier().getPathArguments()); + final Node node = findNodeFor(cohort.getPath().path().getPathArguments()); addRegistration(node, cohort.getCohort()); cohortToNode.put(cohortRef, node); } catch (final Exception e) { @@ -72,7 +68,7 @@ class DataTreeCohortActorRegistry extends AbstractRegistrationTree { void removeCommitCohort(final ActorRef sender, final RemoveCohort message) { final ActorRef cohort = message.getCohort(); - final RegistrationTreeNode node = cohortToNode.get(cohort); + final Node node = cohortToNode.get(cohort); if (node != null) { removeRegistration(node, cohort); cohortToNode.remove(cohort); @@ -83,7 +79,7 @@ class DataTreeCohortActorRegistry extends AbstractRegistrationTree { List createCanCommitMessages(final TransactionIdentifier txId, final DataTreeCandidate candidate, final EffectiveModelContext schema) { - try (RegistrationTreeSnapshot cohorts = takeSnapshot()) { + try (var cohorts = takeSnapshot()) { return new CanCommitMessageBuilder(txId, candidate, schema).perform(cohorts.getRootNode()); } } @@ -141,24 +137,24 @@ class DataTreeCohortActorRegistry extends AbstractRegistrationTree { } private void lookupAndCreateCanCommits(final List args, final int offset, - final RegistrationTreeNode node) { + final Node node) { if (args.size() != offset) { final PathArgument arg = args.get(offset); - final RegistrationTreeNode exactChild = node.getExactChild(arg); + final var exactChild = node.getExactChild(arg); if (exactChild != null) { lookupAndCreateCanCommits(args, offset + 1, exactChild); } - for (final RegistrationTreeNode c : node.getInexactChildren(arg)) { - lookupAndCreateCanCommits(args, offset + 1, c); + for (var inexact : node.getInexactChildren(arg)) { + lookupAndCreateCanCommits(args, offset + 1, inexact); } } else { lookupAndCreateCanCommits(candidate.getRootPath(), node, candidate.getRootNode()); } } - private void lookupAndCreateCanCommits(final YangInstanceIdentifier path, - final RegistrationTreeNode regNode, final DataTreeCandidateNode candNode) { + private void lookupAndCreateCanCommits(final YangInstanceIdentifier path, final Node regNode, + final DataTreeCandidateNode candNode) { if (candNode.modificationType() == ModificationType.UNMODIFIED) { LOG.debug("Skipping unmodified candidate {}", path); return; @@ -170,7 +166,7 @@ class DataTreeCohortActorRegistry extends AbstractRegistrationTree { for (var candChild : candNode.childNodes()) { if (candChild.modificationType() != ModificationType.UNMODIFIED) { - final RegistrationTreeNode regChild = regNode.getExactChild(candChild.name()); + final var regChild = regNode.getExactChild(candChild.name()); if (regChild != null) { lookupAndCreateCanCommits(path.node(candChild.name()), regChild, candChild); } @@ -191,11 +187,11 @@ class DataTreeCohortActorRegistry extends AbstractRegistrationTree { } private static DOMDataTreeIdentifier treeIdentifier(final YangInstanceIdentifier path) { - return new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, path); + return DOMDataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, path); } - List perform(final RegistrationTreeNode rootNode) { - final List toLookup = candidate.getRootPath().getPathArguments(); + List perform(final Node rootNode) { + final var toLookup = candidate.getRootPath().getPathArguments(); lookupAndCreateCanCommits(toLookup, 0, rootNode); final Map> mapView = actorToCandidates.asMap(); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortRegistrationProxy.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortRegistrationProxy.java index 8012a2dcb7..4e3c6cb8d7 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortRegistrationProxy.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortRegistrationProxy.java @@ -18,7 +18,6 @@ import org.checkerframework.checker.lock.qual.GuardedBy; import org.opendaylight.controller.cluster.datastore.exceptions.LocalShardNotFoundException; import org.opendaylight.controller.cluster.datastore.utils.ActorUtils; import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohort; -import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistration; import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; import org.slf4j.Logger; @@ -26,11 +25,10 @@ import org.slf4j.LoggerFactory; import scala.concurrent.Future; import scala.concurrent.duration.FiniteDuration; -public class DataTreeCohortRegistrationProxy extends AbstractObjectRegistration - implements DOMDataTreeCommitCohortRegistration { - +public class DataTreeCohortRegistrationProxy extends AbstractObjectRegistration { private static final Logger LOG = LoggerFactory.getLogger(DataTreeCohortRegistrationProxy.class); private static final Timeout TIMEOUT = new Timeout(new FiniteDuration(5, TimeUnit.SECONDS)); + private final DOMDataTreeIdentifier subtree; private final ActorRef actor; private final ActorUtils actorUtils; @@ -42,8 +40,8 @@ public class DataTreeCohortRegistrationProxy super(cohort); this.subtree = requireNonNull(subtree); this.actorUtils = requireNonNull(actorUtils); - this.actor = actorUtils.getActorSystem().actorOf(DataTreeCohortActor.props(getInstance(), - subtree.getRootIdentifier()).withDispatcher(actorUtils.getNotificationDispatcherPath())); + actor = actorUtils.getActorSystem().actorOf(DataTreeCohortActor.props(getInstance(), + subtree.path()).withDispatcher(actorUtils.getNotificationDispatcherPath())); } public void init(final String shardName) { diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DefaultShardDataTreeChangeListenerPublisher.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DefaultShardDataTreeChangeListenerPublisher.java index aedd9c75e0..d7d90474f3 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DefaultShardDataTreeChangeListenerPublisher.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DefaultShardDataTreeChangeListenerPublisher.java @@ -11,9 +11,8 @@ import java.util.List; import java.util.Optional; import java.util.function.Consumer; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; -import org.opendaylight.mdsal.dom.spi.AbstractDOMDataTreeChangeListenerRegistration; import org.opendaylight.mdsal.dom.spi.store.AbstractDOMStoreTreeChangePublisher; -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.tree.api.DataTreeCandidate; import org.slf4j.Logger; @@ -46,21 +45,21 @@ final class DefaultShardDataTreeChangeListenerPublisher extends AbstractDOMStore } @Override - protected void notifyListener(final AbstractDOMDataTreeChangeListenerRegistration registration, - final List changes) { - LOG.debug("{}: notifyListener: listener: {}", logContext, registration.getInstance()); - registration.getInstance().onDataTreeChanged(changes); + protected void notifyListener(final Reg registration, final List changes) { + final var listener = registration.listener(); + LOG.debug("{}: notifyListener: listener: {}", logContext, listener); + listener.onDataTreeChanged(changes); } @Override - protected void registrationRemoved(final AbstractDOMDataTreeChangeListenerRegistration registration) { + protected void registrationRemoved(final Reg registration) { LOG.debug("Registration {} removed", registration); } @Override public void registerTreeChangeListener(final YangInstanceIdentifier treeId, final DOMDataTreeChangeListener listener, final Optional initialState, - final Consumer> onRegistration) { + final Consumer onRegistration) { registerTreeChangeListener(treeId, listener, onRegistration); if (initialState.isPresent()) { @@ -71,13 +70,9 @@ final class DefaultShardDataTreeChangeListenerPublisher extends AbstractDOMStore } void registerTreeChangeListener(final YangInstanceIdentifier treeId, final DOMDataTreeChangeListener listener, - final Consumer> onRegistration) { + final Consumer onRegistration) { LOG.debug("{}: registerTreeChangeListener: path: {}, listener: {}", logContext, treeId, listener); - - AbstractDOMDataTreeChangeListenerRegistration registration = - super.registerTreeChangeListener(treeId, listener); - - onRegistration.accept(registration); + onRegistration.accept(super.registerTreeChangeListener(treeId, listener)); } static void notifySingleListener(final YangInstanceIdentifier treeId, final DOMDataTreeChangeListener listener, diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DelayedDataTreeChangeListenerRegistration.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DelayedDataTreeChangeListenerRegistration.java index ef26e94ee9..740aef92b8 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DelayedDataTreeChangeListenerRegistration.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DelayedDataTreeChangeListenerRegistration.java @@ -8,12 +8,11 @@ package org.opendaylight.controller.cluster.datastore; import akka.actor.ActorRef; -import java.util.EventListener; import org.checkerframework.checker.lock.qual.GuardedBy; import org.opendaylight.controller.cluster.datastore.messages.RegisterDataTreeChangeListener; -import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.concepts.Registration; -class DelayedDataTreeChangeListenerRegistration implements ListenerRegistration { +class DelayedDataTreeChangeListenerRegistration implements Registration { private final RegisterDataTreeChangeListener registrationMessage; private final ActorRef registrationActor; @@ -32,17 +31,6 @@ class DelayedDataTreeChangeListenerRegistration impleme } } - @Override - public L getInstance() { - // ObjectRegistration annotates this method as @Nonnull but we could return null if the delegate is not set yet. - // In reality, we do not and should not ever call this method on DelayedDataTreeChangeListenerRegistration - // instances anyway but, since we have to provide an implementation to satisfy the interface, we throw - // UnsupportedOperationException to honor the API contract of not returning null and to avoid a FindBugs error - // for possibly returning null. - throw new UnsupportedOperationException( - "getInstance should not be called on this instance since it could be null"); - } - @Override public synchronized void close() { closed = true; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreFactory.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreFactory.java index 2325b5bd57..350b915b57 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreFactory.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreFactory.java @@ -43,7 +43,7 @@ public final class DistributedDataStoreFactory { updater.setListener(dataStore); - schemaService.registerSchemaContextListener(dataStore); + schemaService.registerSchemaContextListener(dataStore::onModelContextUpdated); dataStore.setCloseable(updater); dataStore.waitTillReady(); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreInterface.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreInterface.java index deae01960b..5f4e30978e 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreInterface.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreInterface.java @@ -11,7 +11,7 @@ import com.google.common.annotations.Beta; import org.opendaylight.controller.cluster.datastore.utils.ActorUtils; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; import org.opendaylight.mdsal.dom.spi.store.DOMStore; -import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; /** @@ -24,7 +24,6 @@ public interface DistributedDataStoreInterface extends DOMStore { ActorUtils getActorUtils(); @Beta - ListenerRegistration registerProxyListener( - YangInstanceIdentifier shardLookup, YangInstanceIdentifier insideShard, + Registration registerProxyListener(YangInstanceIdentifier shardLookup, YangInstanceIdentifier insideShard, DOMDataTreeChangeListener delegate); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/OSGiDOMStore.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/OSGiDOMStore.java index d53a8bb468..43e9c3e6fd 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/OSGiDOMStore.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/OSGiDOMStore.java @@ -13,10 +13,9 @@ import com.google.common.annotations.Beta; import java.util.Map; import org.opendaylight.controller.cluster.datastore.utils.ActorUtils; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.mdsal.dom.api.DOMDataBroker.CommitCohortExtension; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohort; -import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistration; -import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistry; import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; import org.opendaylight.mdsal.dom.spi.store.DOMStore; import org.opendaylight.mdsal.dom.spi.store.DOMStoreReadTransaction; @@ -24,7 +23,7 @@ import org.opendaylight.mdsal.dom.spi.store.DOMStoreReadWriteTransaction; import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionChain; import org.opendaylight.mdsal.dom.spi.store.DOMStoreTreeChangePublisher; import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction; -import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; @@ -39,7 +38,7 @@ import org.slf4j.LoggerFactory; @Beta @Component(factory = OSGiDOMStore.FACTORY_NAME, service = { DOMStore.class, DistributedDataStoreInterface.class }) public final class OSGiDOMStore - implements DistributedDataStoreInterface, DOMStoreTreeChangePublisher, DOMDataTreeCommitCohortRegistry { + implements DistributedDataStoreInterface, DOMStoreTreeChangePublisher, CommitCohortExtension { // OSGi DS Component Factory name static final String FACTORY_NAME = "org.opendaylight.controller.cluster.datastore.OSGiDOMStore"; static final String DATASTORE_INST_PROP = ".datastore.instance"; @@ -47,30 +46,41 @@ public final class OSGiDOMStore private static final Logger LOG = LoggerFactory.getLogger(OSGiDOMStore.class); - private LogicalDatastoreType datastoreType; + private final LogicalDatastoreType datastoreType; private AbstractDataStore datastore; + @Activate + public OSGiDOMStore(final Map properties) { + datastoreType = (LogicalDatastoreType) verifyNotNull(properties.get(DATASTORE_TYPE_PROP)); + datastore = (AbstractDataStore) verifyNotNull(properties.get(DATASTORE_INST_PROP)); + LOG.info("Datastore service type {} activated", datastoreType); + } + + @Deactivate + void deactivate() { + datastore = null; + LOG.info("Datastore service type {} deactivated", datastoreType); + } + @Override public ActorUtils getActorUtils() { return datastore.getActorUtils(); } @Override - public ListenerRegistration registerProxyListener( - final YangInstanceIdentifier shardLookup, final YangInstanceIdentifier insideShard, - final DOMDataTreeChangeListener delegate) { + public Registration registerProxyListener(final YangInstanceIdentifier shardLookup, + final YangInstanceIdentifier insideShard, final DOMDataTreeChangeListener delegate) { return datastore.registerProxyListener(shardLookup, insideShard, delegate); } @Override - public ListenerRegistration registerTreeChangeListener( - final YangInstanceIdentifier treeId, final L listener) { + public Registration registerTreeChangeListener(final YangInstanceIdentifier treeId, + final DOMDataTreeChangeListener listener) { return datastore.registerTreeChangeListener(treeId, listener); } @Override - public DOMDataTreeCommitCohortRegistration registerCommitCohort( - final DOMDataTreeIdentifier path, final T cohort) { + public Registration registerCommitCohort(final DOMDataTreeIdentifier path, final DOMDataTreeCommitCohort cohort) { return datastore.registerCommitCohort(path, cohort); } @@ -94,16 +104,9 @@ public final class OSGiDOMStore return datastore.newReadWriteTransaction(); } - @Activate - void activate(final Map properties) { - datastoreType = (LogicalDatastoreType) verifyNotNull(properties.get(DATASTORE_TYPE_PROP)); - datastore = (AbstractDataStore) verifyNotNull(properties.get(DATASTORE_INST_PROP)); - LOG.info("Datastore service type {} activated", datastoreType); - } - - @Deactivate - void deactivate() { - datastore = null; - LOG.info("Datastore service type {} deactivated", datastoreType); + @Override + public Registration registerLegacyTreeChangeListener(final YangInstanceIdentifier treeId, + final DOMDataTreeChangeListener listener) { + return datastore.registerLegacyTreeChangeListener(treeId, listener); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/OSGiDistributedDataStore.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/OSGiDistributedDataStore.java index d365097f3b..3e2db7dfed 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/OSGiDistributedDataStore.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/OSGiDistributedDataStore.java @@ -150,7 +150,7 @@ public final class OSGiDistributedDataStore { final var introspector = introspectorFactory.newInstance(datastoreType, properties); final var datastore = DistributedDataStoreFactory.createInstance(actorSystemProvider, introspector.getContext(), introspector, snapshotRestore, config); - datastore.setCloseable(schemaService.registerSchemaContextListener(datastore)); + datastore.setCloseable(schemaService.registerSchemaContextListener(datastore::onModelContextUpdated)); final var state = new DatastoreState(introspector, datastoreType, datastore, serviceType); Futures.addCallback(datastore.initialSettleFuture(), state, diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/RootDataTreeChangeListenerProxy.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/RootDataTreeChangeListenerProxy.java index 0246049fc7..43cbb7e872 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/RootDataTreeChangeListenerProxy.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/RootDataTreeChangeListenerProxy.java @@ -30,13 +30,12 @@ import org.opendaylight.controller.cluster.datastore.messages.RegisterDataTreeCh import org.opendaylight.controller.cluster.datastore.messages.RegisterDataTreeNotificationListenerReply; import org.opendaylight.controller.cluster.datastore.utils.ActorUtils; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; -import org.opendaylight.yangtools.concepts.AbstractListenerRegistration; +import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -final class RootDataTreeChangeListenerProxy - extends AbstractListenerRegistration { +final class RootDataTreeChangeListenerProxy extends AbstractObjectRegistration { private abstract static class State { } @@ -75,7 +74,7 @@ final class RootDataTreeChangeListenerProxy final Set shardNames) { super(listener); this.actorUtils = requireNonNull(actorUtils); - this.state = new ResolveShards(shardNames.size()); + state = new ResolveShards(shardNames.size()); for (String shardName : shardNames) { actorUtils.findLocalShardAsync(shardName).onComplete(new OnComplete() { @@ -94,8 +93,8 @@ final class RootDataTreeChangeListenerProxy } else if (state instanceof ResolveShards) { // Simple case: just mark the fact we were closed, terminating when resolution finishes state = new Terminated(); - } else if (state instanceof Subscribed) { - terminate((Subscribed) state); + } else if (state instanceof Subscribed subscribed) { + terminate(subscribed); } else { throw new IllegalStateException("Unhandled close in state " + state); } @@ -103,8 +102,8 @@ final class RootDataTreeChangeListenerProxy private synchronized void onFindLocalShardComplete(final String shardName, final Throwable failure, final ActorRef shard) { - if (state instanceof ResolveShards) { - localShardsResolved((ResolveShards) state, shardName, failure, shard); + if (state instanceof ResolveShards resolveShards) { + localShardsResolved(resolveShards, shardName, failure, shard); } else { LOG.debug("{}: lookup for shard {} turned into a noop on state {}", logContext(), shardName, state); } @@ -170,8 +169,7 @@ final class RootDataTreeChangeListenerProxy } private synchronized void onShardSubscribed(final String shardName, final Throwable failure, final Object result) { - if (state instanceof Subscribed) { - final Subscribed current = (Subscribed) state; + if (state instanceof Subscribed current) { if (failure != null) { LOG.error("{}: Shard {} failed to subscribe, terminating listener {}", logContext(), shardName,getInstance(), failure); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java index f56eeb15de..1fcaa9d64d 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java @@ -40,6 +40,7 @@ import java.util.Map; import java.util.Optional; import java.util.OptionalLong; import java.util.concurrent.TimeUnit; +import java.util.function.Supplier; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.controller.cluster.access.ABIVersion; @@ -114,7 +115,6 @@ import org.opendaylight.yangtools.yang.data.tree.api.DataTree; import org.opendaylight.yangtools.yang.data.tree.api.DataValidationFailedException; import org.opendaylight.yangtools.yang.data.tree.api.TreeType; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider; import scala.concurrent.duration.FiniteDuration; /** @@ -955,7 +955,7 @@ public class Shard extends RaftActor { } private void updateSchemaContext(final UpdateSchemaContext message) { - updateSchemaContext(message.getEffectiveModelContext()); + updateSchemaContext(message.modelContext()); } @VisibleForTesting @@ -1168,7 +1168,7 @@ public class Shard extends RaftActor { private ShardIdentifier id; private Map peerAddresses = Collections.emptyMap(); private DatastoreContext datastoreContext; - private EffectiveModelContextProvider schemaContextProvider; + private Supplier<@NonNull EffectiveModelContext> schemaContextProvider; private DatastoreSnapshot.ShardSnapshot restoreFromSnapshot; private DataTree dataTree; @@ -1205,7 +1205,7 @@ public class Shard extends RaftActor { return self(); } - public T schemaContextProvider(final EffectiveModelContextProvider newSchemaContextProvider) { + public T schemaContextProvider(final Supplier<@NonNull EffectiveModelContext> newSchemaContextProvider) { checkSealed(); schemaContextProvider = requireNonNull(newSchemaContextProvider); return self(); @@ -1236,7 +1236,7 @@ public class Shard extends RaftActor { } public EffectiveModelContext getSchemaContext() { - return verifyNotNull(schemaContextProvider.getEffectiveModelContext()); + return verifyNotNull(schemaContextProvider.get()); } public DatastoreSnapshot.ShardSnapshot getRestoreFromSnapshot() { diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTree.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTree.java index a74427e941..72e7a545a7 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTree.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTree.java @@ -73,7 +73,7 @@ import org.opendaylight.mdsal.common.api.OptimisticLockFailedException; import org.opendaylight.mdsal.common.api.TransactionCommitFailedException; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; import org.opendaylight.yangtools.concepts.Identifier; -import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -734,8 +734,7 @@ public class ShardDataTree extends ShardDataTreeTransactionParent { } final void registerTreeChangeListener(final YangInstanceIdentifier path, final DOMDataTreeChangeListener listener, - final Optional initialState, - final Consumer> onRegistration) { + final Optional initialState, final Consumer onRegistration) { treeChangeListenerPublisher.registerTreeChangeListener(path, listener, initialState, onRegistration); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeChangeListenerPublisher.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeChangeListenerPublisher.java index ef1a4cd7f9..4c67c3fc23 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeChangeListenerPublisher.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeChangeListenerPublisher.java @@ -10,7 +10,7 @@ package org.opendaylight.controller.cluster.datastore; import java.util.Optional; import java.util.function.Consumer; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; -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.tree.api.DataTreeCandidate; @@ -21,6 +21,5 @@ import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate; */ interface ShardDataTreeChangeListenerPublisher extends ShardDataTreeNotificationPublisher { void registerTreeChangeListener(YangInstanceIdentifier treeId, DOMDataTreeChangeListener listener, - Optional initialState, - Consumer> onRegistration); + Optional initialState, Consumer onRegistration); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeChangeListenerPublisherActorProxy.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeChangeListenerPublisherActorProxy.java index 381a52d9d4..83209731c4 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeChangeListenerPublisherActorProxy.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeChangeListenerPublisherActorProxy.java @@ -13,7 +13,7 @@ import akka.actor.Props; import java.util.Optional; import java.util.function.Consumer; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; -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.tree.api.DataTreeCandidate; @@ -34,7 +34,7 @@ class ShardDataTreeChangeListenerPublisherActorProxy extends AbstractShardDataTr @Override public void registerTreeChangeListener(final YangInstanceIdentifier treeId, final DOMDataTreeChangeListener listener, final Optional currentState, - final Consumer> onRegistration) { + final Consumer onRegistration) { final ShardDataTreeChangePublisherActor.RegisterListener regMessage = new ShardDataTreeChangePublisherActor.RegisterListener(treeId, listener, currentState, onRegistration); log.debug("{}: Sending {} to publisher actor {}", logContext(), regMessage, publisherActor()); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeChangePublisherActor.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeChangePublisherActor.java index 67901590f1..5e96133aaa 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeChangePublisherActor.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeChangePublisherActor.java @@ -13,7 +13,7 @@ import akka.actor.Props; import java.util.Optional; import java.util.function.Consumer; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; -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.tree.api.DataTreeCandidate; @@ -54,11 +54,10 @@ public final class ShardDataTreeChangePublisherActor private final YangInstanceIdentifier path; private final DOMDataTreeChangeListener listener; private final Optional initialState; - private final Consumer> onRegistration; + private final Consumer onRegistration; RegisterListener(final YangInstanceIdentifier path, final DOMDataTreeChangeListener listener, - final Optional initialState, - final Consumer> onRegistration) { + final Optional initialState, final Consumer onRegistration) { this.path = requireNonNull(path); this.listener = requireNonNull(listener); this.initialState = requireNonNull(initialState); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/UpdateSchemaContext.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/UpdateSchemaContext.java index ad32ecfb69..16e59cc233 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/UpdateSchemaContext.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/UpdateSchemaContext.java @@ -7,11 +7,14 @@ */ package org.opendaylight.controller.cluster.datastore.messages; +import static java.util.Objects.requireNonNull; + +import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.spi.AbstractEffectiveModelContextProvider; -public class UpdateSchemaContext extends AbstractEffectiveModelContextProvider { - public UpdateSchemaContext(final EffectiveModelContext modelContext) { - super(modelContext); +@NonNullByDefault +public record UpdateSchemaContext(EffectiveModelContext modelContext) { + public UpdateSchemaContext { + requireNonNull(modelContext); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/VersionedExternalizableMessage.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/VersionedExternalizableMessage.java index 5f410a42b9..9548a7ebdc 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/VersionedExternalizableMessage.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/messages/VersionedExternalizableMessage.java @@ -43,8 +43,6 @@ public abstract class VersionedExternalizableMessage implements Externalizable, return NormalizedNodeStreamVersion.POTASSIUM; } else if (version >= DataStoreVersions.PHOSPHORUS_VERSION) { return NormalizedNodeStreamVersion.MAGNESIUM; - } else if (version == DataStoreVersions.SODIUM_SR1_VERSION) { - return NormalizedNodeStreamVersion.SODIUM_SR1; } else { throw new IllegalStateException("Unsupported version " + version); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/AtomicShardContextProvider.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/AtomicShardContextProvider.java index 71b02f3223..6a8e392b96 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/AtomicShardContextProvider.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/AtomicShardContextProvider.java @@ -7,17 +7,17 @@ */ package org.opendaylight.controller.cluster.datastore.shardmanager; -import com.google.common.base.Verify; +import static com.google.common.base.Verify.verifyNotNull; + import java.util.concurrent.atomic.AtomicReference; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider; -final class AtomicShardContextProvider extends AtomicReference - implements EffectiveModelContextProvider { +final class AtomicShardContextProvider extends AtomicReference { + @java.io.Serial private static final long serialVersionUID = 1L; - @Override - public EffectiveModelContext getEffectiveModelContext() { - return Verify.verifyNotNull(get()); + @NonNull EffectiveModelContext modelContext() { + return verifyNotNull(get()); } } \ No newline at end of file diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardInformation.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardInformation.java index cd1c0c49f2..f5c94413c7 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardInformation.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardInformation.java @@ -78,7 +78,7 @@ public final class ShardInformation { Props newProps() { Props props = requireNonNull(builder).id(shardId).peerAddresses(initialPeerAddresses) - .datastoreContext(datastoreContext).schemaContextProvider(schemaContextProvider).props(); + .datastoreContext(datastoreContext).schemaContextProvider(schemaContextProvider::modelContext).props(); builder = null; return props; } @@ -256,7 +256,7 @@ public final class ShardInformation { } EffectiveModelContext getSchemaContext() { - return schemaContextProvider.getEffectiveModelContext(); + return schemaContextProvider.modelContext(); } void setSchemaContext(final EffectiveModelContext schemaContext) { diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManager.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManager.java index 22bff493cf..adc686723b 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManager.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManager.java @@ -149,7 +149,7 @@ class ShardManager extends AbstractUntypedPersistentActorWithMetering { @VisibleForTesting final ShardPeerAddressResolver peerAddressResolver; - private EffectiveModelContext schemaContext; + private EffectiveModelContext modelContext; private DatastoreSnapshot restoreFromSnapshot; @@ -588,8 +588,8 @@ class ShardManager extends AbstractUntypedPersistentActorWithMetering { info.setActiveMember(isActiveMember); localShards.put(info.getShardName(), info); - if (schemaContext != null) { - info.setSchemaContext(schemaContext); + if (modelContext != null) { + info.setSchemaContext(modelContext); info.setActor(newShardActor(info)); } } @@ -964,12 +964,12 @@ class ShardManager extends AbstractUntypedPersistentActorWithMetering { * @param message the message to send */ private void updateSchemaContext(final UpdateSchemaContext message) { - schemaContext = message.getEffectiveModelContext(); + modelContext = message.modelContext(); - LOG.debug("Got updated SchemaContext: # of modules {}", schemaContext.getModules().size()); + LOG.debug("Got updated SchemaContext: # of modules {}", modelContext.getModules().size()); for (ShardInformation info : localShards.values()) { - info.setSchemaContext(schemaContext); + info.setSchemaContext(modelContext); if (info.getActor() == null) { LOG.debug("Creating Shard {}", info.getShardId()); @@ -1191,7 +1191,7 @@ class ShardManager extends AbstractUntypedPersistentActorWithMetering { } // Create the localShard - if (schemaContext == null) { + if (modelContext == null) { LOG.debug("{}: No SchemaContext is available in order to create a local shard instance for {}", persistenceId(), shardName); getSender().tell(new Status.Failure(new IllegalStateException( @@ -1244,7 +1244,7 @@ class ShardManager extends AbstractUntypedPersistentActorWithMetering { shardInfo = new ShardInformation(shardName, shardId, getPeerAddresses(shardName), datastoreContext, Shard.builder(), peerAddressResolver); shardInfo.setActiveMember(false); - shardInfo.setSchemaContext(schemaContext); + shardInfo.setSchemaContext(modelContext); localShards.put(shardName, shardInfo); shardInfo.setActor(newShardActor(shardInfo)); } else { diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModification.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModification.java index 029b5f1c6a..afa17aeac6 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModification.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModification.java @@ -127,8 +127,8 @@ public abstract class PruningDataTreeModification extends ForwardingObject imple } @Override - public final EffectiveModelContext getEffectiveModelContext() { - return delegate.getEffectiveModelContext(); + public final EffectiveModelContext modelContext() { + return delegate.modelContext(); } @Override diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/RootScatterGather.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/RootScatterGather.java index ee831d64f3..d755adc585 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/RootScatterGather.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/RootScatterGather.java @@ -29,8 +29,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.Builders; +import org.opendaylight.yangtools.yang.data.spi.node.ImmutableNodes; import org.opendaylight.yangtools.yang.data.tree.api.DataValidationFailedException; /** @@ -91,7 +90,7 @@ public final class RootScatterGather { public static @NonNull Stream> scatterAll(final ContainerNode rootNode, final Function childToShard, final Stream allShards) { final var builders = allShards - .collect(Collectors.toUnmodifiableMap(Function.identity(), unused -> Builders.containerBuilder())); + .collect(Collectors.toUnmodifiableMap(Function.identity(), unused -> ImmutableNodes.newContainerBuilder())); for (var child : rootNode.body()) { final var shard = childToShard.apply(child.name()); verifyNotNull(builders.get(shard), "Failed to find builder for %s", shard).addChild(child); @@ -109,16 +108,16 @@ public final class RootScatterGather { */ public static @NonNull Stream> scatterTouched(final ContainerNode rootNode, final Function childToShard) { - final var builders = new HashMap>(); + final var builders = new HashMap(); for (var child : rootNode.body()) { - builders.computeIfAbsent(childToShard.apply(child.name()), unused -> Builders.containerBuilder()) + builders.computeIfAbsent(childToShard.apply(child.name()), unused -> ImmutableNodes.newContainerBuilder()) .addChild(child); } return streamContainers(rootNode.name(), builders); } private static @NonNull Stream> streamContainers(final NodeIdentifier rootId, - final Map> builders) { + final Map builders) { return builders.entrySet().stream() .map(entry -> new ShardContainer<>(entry.getKey(), entry.getValue().withNodeIdentifier(rootId).build())); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBrokerWriteTransactionTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBrokerWriteTransactionTest.java deleted file mode 100644 index d8b1c3bf39..0000000000 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBrokerWriteTransactionTest.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * - * This program and the accompanying materials are made available under the - * 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.controller.cluster.databroker; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertThrows; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doThrow; -import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.CONFIGURATION; -import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.OPERATIONAL; - -import com.google.common.util.concurrent.FluentFuture; -import java.util.Map; -import java.util.concurrent.ExecutionException; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; -import org.opendaylight.mdsal.common.api.CommitInfo; -import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.mdsal.common.api.TransactionCommitFailedException; -import org.opendaylight.mdsal.common.api.TransactionDatastoreMismatchException; -import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionFactory; -import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction; - -@RunWith(MockitoJUnitRunner.StrictStubs.class) -public class AbstractDOMBrokerWriteTransactionTest { - - @Mock - private DOMStoreTransactionFactory txFactory; - @Mock - private AbstractDOMTransactionFactory abstractDOMTransactionFactory; - @Mock - private DOMStoreWriteTransaction domStoreWriteTransaction; - - private class AbstractDOMBrokerWriteTransactionTestImpl - extends AbstractDOMBrokerWriteTransaction { - - AbstractDOMBrokerWriteTransactionTestImpl() { - this(Map.of(CONFIGURATION, txFactory)); - } - - AbstractDOMBrokerWriteTransactionTestImpl(Map txFactoryMap) { - super(new Object(), txFactoryMap, abstractDOMTransactionFactory); - } - - @Override - protected DOMStoreWriteTransaction createTransaction(final LogicalDatastoreType key) { - return domStoreWriteTransaction; - } - - @Override - protected DOMStoreWriteTransaction getSubtransaction() { - return domStoreWriteTransaction; - } - } - - @Test - public void readyRuntimeExceptionAndCancel() { - RuntimeException thrown = new RuntimeException(); - doThrow(thrown).when(domStoreWriteTransaction).ready(); - AbstractDOMBrokerWriteTransactionTestImpl abstractDOMBrokerWriteTransactionTestImpl = - new AbstractDOMBrokerWriteTransactionTestImpl(); - - FluentFuture submitFuture = abstractDOMBrokerWriteTransactionTestImpl.commit(); - final var cause = assertThrows(ExecutionException.class, submitFuture::get).getCause(); - assertTrue(cause instanceof TransactionCommitFailedException); - assertSame(thrown, cause.getCause()); - abstractDOMBrokerWriteTransactionTestImpl.cancel(); - } - - @Test - public void submitRuntimeExceptionAndCancel() throws InterruptedException { - RuntimeException thrown = new RuntimeException(); - doThrow(thrown).when(abstractDOMTransactionFactory).commit(any(), any()); - AbstractDOMBrokerWriteTransactionTestImpl abstractDOMBrokerWriteTransactionTestImpl - = new AbstractDOMBrokerWriteTransactionTestImpl(); - - FluentFuture submitFuture = abstractDOMBrokerWriteTransactionTestImpl.commit(); - final var cause = assertThrows(ExecutionException.class, submitFuture::get).getCause(); - assertTrue(cause instanceof TransactionCommitFailedException); - assertSame(thrown, cause.getCause()); - abstractDOMBrokerWriteTransactionTestImpl.cancel(); - } - - @Test - public void getSubtransactionStoreMismatch() { - final var testTx = new AbstractDOMBrokerWriteTransactionTestImpl( - Map.of(CONFIGURATION, txFactory, OPERATIONAL, txFactory)); - - assertEquals(domStoreWriteTransaction, testTx.getSubtransaction(CONFIGURATION)); - - final var exception = assertThrows(TransactionDatastoreMismatchException.class, - () -> testTx.getSubtransaction(OPERATIONAL)); - assertEquals(CONFIGURATION, exception.expected()); - assertEquals(OPERATIONAL, exception.encountered()); - } - - @Test - public void getSubtransactionStoreUndefined() { - final var testTx = new AbstractDOMBrokerWriteTransactionTestImpl(Map.of(OPERATIONAL, txFactory)); - - final var exception = assertThrows(IllegalArgumentException.class, - () -> testTx.getSubtransaction(CONFIGURATION)); - assertEquals("CONFIGURATION is not supported", exception.getMessage()); - } -} diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ClientBackedReadTransactionTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ClientBackedReadTransactionTest.java index 3a5a82fc31..08316b8391 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ClientBackedReadTransactionTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ClientBackedReadTransactionTest.java @@ -21,14 +21,14 @@ import org.mockito.junit.MockitoJUnitRunner; import org.opendaylight.controller.cluster.access.client.ClientActorContext; import org.opendaylight.controller.cluster.databroker.actors.dds.ClientSnapshot; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; @RunWith(MockitoJUnitRunner.StrictStubs.class) public class ClientBackedReadTransactionTest extends ClientBackedTransactionTest { private ClientBackedReadTransaction object; @Mock - private NormalizedNode data; + private ContainerNode data; @Mock private ClientActorContext clientContext; @Mock diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ClientBackedReadWriteTransactionTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ClientBackedReadWriteTransactionTest.java index 8378c92543..11301cf3c7 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ClientBackedReadWriteTransactionTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ClientBackedReadWriteTransactionTest.java @@ -20,7 +20,7 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import org.opendaylight.controller.cluster.databroker.actors.dds.ClientTransaction; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; @RunWith(MockitoJUnitRunner.StrictStubs.class) public class ClientBackedReadWriteTransactionTest @@ -30,7 +30,7 @@ public class ClientBackedReadWriteTransactionTest @Mock private ClientTransaction delegate; @Mock - private NormalizedNode data; + private ContainerNode data; @Override ClientBackedReadWriteTransaction object() { diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ClientBackedWriteTransactionTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ClientBackedWriteTransactionTest.java index 94173268bc..4543008351 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ClientBackedWriteTransactionTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ClientBackedWriteTransactionTest.java @@ -19,7 +19,7 @@ import org.mockito.junit.MockitoJUnitRunner; import org.opendaylight.controller.cluster.databroker.actors.dds.ClientTransaction; import org.opendaylight.mdsal.dom.spi.store.DOMStoreThreePhaseCommitCohort; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; @RunWith(MockitoJUnitRunner.StrictStubs.class) public class ClientBackedWriteTransactionTest extends ClientBackedTransactionTest { @@ -28,7 +28,7 @@ public class ClientBackedWriteTransactionTest extends ClientBackedTransactionTes @Mock private ClientTransaction delegate; @Mock - private NormalizedNode data; + private ContainerNode data; @Mock private DOMStoreThreePhaseCommitCohort readyCohort; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBrokerTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBrokerTest.java index 604192746b..7bf6971822 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBrokerTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/ConcurrentDOMDataBrokerTest.java @@ -24,7 +24,6 @@ import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediate import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateTrueFluentFuture; import com.google.common.base.Throwables; -import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.ImmutableMap; import com.google.common.util.concurrent.FluentFuture; import com.google.common.util.concurrent.FutureCallback; @@ -51,17 +50,15 @@ import org.opendaylight.controller.cluster.datastore.AbstractDataStore; import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.common.api.TransactionCommitFailedException; -import org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension; -import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService; +import org.opendaylight.mdsal.dom.api.DOMDataBroker.CommitCohortExtension; +import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension; import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohort; -import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistry; import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction; import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction; 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.dom.broker.TransactionCommitFailedExceptionMapper; +import org.opendaylight.mdsal.dom.spi.TransactionCommitFailedExceptionMapper; import org.opendaylight.mdsal.dom.spi.store.DOMStore; import org.opendaylight.mdsal.dom.spi.store.DOMStoreReadTransaction; import org.opendaylight.mdsal.dom.spi.store.DOMStoreReadWriteTransaction; @@ -70,7 +67,7 @@ import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionChain; import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction; import org.opendaylight.mdsal.dom.store.inmemory.InMemoryDOMDataStore; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; /** * Unit tests for DOMConcurrentDataCommitCoordinator. @@ -278,8 +275,8 @@ public class ConcurrentDOMDataBrokerTest { configDomStore), futureExecutor)) { DOMDataTreeReadWriteTransaction dataTxn = dataBroker.newReadWriteTransaction(); - dataTxn.put(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.of(), mock(NormalizedNode.class)); - dataTxn.put(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.of(), mock(NormalizedNode.class)); + dataTxn.put(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.of(), mock(ContainerNode.class)); + dataTxn.put(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.of(), mock(ContainerNode.class)); dataTxn.read(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.of()); verify(configDomStore, never()).newReadWriteTransaction(); @@ -302,8 +299,8 @@ public class ConcurrentDOMDataBrokerTest { configDomStore), futureExecutor)) { DOMDataTreeWriteTransaction dataTxn = dataBroker.newWriteOnlyTransaction(); - dataTxn.put(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.of(), mock(NormalizedNode.class)); - dataTxn.put(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.of(), mock(NormalizedNode.class)); + dataTxn.put(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.of(), mock(ContainerNode.class)); + dataTxn.put(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.of(), mock(ContainerNode.class)); verify(configDomStore, never()).newWriteOnlyTransaction(); verify(operationalDomStore, times(1)).newWriteOnlyTransaction(); @@ -376,7 +373,7 @@ public class ConcurrentDOMDataBrokerTest { LogicalDatastoreType.OPERATIONAL, domStore, LogicalDatastoreType.CONFIGURATION, domStore), futureExecutor)) { - dataBroker.createTransactionChain(mock(DOMTransactionChainListener.class)); + dataBroker.createTransactionChain(); verify(domStore, times(2)).createTransactionChain(); } @@ -396,15 +393,14 @@ public class ConcurrentDOMDataBrokerTest { doReturn(mockChain).when(domStore).createTransactionChain(); doReturn(operationalTransaction).when(mockChain).newWriteOnlyTransaction(); - DOMTransactionChain transactionChain = dataBroker.createTransactionChain( - mock(DOMTransactionChainListener.class)); + DOMTransactionChain transactionChain = dataBroker.createTransactionChain(); DOMDataTreeWriteTransaction domDataWriteTransaction = transactionChain.newWriteOnlyTransaction(); verify(mockChain, never()).newWriteOnlyTransaction(); domDataWriteTransaction.put(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.of(), - mock(NormalizedNode.class)); + mock(ContainerNode.class)); } } @@ -433,21 +429,16 @@ public class ConcurrentDOMDataBrokerTest { public void testExtensions() { final var mockConfigStore = mock(AbstractDataStore.class); final var mockOperStore = mock(AbstractDataStore.class); - try (ConcurrentDOMDataBroker dataBroker = new ConcurrentDOMDataBroker(ImmutableMap.of( + try (var dataBroker = new ConcurrentDOMDataBroker(ImmutableMap.of( LogicalDatastoreType.OPERATIONAL, mockOperStore, LogicalDatastoreType.CONFIGURATION, mockConfigStore), futureExecutor)) { + assertNotNull(dataBroker.extension(DataTreeChangeExtension.class)); - ClassToInstanceMap supportedExtensions = dataBroker.getExtensions(); - assertNotNull(supportedExtensions.getInstance(DOMDataTreeChangeService.class)); - - DOMDataTreeCommitCohortRegistry cohortRegistry = supportedExtensions.getInstance( - DOMDataTreeCommitCohortRegistry.class); + final var cohortRegistry = dataBroker.extension(CommitCohortExtension.class); assertNotNull(cohortRegistry); - DOMDataTreeCommitCohort cohort = mock(DOMDataTreeCommitCohort.class); - DOMDataTreeIdentifier path = new DOMDataTreeIdentifier( - org.opendaylight.mdsal.common.api.LogicalDatastoreType.CONFIGURATION, - YangInstanceIdentifier.of()); + final var cohort = mock(DOMDataTreeCommitCohort.class); + final var path = DOMDataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, YangInstanceIdentifier.of()); cohortRegistry.registerCommitCohort(path, cohort); verify(mockConfigStore).registerCommitCohort(path, cohort); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/AbstractDistributedDataStoreIntegrationTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/AbstractDistributedDataStoreIntegrationTest.java index 50f51be9a7..01acb3dd05 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/AbstractDistributedDataStoreIntegrationTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/AbstractDistributedDataStoreIntegrationTest.java @@ -16,7 +16,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.timeout; import static org.mockito.Mockito.verify; @@ -24,6 +24,7 @@ import akka.actor.ActorSystem; import com.google.common.base.Throwables; import com.google.common.collect.ImmutableMap; import com.google.common.util.concurrent.FluentFuture; +import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.Uninterruptibles; @@ -40,7 +41,6 @@ import java.util.concurrent.atomic.AtomicReference; import org.junit.Ignore; import org.junit.Test; import org.junit.runners.Parameterized.Parameter; -import org.mockito.Mockito; import org.opendaylight.controller.cluster.access.client.RequestTimeoutException; import org.opendaylight.controller.cluster.databroker.ConcurrentDOMDataBroker; import org.opendaylight.controller.cluster.datastore.TestShard.RequestFrontendMetadata; @@ -62,14 +62,12 @@ import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction; import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; import org.opendaylight.mdsal.dom.api.DOMTransactionChain; import org.opendaylight.mdsal.dom.api.DOMTransactionChainClosedException; -import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener; import org.opendaylight.mdsal.dom.spi.store.DOMStore; import org.opendaylight.mdsal.dom.spi.store.DOMStoreReadTransaction; import org.opendaylight.mdsal.dom.spi.store.DOMStoreReadWriteTransaction; import org.opendaylight.mdsal.dom.spi.store.DOMStoreThreePhaseCommitCohort; import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionChain; import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction; -import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.common.Uint64; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; @@ -544,8 +542,7 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { .put(LogicalDatastoreType.CONFIGURATION, dataStore).build(), MoreExecutors.directExecutor()); - final DOMTransactionChainListener listener = Mockito.mock(DOMTransactionChainListener.class); - DOMTransactionChain txChain = broker.createTransactionChain(listener); + DOMTransactionChain txChain = broker.createTransactionChain(); final List> futures = new ArrayList<>(); @@ -689,8 +686,9 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { .put(LogicalDatastoreType.CONFIGURATION, dataStore).build(), MoreExecutors.directExecutor()); - final var listener = Mockito.mock(DOMTransactionChainListener.class); - final var txChain = broker.createTransactionChain(listener); + final var listener = mock(FutureCallback.class); + final var txChain = broker.createTransactionChain(); + txChain.addCallback(listener); final var writeTx = txChain.newReadWriteTransaction(); @@ -706,8 +704,7 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { assertThrows(ExecutionException.class, () -> writeTx.commit().get(5, TimeUnit.SECONDS)); - verify(listener, timeout(5000)).onTransactionChainFailed(eq(txChain), eq(writeTx), - any(Throwable.class)); + verify(listener, timeout(5000)).onFailure(any()); txChain.close(); broker.close(); @@ -725,8 +722,9 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { .put(LogicalDatastoreType.CONFIGURATION, dataStore).build(), MoreExecutors.directExecutor()); - final DOMTransactionChainListener listener = Mockito.mock(DOMTransactionChainListener.class); - final DOMTransactionChain txChain = broker.createTransactionChain(listener); + final var listener = mock(FutureCallback.class); + final DOMTransactionChain txChain = broker.createTransactionChain(); + txChain.addCallback(listener); final DOMDataTreeWriteTransaction writeTx = txChain.newReadWriteTransaction(); @@ -745,8 +743,7 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { // done for put for performance reasons. assertThrows(ExecutionException.class, () -> writeTx.commit().get(5, TimeUnit.SECONDS)); - verify(listener, timeout(5000)).onTransactionChainFailed(eq(txChain), eq(writeTx), - any(Throwable.class)); + verify(listener, timeout(5000)).onFailure(any()); txChain.close(); broker.close(); @@ -764,8 +761,7 @@ public abstract class AbstractDistributedDataStoreIntegrationTest { final MockDataTreeChangeListener listener = new MockDataTreeChangeListener(1); - ListenerRegistration listenerReg = dataStore - .registerTreeChangeListener(TestModel.TEST_PATH, listener); + final var listenerReg = dataStore.registerTreeChangeListener(TestModel.TEST_PATH, listener); assertNotNull("registerTreeChangeListener returned null", listenerReg); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerProxyTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerProxyTest.java index 373d4d7188..b0d38fba47 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerProxyTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerProxyTest.java @@ -9,10 +9,11 @@ package org.opendaylight.controller.cluster.datastore; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; @@ -27,9 +28,14 @@ import akka.util.Timeout; import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.Uninterruptibles; import java.time.Duration; +import java.util.Map; +import java.util.Map.Entry; +import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.junit.Test; -import org.mockito.stubbing.Answer; +import org.mockito.ArgumentCaptor; import org.opendaylight.controller.cluster.common.actor.Dispatchers; import org.opendaylight.controller.cluster.datastore.config.Configuration; import org.opendaylight.controller.cluster.datastore.exceptions.NotInitializedException; @@ -42,37 +48,30 @@ import org.opendaylight.controller.cluster.datastore.messages.RegisterDataTreeNo import org.opendaylight.controller.cluster.datastore.utils.ActorUtils; import org.opendaylight.controller.cluster.raft.utils.DoNothingActor; import org.opendaylight.controller.md.cluster.datastore.model.TestModel; -import org.opendaylight.mdsal.dom.api.ClusteredDOMDataTreeChangeListener; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import scala.concurrent.ExecutionContextExecutor; -import scala.concurrent.Future; public class DataTreeChangeListenerProxyTest extends AbstractActorTest { private final DOMDataTreeChangeListener mockListener = mock(DOMDataTreeChangeListener.class); @Test(timeout = 10000) public void testSuccessfulRegistration() { - final TestKit kit = new TestKit(getSystem()); - ActorUtils actorUtils = new ActorUtils(getSystem(), kit.getRef(), mock(ClusterWrapper.class), + final var kit = new TestKit(getSystem()); + final var actorUtils = new ActorUtils(getSystem(), kit.getRef(), mock(ClusterWrapper.class), mock(Configuration.class)); - final YangInstanceIdentifier path = YangInstanceIdentifier.of(TestModel.TEST_QNAME); - final DataTreeChangeListenerProxy proxy = new DataTreeChangeListenerProxy<>( - actorUtils, mockListener, path); + final var path = YangInstanceIdentifier.of(TestModel.TEST_QNAME); + final var proxy = startProxyAsync(actorUtils, path, false); - new Thread(() -> proxy.init("shard-1")).start(); - - Duration timeout = Duration.ofSeconds(5); - FindLocalShard findLocalShard = kit.expectMsgClass(timeout, FindLocalShard.class); - assertEquals("getShardName", "shard-1", findLocalShard.getShardName()); + final var timeout = Duration.ofSeconds(5); + final var findLocalShard = kit.expectMsgClass(timeout, FindLocalShard.class); + assertEquals("shard-1", findLocalShard.getShardName()); kit.reply(new LocalShardFound(kit.getRef())); - RegisterDataTreeChangeListener registerMsg = kit.expectMsgClass(timeout, - RegisterDataTreeChangeListener.class); - assertEquals("getPath", path, registerMsg.getPath()); - assertFalse("isRegisterOnAllInstances", registerMsg.isRegisterOnAllInstances()); + final var registerMsg = kit.expectMsgClass(timeout, RegisterDataTreeChangeListener.class); + assertEquals(path, registerMsg.getPath()); + assertFalse(registerMsg.isRegisterOnAllInstances()); kit.reply(new RegisterDataTreeNotificationListenerReply(kit.getRef())); @@ -80,8 +79,7 @@ public class DataTreeChangeListenerProxyTest extends AbstractActorTest { Uninterruptibles.sleepUninterruptibly(50, TimeUnit.MILLISECONDS); } - assertEquals("getListenerRegistrationActor", getSystem().actorSelection(kit.getRef().path()), - proxy.getListenerRegistrationActor()); + assertEquals(getSystem().actorSelection(kit.getRef().path()), proxy.getListenerRegistrationActor()); kit.watch(proxy.getDataChangeListenerActor()); @@ -100,48 +98,38 @@ public class DataTreeChangeListenerProxyTest extends AbstractActorTest { @Test(timeout = 10000) public void testSuccessfulRegistrationForClusteredListener() { - final TestKit kit = new TestKit(getSystem()); - ActorUtils actorUtils = new ActorUtils(getSystem(), kit.getRef(), mock(ClusterWrapper.class), + final var kit = new TestKit(getSystem()); + final var actorUtils = new ActorUtils(getSystem(), kit.getRef(), mock(ClusterWrapper.class), mock(Configuration.class)); - ClusteredDOMDataTreeChangeListener mockClusteredListener = mock( - ClusteredDOMDataTreeChangeListener.class); - - final YangInstanceIdentifier path = YangInstanceIdentifier.of(TestModel.TEST_QNAME); - final DataTreeChangeListenerProxy proxy = - new DataTreeChangeListenerProxy<>(actorUtils, mockClusteredListener, path); + final var path = YangInstanceIdentifier.of(TestModel.TEST_QNAME); + final var proxy = startProxyAsync(actorUtils, path, true); - new Thread(() -> proxy.init("shard-1")).start(); - - Duration timeout = Duration.ofSeconds(5); - FindLocalShard findLocalShard = kit.expectMsgClass(timeout, FindLocalShard.class); - assertEquals("getShardName", "shard-1", findLocalShard.getShardName()); + final var timeout = Duration.ofSeconds(5); + final var findLocalShard = kit.expectMsgClass(timeout, FindLocalShard.class); + assertEquals("shard-1", findLocalShard.getShardName()); kit.reply(new LocalShardFound(kit.getRef())); - RegisterDataTreeChangeListener registerMsg = kit.expectMsgClass(timeout, - RegisterDataTreeChangeListener.class); - assertEquals("getPath", path, registerMsg.getPath()); - assertTrue("isRegisterOnAllInstances", registerMsg.isRegisterOnAllInstances()); + final var registerMsg = kit.expectMsgClass(timeout, RegisterDataTreeChangeListener.class); + assertEquals(path, registerMsg.getPath()); + assertTrue(registerMsg.isRegisterOnAllInstances()); proxy.close(); } @Test(timeout = 10000) public void testLocalShardNotFound() { - final TestKit kit = new TestKit(getSystem()); - ActorUtils actorUtils = new ActorUtils(getSystem(), kit.getRef(), mock(ClusterWrapper.class), + final var kit = new TestKit(getSystem()); + final var actorUtils = new ActorUtils(getSystem(), kit.getRef(), mock(ClusterWrapper.class), mock(Configuration.class)); - final YangInstanceIdentifier path = YangInstanceIdentifier.of(TestModel.TEST_QNAME); - final DataTreeChangeListenerProxy proxy = new DataTreeChangeListenerProxy<>( - actorUtils, mockListener, path); - - new Thread(() -> proxy.init("shard-1")).start(); + final var path = YangInstanceIdentifier.of(TestModel.TEST_QNAME); + final var proxy = startProxyAsync(actorUtils, path, true); - Duration timeout = Duration.ofSeconds(5); - FindLocalShard findLocalShard = kit.expectMsgClass(timeout, FindLocalShard.class); - assertEquals("getShardName", "shard-1", findLocalShard.getShardName()); + final var timeout = Duration.ofSeconds(5); + final var findLocalShard = kit.expectMsgClass(timeout, FindLocalShard.class); + assertEquals("shard-1", findLocalShard.getShardName()); kit.reply(new LocalShardNotFound("shard-1")); @@ -152,19 +140,16 @@ public class DataTreeChangeListenerProxyTest extends AbstractActorTest { @Test(timeout = 10000) public void testLocalShardNotInitialized() { - final TestKit kit = new TestKit(getSystem()); - ActorUtils actorUtils = new ActorUtils(getSystem(), kit.getRef(), mock(ClusterWrapper.class), + final var kit = new TestKit(getSystem()); + final var actorUtils = new ActorUtils(getSystem(), kit.getRef(), mock(ClusterWrapper.class), mock(Configuration.class)); - final YangInstanceIdentifier path = YangInstanceIdentifier.of(TestModel.TEST_QNAME); - final DataTreeChangeListenerProxy proxy = new DataTreeChangeListenerProxy<>( - actorUtils, mockListener, path); + final var path = YangInstanceIdentifier.of(TestModel.TEST_QNAME); + final var proxy = startProxyAsync(actorUtils, path, false); - new Thread(() -> proxy.init("shard-1")).start(); - - Duration timeout = Duration.ofSeconds(5); - FindLocalShard findLocalShard = kit.expectMsgClass(timeout, FindLocalShard.class); - assertEquals("getShardName", "shard-1", findLocalShard.getShardName()); + final var timeout = Duration.ofSeconds(5); + final var findLocalShard = kit.expectMsgClass(timeout, FindLocalShard.class); + assertEquals("shard-1", findLocalShard.getShardName()); kit.reply(new NotInitializedException("not initialized")); @@ -178,43 +163,35 @@ public class DataTreeChangeListenerProxyTest extends AbstractActorTest { @Test public void testFailedRegistration() { - final TestKit kit = new TestKit(getSystem()); - ActorSystem mockActorSystem = mock(ActorSystem.class); + final var kit = new TestKit(getSystem()); + final var mockActorSystem = mock(ActorSystem.class); - ActorRef mockActor = getSystem().actorOf(Props.create(DoNothingActor.class), "testFailedRegistration"); + final var mockActor = getSystem().actorOf(Props.create(DoNothingActor.class), "testFailedRegistration"); doReturn(mockActor).when(mockActorSystem).actorOf(any(Props.class)); - ExecutionContextExecutor executor = ExecutionContexts.fromExecutor(MoreExecutors.directExecutor()); + final var executor = ExecutionContexts.fromExecutor(MoreExecutors.directExecutor()); - ActorUtils actorUtils = mock(ActorUtils.class); - final YangInstanceIdentifier path = YangInstanceIdentifier.of(TestModel.TEST_QNAME); + final var actorUtils = mock(ActorUtils.class); + final var path = YangInstanceIdentifier.of(TestModel.TEST_QNAME); doReturn(executor).when(actorUtils).getClientDispatcher(); doReturn(DatastoreContext.newBuilder().build()).when(actorUtils).getDatastoreContext(); doReturn(mockActorSystem).when(actorUtils).getActorSystem(); - String shardName = "shard-1"; - final DataTreeChangeListenerProxy proxy = new DataTreeChangeListenerProxy<>( - actorUtils, mockListener, path); - doReturn(kit.duration("5 seconds")).when(actorUtils).getOperationDuration(); - doReturn(Futures.successful(kit.getRef())).when(actorUtils).findLocalShardAsync(eq(shardName)); + doReturn(Futures.successful(kit.getRef())).when(actorUtils).findLocalShardAsync("shard-1"); doReturn(Futures.failed(new RuntimeException("mock"))).when(actorUtils).executeOperationAsync( any(ActorRef.class), any(Object.class), any(Timeout.class)); - doReturn(mock(DatastoreContext.class)).when(actorUtils).getDatastoreContext(); - - proxy.init("shard-1"); - assertEquals("getListenerRegistrationActor", null, proxy.getListenerRegistrationActor()); + final var proxy = DataTreeChangeListenerProxy.of(actorUtils, mockListener, path, true, "shard-1"); + assertNull(proxy.getListenerRegistrationActor()); proxy.close(); } @Test public void testCloseBeforeRegistration() { - final TestKit kit = new TestKit(getSystem()); - ActorUtils actorUtils = mock(ActorUtils.class); - - String shardName = "shard-1"; + final var kit = new TestKit(getSystem()); + final var actorUtils = mock(ActorUtils.class); doReturn(DatastoreContext.newBuilder().build()).when(actorUtils).getDatastoreContext(); doReturn(getSystem().dispatchers().defaultGlobalDispatcher()).when(actorUtils).getClientDispatcher(); @@ -223,23 +200,46 @@ public class DataTreeChangeListenerProxyTest extends AbstractActorTest { doReturn(getSystem().actorSelection(kit.getRef().path())).when(actorUtils).actorSelection( kit.getRef().path()); doReturn(kit.duration("5 seconds")).when(actorUtils).getOperationDuration(); - doReturn(Futures.successful(kit.getRef())).when(actorUtils).findLocalShardAsync(eq(shardName)); + doReturn(Futures.successful(kit.getRef())).when(actorUtils).findLocalShardAsync("shard-1"); - final DataTreeChangeListenerProxy proxy = new DataTreeChangeListenerProxy<>( - actorUtils, mockListener, YangInstanceIdentifier.of(TestModel.TEST_QNAME)); + final var proxy = createProxy(actorUtils, YangInstanceIdentifier.of(TestModel.TEST_QNAME), true); + final var instance = proxy.getKey(); - Answer> answer = invocation -> { - proxy.close(); - return Futures.successful((Object) new RegisterDataTreeNotificationListenerReply(kit.getRef())); - }; + doAnswer(invocation -> { + instance.close(); + return Futures.successful(new RegisterDataTreeNotificationListenerReply(kit.getRef())); + }).when(actorUtils).executeOperationAsync(any(ActorRef.class), any(Object.class), any(Timeout.class)); + proxy.getValue().run(); - doAnswer(answer).when(actorUtils).executeOperationAsync(any(ActorRef.class), any(Object.class), - any(Timeout.class)); + kit.expectMsgClass(Duration.ofSeconds(5), CloseDataTreeNotificationListenerRegistration.class); - proxy.init(shardName); + assertNull(instance.getListenerRegistrationActor()); + } - kit.expectMsgClass(Duration.ofSeconds(5), CloseDataTreeNotificationListenerRegistration.class); + @NonNullByDefault + private DataTreeChangeListenerProxy startProxyAsync(final ActorUtils actorUtils, final YangInstanceIdentifier path, + final boolean clustered) { + return startProxyAsync(actorUtils, path, clustered, Runnable::run); + } + + @NonNullByDefault + private DataTreeChangeListenerProxy startProxyAsync(final ActorUtils actorUtils, final YangInstanceIdentifier path, + final boolean clustered, final Consumer execute) { + final var proxy = createProxy(actorUtils, path, clustered); + final var thread = new Thread(proxy.getValue()); + thread.setDaemon(true); + thread.start(); + return proxy.getKey(); + } - assertEquals("getListenerRegistrationActor", null, proxy.getListenerRegistrationActor()); + @NonNullByDefault + private Entry createProxy(final ActorUtils actorUtils, + final YangInstanceIdentifier path, final boolean clustered) { + final var executor = mock(Executor.class); + final var captor = ArgumentCaptor.forClass(Runnable.class); + doNothing().when(executor).execute(captor.capture()); + final var proxy = DataTreeChangeListenerProxy.ofTesting(actorUtils, mockListener, path, clustered, "shard-1", + executor); + return Map.entry(proxy, captor.getValue()); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreRemotingIntegrationTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreRemotingIntegrationTest.java index a6ff215b8b..6fa7698e3f 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreRemotingIntegrationTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreRemotingIntegrationTest.java @@ -17,9 +17,9 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.timeout; @@ -38,6 +38,7 @@ import akka.testkit.javadsl.TestKit; import com.google.common.base.Stopwatch; import com.google.common.base.Throwables; import com.google.common.collect.ImmutableMap; +import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.Uninterruptibles; @@ -47,6 +48,7 @@ import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; @@ -102,7 +104,6 @@ import org.opendaylight.mdsal.common.api.OptimisticLockFailedException; import org.opendaylight.mdsal.common.api.TransactionCommitFailedException; 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.dom.spi.store.DOMStore; import org.opendaylight.mdsal.dom.spi.store.DOMStoreReadTransaction; import org.opendaylight.mdsal.dom.spi.store.DOMStoreReadWriteTransaction; @@ -381,8 +382,8 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest { }); try (var tx = txChain.newReadOnlyTransaction()) { - final var body = tx.read(CarsModel.CAR_LIST_PATH).get(5, TimeUnit.SECONDS).orElseThrow().body(); - assertThat(body, instanceOf(Collection.class)); + final var body = assertInstanceOf(Collection.class, + tx.read(CarsModel.CAR_LIST_PATH).get(5, TimeUnit.SECONDS).orElseThrow().body()); assertEquals(numCars, ((Collection) body).size()); } } @@ -612,8 +613,9 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest { LogicalDatastoreType.CONFIGURATION, followerDistributedDataStore).build(), MoreExecutors.directExecutor()); - final DOMTransactionChainListener listener = mock(DOMTransactionChainListener.class); - final DOMTransactionChain txChain = broker.createTransactionChain(listener); + final var listener = mock(FutureCallback.class); + final DOMTransactionChain txChain = broker.createTransactionChain(); + txChain.addCallback(listener); final DOMDataTreeWriteTransaction writeTx = txChain.newWriteOnlyTransaction(); @@ -622,11 +624,10 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest { .withChild(ImmutableNodes.leafNode(TestModel.JUNK_QNAME, "junk")) .build()); - final var ex = assertThrows(ExecutionException.class, () -> writeTx.commit().get(5, TimeUnit.SECONDS)) - .getCause(); - assertThat(ex, instanceOf(TransactionCommitFailedException.class)); + final var ex = assertThrows(ExecutionException.class, () -> writeTx.commit().get(5, TimeUnit.SECONDS)); + assertInstanceOf(TransactionCommitFailedException.class, ex.getCause()); - verify(listener, timeout(5000)).onTransactionChainFailed(eq(txChain), eq(writeTx), any(Throwable.class)); + verify(listener, timeout(5000)).onFailure(any()); txChain.close(); broker.close(); @@ -636,33 +637,32 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest { public void testChainedTransactionFailureWithMultipleShards() throws Exception { initDatastoresWithCarsAndPeople("testChainedTransactionFailureWithMultipleShards"); - final ConcurrentDOMDataBroker broker = new ConcurrentDOMDataBroker( - ImmutableMap.builder().put( - LogicalDatastoreType.CONFIGURATION, followerDistributedDataStore).build(), - MoreExecutors.directExecutor()); + try (var broker = new ConcurrentDOMDataBroker( + Map.of(LogicalDatastoreType.CONFIGURATION, followerDistributedDataStore), MoreExecutors.directExecutor())) { - final DOMTransactionChainListener listener = mock(DOMTransactionChainListener.class); - final DOMTransactionChain txChain = broker.createTransactionChain(listener); + final var listener = mock(FutureCallback.class); + final DOMTransactionChain txChain = broker.createTransactionChain(); + txChain.addCallback(listener); - final DOMDataTreeWriteTransaction writeTx = txChain.newWriteOnlyTransaction(); + final DOMDataTreeWriteTransaction writeTx = txChain.newWriteOnlyTransaction(); - writeTx.put(LogicalDatastoreType.CONFIGURATION, PeopleModel.BASE_PATH, PeopleModel.emptyContainer()); + writeTx.put(LogicalDatastoreType.CONFIGURATION, PeopleModel.BASE_PATH, PeopleModel.emptyContainer()); - // Note that merge will validate the data and fail but put succeeds b/c deep validation is not - // done for put for performance reasons. - writeTx.merge(LogicalDatastoreType.CONFIGURATION, CarsModel.BASE_PATH, Builders.containerBuilder() - .withNodeIdentifier(new NodeIdentifier(CarsModel.BASE_QNAME)) - .withChild(ImmutableNodes.leafNode(TestModel.JUNK_QNAME, "junk")) - .build()); + // Note that merge will validate the data and fail but put succeeds b/c deep validation is not + // done for put for performance reasons. + writeTx.merge(LogicalDatastoreType.CONFIGURATION, CarsModel.BASE_PATH, Builders.containerBuilder() + .withNodeIdentifier(new NodeIdentifier(CarsModel.BASE_QNAME)) + .withChild(ImmutableNodes.leafNode(TestModel.JUNK_QNAME, "junk")) + .build()); - final var ex = assertThrows(ExecutionException.class, () -> writeTx.commit().get(5, TimeUnit.SECONDS)) - .getCause(); - assertThat(ex, instanceOf(TransactionCommitFailedException.class)); + final var ex = assertThrows(ExecutionException.class, () -> writeTx.commit().get(5, TimeUnit.SECONDS)) + .getCause(); + assertThat(ex, instanceOf(TransactionCommitFailedException.class)); - verify(listener, timeout(5000)).onTransactionChainFailed(eq(txChain), eq(writeTx), any(Throwable.class)); + verify(listener, timeout(5000)).onFailure(any()); - txChain.close(); - broker.close(); + txChain.close(); + } } @Test diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/JsonExportTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/JsonExportTest.java index 8b30a85566..1e51e9cc9a 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/JsonExportTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/JsonExportTest.java @@ -27,9 +27,9 @@ import org.opendaylight.controller.cluster.raft.utils.InMemoryJournal; import org.opendaylight.controller.md.cluster.datastore.model.TestModel; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.distributed.datastore.provider.rev231229.DataStoreProperties.ExportOnRecovery; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; -import org.opendaylight.yangtools.yang.data.tree.api.DataTree; -import org.opendaylight.yangtools.yang.data.tree.api.DataTreeModification; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; +import org.opendaylight.yangtools.yang.data.spi.node.ImmutableNodes; public class JsonExportTest extends AbstractShardTest { private static final String DUMMY_DATA = "Dummy data as snapshot sequence number is set to 0 in " @@ -47,7 +47,7 @@ public class JsonExportTest extends AbstractShardTest { @Before public void setUp() throws Exception { super.setUp(); - final File exportTmpFolder = temporaryFolder.newFolder("persistence-export"); + final var exportTmpFolder = temporaryFolder.newFolder("persistence-export"); actualJournalFilePath = exportTmpFolder.getAbsolutePath() + "/journals/" + "member-1-shard-inventory-config" + nextShardNum + "-journal.json"; actualSnapshotFilePath = exportTmpFolder.getAbsolutePath() + "/snapshots/" @@ -66,10 +66,12 @@ public class JsonExportTest extends AbstractShardTest { @Test public void testJsonExport() throws Exception { // Set up the InMemorySnapshotStore. - final DataTree source = setupInMemorySnapshotStore(); + final var source = setupInMemorySnapshotStore(); - final DataTreeModification writeMod = source.takeSnapshot().newModification(); - writeMod.write(TestModel.OUTER_LIST_PATH, ImmutableNodes.mapNodeBuilder(TestModel.OUTER_LIST_QNAME).build()); + final var writeMod = source.takeSnapshot().newModification(); + writeMod.write(TestModel.OUTER_LIST_PATH, ImmutableNodes.newSystemMapBuilder() + .withNodeIdentifier(new NodeIdentifier(TestModel.OUTER_LIST_QNAME)) + .build()); writeMod.ready(); InMemoryJournal.addEntry(shardID.toString(), 0, DUMMY_DATA); @@ -82,13 +84,18 @@ public class JsonExportTest extends AbstractShardTest { // Add some ModificationPayload entries for (int i = 1; i <= nListEntries; i++) { - listEntryKeys.add(i); - - final YangInstanceIdentifier path = YangInstanceIdentifier.builder(TestModel.OUTER_LIST_PATH) - .nodeWithKey(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, i).build(); - - final DataTreeModification mod = source.takeSnapshot().newModification(); - mod.merge(path, ImmutableNodes.mapEntry(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, i)); + final Integer value = i; + listEntryKeys.add(value); + + final var path = YangInstanceIdentifier.builder(TestModel.OUTER_LIST_PATH) + .nodeWithKey(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, value).build(); + + final var mod = source.takeSnapshot().newModification(); + mod.merge(path, ImmutableNodes.newMapEntryBuilder() + .withNodeIdentifier( + NodeIdentifierWithPredicates.of(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, value)) + .withChild(ImmutableNodes.leafNode(TestModel.ID_QNAME, value)) + .build()); mod.ready(); InMemoryJournal.addEntry(shardID.toString(), i + 1, new SimpleReplicatedLogEntry(i, 1, diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayloadTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayloadTest.java index 2797354950..215c47d4f5 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayloadTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayloadTest.java @@ -26,8 +26,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; -import org.opendaylight.yangtools.yang.data.impl.schema.Builders; -import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; +import org.opendaylight.yangtools.yang.data.spi.node.ImmutableNodes; import org.opendaylight.yangtools.yang.data.tree.api.DataTree; import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate; import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidateNode; @@ -97,7 +96,7 @@ public class CommitTransactionPayloadTest extends AbstractTest { @Before public void setUp() { setUpStatic(); - candidate = DataTreeCandidates.fromNormalizedNode(TestModel.TEST_PATH, Builders.containerBuilder() + candidate = DataTreeCandidates.fromNormalizedNode(TestModel.TEST_PATH, ImmutableNodes.newContainerBuilder() .withNodeIdentifier(new NodeIdentifier(TestModel.TEST_QNAME)) .withChild(ImmutableNodes.leafNode(TestModel.DESC_QNAME, "foo")) .build()); @@ -128,10 +127,7 @@ public class CommitTransactionPayloadTest extends AbstractTest { YangInstanceIdentifier leafSetEntryPath = YangInstanceIdentifier.builder(TestModel.TEST_PATH).node(LEAF_SET) .node(entryPathArg).build(); - candidate = DataTreeCandidates.fromNormalizedNode(leafSetEntryPath, Builders.leafSetEntryBuilder() - .withNodeIdentifier(entryPathArg) - .withValue("one") - .build()); + candidate = DataTreeCandidates.fromNormalizedNode(leafSetEntryPath, ImmutableNodes.leafSetEntry(entryPathArg)); CommitTransactionPayload payload = CommitTransactionPayload.create(nextTransactionId(), candidate); assertCandidateEquals(candidate, payload.getCandidate()); } @@ -140,12 +136,9 @@ public class CommitTransactionPayloadTest extends AbstractTest { public void testLeafSetNodeCandidate() throws Exception { YangInstanceIdentifier leafSetPath = YangInstanceIdentifier.builder(TestModel.TEST_PATH).node(LEAF_SET).build(); - candidate = DataTreeCandidates.fromNormalizedNode(leafSetPath, Builders.leafSetBuilder() + candidate = DataTreeCandidates.fromNormalizedNode(leafSetPath, ImmutableNodes.newSystemLeafSetBuilder() .withNodeIdentifier(new NodeIdentifier(LEAF_SET)) - .withChild(Builders.leafSetEntryBuilder() - .withNodeIdentifier(new NodeWithValue<>(LEAF_SET, "one")) - .withValue("one") - .build()) + .withChild(ImmutableNodes.leafSetEntry(LEAF_SET, "one")) .build()); CommitTransactionPayload payload = CommitTransactionPayload.create(nextTransactionId(), candidate); assertCandidateEquals(candidate, payload.getCandidate()); @@ -155,12 +148,9 @@ public class CommitTransactionPayloadTest extends AbstractTest { public void testOrderedLeafSetNodeCandidate() throws Exception { YangInstanceIdentifier leafSetPath = YangInstanceIdentifier.builder(TestModel.TEST_PATH).node(LEAF_SET).build(); - candidate = DataTreeCandidates.fromNormalizedNode(leafSetPath, Builders.orderedLeafSetBuilder() + candidate = DataTreeCandidates.fromNormalizedNode(leafSetPath, ImmutableNodes.newUserLeafSetBuilder() .withNodeIdentifier(new NodeIdentifier(LEAF_SET)) - .withChild(Builders.leafSetEntryBuilder() - .withNodeIdentifier(new NodeWithValue<>(LEAF_SET, "one")) - .withValue("one") - .build()) + .withChild(ImmutableNodes.leafSetEntry(LEAF_SET, "one")) .build()); CommitTransactionPayload payload = CommitTransactionPayload.create(nextTransactionId(), candidate); assertCandidateEquals(candidate, payload.getCandidate()); diff --git a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/OpsManager.java b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/OpsManager.java index 40e9268046..ee0adbc151 100644 --- a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/OpsManager.java +++ b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/OpsManager.java @@ -22,7 +22,7 @@ import org.opendaylight.mdsal.dom.api.DOMActionProviderService; import org.opendaylight.mdsal.dom.api.DOMActionService; import org.opendaylight.mdsal.dom.api.DOMRpcProviderService; import org.opendaylight.mdsal.dom.api.DOMRpcService; -import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.concepts.Registration; import scala.concurrent.duration.FiniteDuration; /** @@ -36,7 +36,7 @@ public class OpsManager extends AbstractUntypedActor { private final DOMActionProviderService actionProvisionRegistry; private final DOMActionService actionService; - private ListenerRegistration listenerReg; + private Registration listenerReg; private ActorRef opsInvoker; private ActorRef actionRegistry; private ActorRef rpcRegistry; @@ -48,7 +48,7 @@ public class OpsManager extends AbstractUntypedActor { this.rpcProvisionRegistry = requireNonNull(rpcProvisionRegistry); this.rpcServices = requireNonNull(rpcServices); this.config = requireNonNull(config); - this.actionProvisionRegistry = requireNonNull(actionProviderService); + actionProvisionRegistry = requireNonNull(actionProviderService); this.actionService = requireNonNull(actionService); } diff --git a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/OpsRegistrar.java b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/OpsRegistrar.java index 4acf7e30c1..4d11a5414e 100644 --- a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/OpsRegistrar.java +++ b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/OpsRegistrar.java @@ -12,7 +12,6 @@ import static java.util.Objects.requireNonNull; import akka.actor.Address; import akka.actor.Props; import java.util.ArrayList; -import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; @@ -22,19 +21,17 @@ import org.opendaylight.controller.remote.rpc.registry.ActionRegistry.Messages.U import org.opendaylight.controller.remote.rpc.registry.ActionRegistry.RemoteActionEndpoint; import org.opendaylight.controller.remote.rpc.registry.RpcRegistry.Messages.UpdateRemoteEndpoints; import org.opendaylight.controller.remote.rpc.registry.RpcRegistry.RemoteRpcEndpoint; -import org.opendaylight.mdsal.dom.api.DOMActionImplementation; import org.opendaylight.mdsal.dom.api.DOMActionProviderService; -import org.opendaylight.mdsal.dom.api.DOMRpcImplementation; import org.opendaylight.mdsal.dom.api.DOMRpcProviderService; -import org.opendaylight.yangtools.concepts.ObjectRegistration; +import org.opendaylight.yangtools.concepts.Registration; /** * Actor handling registration of RPCs and Actions available on remote nodes with the local * {@link DOMRpcProviderService} and {@link DOMActionProviderService}. */ final class OpsRegistrar extends AbstractUntypedActor { - private final Map> rpcRegs = new HashMap<>(); - private final Map> actionRegs = new HashMap<>(); + private final Map rpcRegs = new HashMap<>(); + private final Map actionRegs = new HashMap<>(); private final DOMRpcProviderService rpcProviderService; private final RemoteOpsProviderConfig config; private final DOMActionProviderService actionProviderService; @@ -55,9 +52,9 @@ final class OpsRegistrar extends AbstractUntypedActor { @Override public void postStop() throws Exception { - rpcRegs.values().forEach(ObjectRegistration::close); + rpcRegs.values().forEach(Registration::close); rpcRegs.clear(); - actionRegs.values().forEach(ObjectRegistration::close); + actionRegs.values().forEach(Registration::close); actionRegs.clear(); super.postStop(); @@ -85,12 +82,12 @@ final class OpsRegistrar extends AbstractUntypedActor { * Note that when an RPC moves from one remote node to another, we also do not want to expose the gap, * hence we register all new implementations before closing all registrations. */ - final Collection> prevRegs = new ArrayList<>(rpcEndpoints.size()); + final var prevRegs = new ArrayList(rpcEndpoints.size()); for (Entry> e : rpcEndpoints.entrySet()) { LOG.debug("Updating RPC registrations for {}", e.getKey()); - final ObjectRegistration prevReg; + final Registration prevReg; final Optional maybeEndpoint = e.getValue(); if (maybeEndpoint.isPresent()) { final RemoteRpcEndpoint endpoint = maybeEndpoint.orElseThrow(); @@ -106,7 +103,7 @@ final class OpsRegistrar extends AbstractUntypedActor { } } - prevRegs.forEach(ObjectRegistration::close); + prevRegs.forEach(Registration::close); } /** @@ -121,12 +118,12 @@ final class OpsRegistrar extends AbstractUntypedActor { * Note that when an Action moves from one remote node to another, we also do not want to expose the gap, * hence we register all new implementations before closing all registrations. */ - final Collection> prevRegs = new ArrayList<>(actionEndpoints.size()); + final var prevRegs = new ArrayList(actionEndpoints.size()); for (Entry> e : actionEndpoints.entrySet()) { LOG.debug("Updating action registrations for {}", e.getKey()); - final ObjectRegistration prevReg; + final Registration prevReg; final Optional maybeEndpoint = e.getValue(); if (maybeEndpoint.isPresent()) { final RemoteActionEndpoint endpoint = maybeEndpoint.orElseThrow(); @@ -142,6 +139,6 @@ final class OpsRegistrar extends AbstractUntypedActor { } } - prevRegs.forEach(ObjectRegistration::close); + prevRegs.forEach(Registration::close); } } diff --git a/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/OpsRegistrarTest.java b/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/OpsRegistrarTest.java index 4569ac68ab..fae8a3e4b5 100644 --- a/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/OpsRegistrarTest.java +++ b/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/OpsRegistrarTest.java @@ -38,9 +38,9 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMActionInstance; import org.opendaylight.mdsal.dom.api.DOMActionProviderService; import org.opendaylight.mdsal.dom.api.DOMRpcIdentifier; -import org.opendaylight.mdsal.dom.api.DOMRpcImplementationRegistration; import org.opendaylight.mdsal.dom.api.DOMRpcProviderService; import org.opendaylight.yangtools.concepts.ObjectRegistration; +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.model.api.stmt.SchemaNodeIdentifier.Absolute; @@ -51,9 +51,9 @@ public class OpsRegistrarTest { @Mock private DOMActionProviderService actionService; @Mock - private DOMRpcImplementationRegistration oldReg; + private Registration oldReg; @Mock - private DOMRpcImplementationRegistration newReg; + private Registration newReg; @Mock private ObjectRegistration oldActionReg; @Mock diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/DefaultInstanceIdentifierSupport.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/DefaultInstanceIdentifierSupport.java index 7590c3c3dc..f9759777ef 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/DefaultInstanceIdentifierSupport.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/DefaultInstanceIdentifierSupport.java @@ -38,7 +38,7 @@ public final class DefaultInstanceIdentifierSupport implements InstanceIdentifie public DefaultInstanceIdentifierSupport(@Reference final BindingCodecTree bindingCodecTree, @Reference final BindingRuntimeContext runtimeContext) { bindingCodec = bindingCodecTree.getInstanceIdentifierCodec(); - jsonCodec = JSONCodecFactorySupplier.RFC7951.createLazy(runtimeContext.getEffectiveModelContext()) + jsonCodec = JSONCodecFactorySupplier.RFC7951.createLazy(runtimeContext.modelContext()) .codecFor(new FakeLeafDefinition(), null); } diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/RegisterCommitCohortCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/RegisterCommitCohortCommand.java index d8606dd2dc..13e44e3dbc 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/RegisterCommitCohortCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/RegisterCommitCohortCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -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.controller.config.sal.clustering.it.car.rev140818.RegisterCommitCohort; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.RegisterCommitCohortInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "register-commit-cohort", description = "Run a register-commit-cohort test") public class RegisterCommitCohortCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/RegisterLoggingDtclCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/RegisterLoggingDtclCommand.java index 2ff149f227..2be532865d 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/RegisterLoggingDtclCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/RegisterLoggingDtclCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -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.controller.config.sal.clustering.it.car.rev140818.RegisterLoggingDtcl; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.RegisterLoggingDtclInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "register-logging-dtcl", description = "Run a register-logging-dtcl test") public class RegisterLoggingDtclCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/RegisterOwnershipCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/RegisterOwnershipCommand.java index 02826f767c..6298a87808 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/RegisterOwnershipCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/RegisterOwnershipCommand.java @@ -13,7 +13,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -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.controller.config.sal.clustering.it.car.rev140818.RegisterOwnership; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.RegisterOwnershipInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "register-ownership", description = "Run a register-ownership test") public class RegisterOwnershipCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Argument(index = 0, name = "car-id", required = true) private String carId; diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/StopStressTestCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/StopStressTestCommand.java index dccdd8fd2b..7626711210 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/StopStressTestCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/StopStressTestCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -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.controller.config.sal.clustering.it.car.rev140818.StopStressTest; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.StopStressTestInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app" , name = "stop-stress-test", description = "Run a stop-stress-test") public class StopStressTestCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/StressTestCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/StressTestCommand.java index ad0218504b..8af63e1ac2 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/StressTestCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/StressTestCommand.java @@ -13,7 +13,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -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.controller.config.sal.clustering.it.car.rev140818.StressTest; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.StressTestInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -24,7 +24,7 @@ import org.opendaylight.yangtools.yang.common.Uint32; @Command(scope = "test-app" , name = "stress-test", description = "Run a stress-test") public class StressTestCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Argument(index = 0, name = "rate", required = true) private int rate; @Argument(index = 1, name = "count", required = true) diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/UnregisterCommitCohortCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/UnregisterCommitCohortCommand.java index ef7dee5327..95182bc1b1 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/UnregisterCommitCohortCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/UnregisterCommitCohortCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -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.controller.config.sal.clustering.it.car.rev140818.UnregisterCommitCohort; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.UnregisterCommitCohortInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "unregister-commit-cohort", description = "Run a unregister-commit-cohort test") public class UnregisterCommitCohortCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/UnregisterLoggingDtclsCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/UnregisterLoggingDtclsCommand.java index 7a74a61de9..763b8e0651 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/UnregisterLoggingDtclsCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/UnregisterLoggingDtclsCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -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.controller.config.sal.clustering.it.car.rev140818.UnregisterLoggingDtcls; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.UnregisterLoggingDtclsInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "unregister-logging-dtcls", description = "Run and unregister-logging-dtcls test") public class UnregisterLoggingDtclsCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/UnregisterOwnershipCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/UnregisterOwnershipCommand.java index c59a057093..2b9730cb14 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/UnregisterOwnershipCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/UnregisterOwnershipCommand.java @@ -13,7 +13,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -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.controller.config.sal.clustering.it.car.rev140818.UnregisterOwnership; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.UnregisterOwnershipInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "unregister-ownership", description = "Run an unregister-ownership test") public class UnregisterOwnershipCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Argument(index = 0, name = "car-id", required = true) private String carId; diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/purchase/BuyCarCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/purchase/BuyCarCommand.java index 21dca83149..c5b5e67401 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/purchase/BuyCarCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/car/purchase/BuyCarCommand.java @@ -14,7 +14,7 @@ import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; import org.opendaylight.clustering.it.karaf.cli.InstanceIdentifierSupport; -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.controller.config.sal.clustering.it.car.purchase.rev140818.BuyCar; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.purchase.rev140818.BuyCarInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.CarId; @@ -26,7 +26,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "buy-car", description = "Run a buy-car test") public class BuyCarCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Reference private InstanceIdentifierSupport iidSupport; @Argument(index = 0, name = "person-ref", required = true) diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/AddShardReplicaCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/AddShardReplicaCommand.java index ca65c4584a..4f55f4c383 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/AddShardReplicaCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/AddShardReplicaCommand.java @@ -13,7 +13,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.AddShardReplica; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.AddShardReplicaInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "add-shard-replica", description = "Run an add-shard-replica test") public class AddShardReplicaCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Argument(index = 0, name = "shard-name", required = true) private String shardName; diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/CheckPublishNotificationsCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/CheckPublishNotificationsCommand.java index 0bf748d125..d26a63570e 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/CheckPublishNotificationsCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/CheckPublishNotificationsCommand.java @@ -13,7 +13,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.CheckPublishNotifications; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.CheckPublishNotificationsInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -23,15 +23,13 @@ import org.opendaylight.yangtools.yang.common.RpcResult; description = "Run a check-publish-notifications test") public class CheckPublishNotificationsCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Argument(index = 0, name = "id", required = true) private String id; @Override protected ListenableFuture> invokeRpc() { return rpcService.getRpc(CheckPublishNotifications.class) - .invoke(new CheckPublishNotificationsInputBuilder() - .setId(id) - .build()); + .invoke(new CheckPublishNotificationsInputBuilder().setId(id).build()); } } diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/IsClientAbortedCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/IsClientAbortedCommand.java index de64791a5c..7886dc3752 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/IsClientAbortedCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/IsClientAbortedCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.IsClientAborted; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.IsClientAbortedInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "is-client-aborted", description = "Run an is-client-aborted test") public class IsClientAbortedCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterBoundConstantCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterBoundConstantCommand.java index cdb01dae3f..afc9e824e5 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterBoundConstantCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterBoundConstantCommand.java @@ -14,7 +14,7 @@ import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; import org.opendaylight.clustering.it.karaf.cli.InstanceIdentifierSupport; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.RegisterBoundConstant; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.RegisterBoundConstantInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -23,7 +23,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "register-bound-constant", description = "Run a register-bound-constant test") public class RegisterBoundConstantCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Reference private InstanceIdentifierSupport iidSupport; @Argument(index = 0, name = "context", required = true) diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterConstantCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterConstantCommand.java index 6886b8285a..abab942b57 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterConstantCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterConstantCommand.java @@ -13,7 +13,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.RegisterConstant; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.RegisterConstantInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "register-contact", description = "Run a register-contact test") public class RegisterConstantCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Argument(index = 0, name = "constant", required = true) private String constant; diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterDefaultConstantCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterDefaultConstantCommand.java index 3a30bd2a71..6896561017 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterDefaultConstantCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterDefaultConstantCommand.java @@ -13,7 +13,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.RegisterDefaultConstant; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.RegisterDefaultConstantInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -22,15 +22,13 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "register-default-constant", description = "Run a register-default-constant test") public class RegisterDefaultConstantCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Argument(index = 0, name = "constant", required = true) private String constant; @Override protected ListenableFuture> invokeRpc() { return rpcService.getRpc(RegisterDefaultConstant.class) - .invoke(new RegisterDefaultConstantInputBuilder() - .setConstant(constant) - .build()); + .invoke(new RegisterDefaultConstantInputBuilder().setConstant(constant).build()); } } diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterFlappingSingletonCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterFlappingSingletonCommand.java index 38cdf7940b..4ae4288d16 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterFlappingSingletonCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterFlappingSingletonCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.RegisterFlappingSingleton; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.RegisterFlappingSingletonInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; description = "Run a register-flapping-singleton test") public class RegisterFlappingSingletonCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterSingletonConstantCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterSingletonConstantCommand.java index 12c4d50b4b..7901a2367b 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterSingletonConstantCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RegisterSingletonConstantCommand.java @@ -13,7 +13,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.RegisterSingletonConstant; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.RegisterSingletonConstantInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -23,16 +23,13 @@ import org.opendaylight.yangtools.yang.common.RpcResult; description = "Run a register-singleton-constant text") public class RegisterSingletonConstantCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Argument(index = 0, name = "constant", required = true) private String constant; @Override protected ListenableFuture> invokeRpc() { return rpcService.getRpc(RegisterSingletonConstant.class) - .invoke(new RegisterSingletonConstantInputBuilder() - .setConstant(constant) - .build()); - + .invoke(new RegisterSingletonConstantInputBuilder().setConstant(constant).build()); } } diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RemoveShardReplicaCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RemoveShardReplicaCommand.java index e2d042ba5a..33822014dc 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RemoveShardReplicaCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/RemoveShardReplicaCommand.java @@ -13,7 +13,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.RemoveShardReplica; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.RemoveShardReplicaInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "remove-shard-replica", description = "Run a remove-shard-replica test") public class RemoveShardReplicaCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Argument(index = 0, name = "shard-name", required = true) private String shardName; diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/ShutdownShardReplicaCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/ShutdownShardReplicaCommand.java index 22c3a860bd..79e619bb16 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/ShutdownShardReplicaCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/ShutdownShardReplicaCommand.java @@ -13,7 +13,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.ShutdownShardReplica; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.ShutdownShardReplicaInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "shutdown-shard-replica", description = " Run a shutdown-shard-replica test") public class ShutdownShardReplicaCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Argument(index = 0, name = "shard-name", required = true) private String shardName; diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/StartPublishNotificationsCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/StartPublishNotificationsCommand.java index e7a2821338..fdae5a7947 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/StartPublishNotificationsCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/StartPublishNotificationsCommand.java @@ -13,7 +13,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.StartPublishNotifications; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.StartPublishNotificationsInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -24,7 +24,7 @@ import org.opendaylight.yangtools.yang.common.Uint32; description = "Run a start-publish-notifications test") public class StartPublishNotificationsCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Argument(index = 0, name = "id", required = true) private String id; @Argument(index = 1, name = "seconds", required = true) diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/SubscribeDdtlCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/SubscribeDdtlCommand.java index 226e12daf0..b23b63f3e5 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/SubscribeDdtlCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/SubscribeDdtlCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.SubscribeDdtl; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.SubscribeDdtlInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "subscribe-ddtl", description = "Run a subscribe-ddtl test") public class SubscribeDdtlCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/SubscribeDtclCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/SubscribeDtclCommand.java index 1533feab89..33b5ea138b 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/SubscribeDtclCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/SubscribeDtclCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.SubscribeDtcl; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.SubscribeDtclInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "subscribe-dtcl", description = "Run a subscribe-dtcl test") public class SubscribeDtclCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/SubscribeYnlCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/SubscribeYnlCommand.java index 324874b050..fc4ab18c08 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/SubscribeYnlCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/SubscribeYnlCommand.java @@ -13,7 +13,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.SubscribeYnl; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.SubscribeYnlInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "subscribe-ynl", description = "Run a subscribe-ynl test") public class SubscribeYnlCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Argument(index = 0, name = "id", required = true) private String id; diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterBoundConstantCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterBoundConstantCommand.java index 7b799c69d9..5274a99156 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterBoundConstantCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterBoundConstantCommand.java @@ -14,7 +14,7 @@ import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; import org.opendaylight.clustering.it.karaf.cli.InstanceIdentifierSupport; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnregisterBoundConstant; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnregisterBoundConstantInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -23,7 +23,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "unregister-bound-constant", description = "Run an unregister-bound-constant test") public class UnregisterBoundConstantCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Reference private InstanceIdentifierSupport iidSupport; @Argument(index = 0, name = "context", required = true) diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterConstantCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterConstantCommand.java index 0923fafaf4..ea857dbf62 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterConstantCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterConstantCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnregisterConstant; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnregisterConstantInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "unregister-constant", description = "Run an unregister-constant test") public class UnregisterConstantCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterDefaultConstantCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterDefaultConstantCommand.java index 3c7aa47d8d..d17fad9d67 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterDefaultConstantCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterDefaultConstantCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnregisterDefaultConstant; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnregisterDefaultConstantInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; description = "Run an unregister-default-constant test") public class UnregisterDefaultConstantCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterFlappingSingletonCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterFlappingSingletonCommand.java index b3c58de98e..17954a722d 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterFlappingSingletonCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterFlappingSingletonCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnregisterFlappingSingleton; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnregisterFlappingSingletonInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; description = "Run an unregister-flapping-singleton test") public class UnregisterFlappingSingletonCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterSingletonConstantCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterSingletonConstantCommand.java index f66004902b..32bd3bc84d 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterSingletonConstantCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnregisterSingletonConstantCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnregisterSingletonConstant; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnregisterSingletonConstantInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; description = "Run an unregister-singleton-constant test") public class UnregisterSingletonConstantCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnsubscribeDdtlCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnsubscribeDdtlCommand.java index 05e6e0c9c5..1a6c18f3a0 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnsubscribeDdtlCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnsubscribeDdtlCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnsubscribeDdtl; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnsubscribeDdtlInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "unsubscribe-ddtl", description = "Run an unsubscribe-ddtl test") public class UnsubscribeDdtlCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnsubscribeDtclCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnsubscribeDtclCommand.java index 1a49af459f..7ad6cc452f 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnsubscribeDtclCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnsubscribeDtclCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnsubscribeDtcl; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnsubscribeDtclInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "unsubscribe-dtcl", description = "Run an unsubscribe-dtcl test") public class UnsubscribeDtclCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnsubscribeYnlCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnsubscribeYnlCommand.java index 94a84ac358..0f83b6ab3b 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnsubscribeYnlCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/UnsubscribeYnlCommand.java @@ -13,7 +13,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnsubscribeYnl; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.UnsubscribeYnlInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -22,15 +22,13 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "unsubscribe-ynl", description = "Run an unsubscribe-ynl test") public class UnsubscribeYnlCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Argument(index = 0, name = "id", required = true) private String id; @Override protected ListenableFuture> invokeRpc() { return rpcService.getRpc(UnsubscribeYnl.class) - .invoke(new UnsubscribeYnlInputBuilder() - .setId(id) - .build()); + .invoke(new UnsubscribeYnlInputBuilder().setId(id).build()); } } diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/WriteTransactionsCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/WriteTransactionsCommand.java index ace506c726..d6da19228f 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/WriteTransactionsCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/odl/mdsal/lowlevel/control/WriteTransactionsCommand.java @@ -13,7 +13,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.WriteTransactions; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.WriteTransactionsInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -23,7 +23,7 @@ import org.opendaylight.yangtools.yang.common.Uint32; @Command(scope = "test-app", name = "write-transactions", description = "Run a write-transactions test") public class WriteTransactionsCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Argument(index = 0, name = "id", required = true) private String id; @Argument(index = 1, name = "seconds", required = true) diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/people/AddPersonCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/people/AddPersonCommand.java index 24159ad4cc..3eaec8db6a 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/people/AddPersonCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/people/AddPersonCommand.java @@ -13,7 +13,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -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.controller.config.sal.clustering.it.people.rev140818.AddPerson; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.people.rev140818.AddPersonInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.people.rev140818.PersonId; @@ -24,7 +24,7 @@ import org.opendaylight.yangtools.yang.common.Uint32; @Command(scope = "test-app", name = "add-person", description = " Run an add-person test") public class AddPersonCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Argument(index = 0, name = "id", required = true) private PersonId id; @Argument(index = 1, name = "gender", required = true) diff --git a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/rpc/test/BasicGlobalCommand.java b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/rpc/test/BasicGlobalCommand.java index f344d9cd60..a61722cc89 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/rpc/test/BasicGlobalCommand.java +++ b/opendaylight/md-sal/samples/clustering-test-app/karaf-cli/src/main/java/org/opendaylight/clustering/it/karaf/cli/rpc/test/BasicGlobalCommand.java @@ -12,7 +12,7 @@ import org.apache.karaf.shell.api.action.Command; import org.apache.karaf.shell.api.action.lifecycle.Reference; import org.apache.karaf.shell.api.action.lifecycle.Service; import org.opendaylight.clustering.it.karaf.cli.AbstractRpcAction; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.urn.opendaylight.controller.basic.rpc.test.rev160120.BasicGlobal; import org.opendaylight.yang.gen.v1.urn.opendaylight.controller.basic.rpc.test.rev160120.BasicGlobalInputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; @Command(scope = "test-app", name = "global-basic", description = "Run a global-basic test") public class BasicGlobalCommand extends AbstractRpcAction { @Reference - private RpcConsumerRegistry rpcService; + private RpcService rpcService; @Override protected ListenableFuture> invokeRpc() { diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/pom.xml b/opendaylight/md-sal/samples/clustering-test-app/provider/pom.xml index fe3722817c..df1db529f4 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/pom.xml +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/pom.xml @@ -24,7 +24,7 @@ org.opendaylight.mdsal - mdsal-singleton-common-api + mdsal-singleton-api org.opendaylight.controller.samples diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/BasicRpcTestProvider.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/BasicRpcTestProvider.java index 4db9118515..4c41784eb5 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/BasicRpcTestProvider.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/BasicRpcTestProvider.java @@ -13,9 +13,9 @@ import javax.annotation.PreDestroy; import javax.inject.Inject; import javax.inject.Singleton; import org.opendaylight.mdsal.binding.api.RpcProviderService; -import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService; -import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider; -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.controller.basic.rpc.test.rev160120.BasicGlobal; import org.opendaylight.yang.gen.v1.urn.opendaylight.controller.basic.rpc.test.rev160120.BasicGlobalOutputBuilder; import org.opendaylight.yangtools.concepts.Registration; @@ -31,7 +31,7 @@ import org.slf4j.LoggerFactory; @Component(service = { }) public final class BasicRpcTestProvider implements ClusterSingletonService { private static final Logger LOG = LoggerFactory.getLogger(BasicRpcTestProvider.class); - private static final ServiceGroupIdentifier IDENTIFIER = ServiceGroupIdentifier.create("Basic-rpc-test"); + private static final ServiceGroupIdentifier IDENTIFIER = new ServiceGroupIdentifier("Basic-rpc-test"); private final RpcProviderService rpcProviderRegistry; private final Registration singletonRegistration; diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarDataTreeChangeListener.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarDataTreeChangeListener.java index 3ae202b06a..c3e9b89393 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarDataTreeChangeListener.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarDataTreeChangeListener.java @@ -7,12 +7,10 @@ */ package org.opendaylight.controller.clustering.it.provider; -import org.opendaylight.mdsal.binding.api.DataObjectModification; -import org.opendaylight.mdsal.binding.api.DataObjectModification.ModificationType; +import java.util.List; import org.opendaylight.mdsal.binding.api.DataTreeChangeListener; import org.opendaylight.mdsal.binding.api.DataTreeModification; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.Cars; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,32 +24,28 @@ public final class CarDataTreeChangeListener implements DataTreeChangeListener> changes) { + public void onDataTreeChanged(final List> changes) { if (LOG.isTraceEnabled()) { - for (DataTreeModification change : changes) { + for (var change : changes) { outputChanges(change); } } } private static void outputChanges(final DataTreeModification change) { - final DataObjectModification rootNode = change.getRootNode(); - final ModificationType modificationType = rootNode.getModificationType(); - final InstanceIdentifier rootIdentifier = change.getRootPath().getRootIdentifier(); + final var rootNode = change.getRootNode(); + final var modificationType = rootNode.modificationType(); + final var rootIdentifier = change.getRootPath().path(); switch (modificationType) { - case WRITE: - case SUBTREE_MODIFIED: { + case WRITE, SUBTREE_MODIFIED -> { LOG.trace("onDataTreeChanged - Cars config with path {} was added or changed from {} to {}", - rootIdentifier, rootNode.getDataBefore(), rootNode.getDataAfter()); - break; + rootIdentifier, rootNode.dataBefore(), rootNode.dataAfter()); } - case DELETE: { + case DELETE -> { LOG.trace("onDataTreeChanged - Cars config with path {} was deleted", rootIdentifier); - break; } - default: { + default -> { LOG.trace("onDataTreeChanged called with unknown modificationType: {}", modificationType); - break; } } } diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarProvider.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarProvider.java index bd06589f3e..29b77f7e93 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarProvider.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarProvider.java @@ -32,8 +32,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.dom.api.DOMDataTreeCommitCohortRegistration; -import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistry; +import org.opendaylight.mdsal.dom.api.DOMDataBroker.CommitCohortExtension; import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; import org.opendaylight.mdsal.eos.binding.api.Entity; import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListener; @@ -76,7 +75,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controll import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.UnregisterOwnershipOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.cars.CarEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.sal.clustering.it.car.rev140818.cars.CarEntryBuilder; -import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.concepts.ObjectRegistration; import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.Rpc; @@ -113,21 +112,17 @@ public final class CarProvider { private final AtomicLong succcessCounter = new AtomicLong(); private final AtomicLong failureCounter = new AtomicLong(); - private final EntityOwnershipListener ownershipListener = - ownershipChange -> LOG.info("ownershipChanged: {}", ownershipChange); + private final EntityOwnershipListener ownershipListener = (entity, change, inJeopardy) -> + LOG.info("ownershipChanged: entity={} change={} inJeopardy={}", entity, change, inJeopardy); private final AtomicBoolean registeredListener = new AtomicBoolean(); - - private final Set> carsDclRegistrations = ConcurrentHashMap.newKeySet(); - + private final AtomicReference commitCohortReg = new AtomicReference<>(); + private final Set> carsDclRegistrations = ConcurrentHashMap.newKeySet(); private final Set regs = new HashSet<>(); - private final Set> carsDtclRegistrations = - ConcurrentHashMap.newKeySet(); + private final Set carsDtclRegistrations = ConcurrentHashMap.newKeySet(); private volatile Thread testThread; private volatile boolean stopThread; - private final AtomicReference> commitCohortReg = - new AtomicReference<>(); @Inject @Activate @@ -297,10 +292,8 @@ public final class CarProvider { private ListenableFuture> registerLoggingDtcl( final RegisterLoggingDtclInput input) { LOG.info("Registering a new CarDataTreeChangeListener"); - final ListenerRegistration carsDtclRegistration = - dataProvider.registerDataTreeChangeListener(CARS_DTID, new CarDataTreeChangeListener()); - - carsDtclRegistrations.add(carsDtclRegistration); + final var reg = dataProvider.registerDataTreeChangeListener(CARS_DTID, new CarDataTreeChangeListener()); + carsDtclRegistrations.add(reg); return RpcResultBuilder.success(new RegisterLoggingDtclOutputBuilder().build()).buildFuture(); } @@ -309,7 +302,7 @@ public final class CarProvider { LOG.info("Unregistering the CarDataTreeChangeListener(s)"); synchronized (carsDtclRegistrations) { int numListeners = 0; - for (ListenerRegistration carsDtclRegistration : carsDtclRegistrations) { + for (var carsDtclRegistration : carsDtclRegistrations) { carsDtclRegistration.close(); numListeners++; } @@ -328,7 +321,7 @@ public final class CarProvider { } private void closeCommitCohortRegistration() { - final DOMDataTreeCommitCohortRegistration reg = commitCohortReg.getAndSet(null); + final var reg = commitCohortReg.getAndSet(null); if (reg != null) { reg.close(); LOG.info("Unregistered commit cohort"); @@ -341,9 +334,7 @@ public final class CarProvider { return RpcResultBuilder.success(new RegisterCommitCohortOutputBuilder().build()).buildFuture(); } - final DOMDataTreeCommitCohortRegistry commitCohortRegistry = domDataBroker.getExtensions().getInstance( - DOMDataTreeCommitCohortRegistry.class); - + final var commitCohortRegistry = domDataBroker.extension(CommitCohortExtension.class); if (commitCohortRegistry == null) { // Shouldn't happen return RpcResultBuilder.failed().withError(ErrorType.APPLICATION, @@ -358,7 +349,7 @@ public final class CarProvider { // to address all list entries, the second path argument is wild-carded by specifying just the CarEntry.QNAME. final YangInstanceIdentifier carEntryPath = YangInstanceIdentifier.builder( YangInstanceIdentifier.of(Cars.QNAME)).node(CarEntry.QNAME).node(CarEntry.QNAME).build(); - commitCohortReg.set(commitCohortRegistry.registerCommitCohort(new DOMDataTreeIdentifier( + commitCohortReg.set(commitCohortRegistry.registerCommitCohort(DOMDataTreeIdentifier.of( LogicalDatastoreType.CONFIGURATION, carEntryPath), new CarEntryDataTreeCommitCohort())); LOG.info("Registered commit cohort"); diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/MdsalLowLevelTestProvider.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/MdsalLowLevelTestProvider.java index 8a53a582fa..e0d6109c26 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/MdsalLowLevelTestProvider.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/MdsalLowLevelTestProvider.java @@ -41,15 +41,12 @@ import org.opendaylight.mdsal.binding.api.RpcProviderService; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataBroker; -import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; -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.DOMDataTreeReadTransaction; -import org.opendaylight.mdsal.dom.api.DOMRpcImplementationRegistration; import org.opendaylight.mdsal.dom.api.DOMRpcProviderService; import org.opendaylight.mdsal.dom.api.DOMSchemaService; -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.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.AddShardReplica; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.AddShardReplicaInput; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.AddShardReplicaOutput; @@ -135,7 +132,6 @@ import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.l import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.WriteTransactionsOutput; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.target.rev170215.IdSequence; import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; -import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.concepts.ObjectRegistration; import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -166,19 +162,17 @@ public final class MdsalLowLevelTestProvider { private final NotificationService notificationService; private final ClusterSingletonServiceProvider singletonService; private final DOMRpcProviderService domRpcService; - private final DOMDataTreeChangeService domDataTreeChangeService; - - private final Map, DOMRpcImplementationRegistration> - routedRegistrations = new HashMap<>(); + private final DataTreeChangeExtension dataTreeChangeExtension; + private final Map, Registration> routedRegistrations = new HashMap<>(); private final Map> ynlRegistrations = new HashMap<>(); + private final Map publishNotificationsTasks = new HashMap<>(); - private DOMRpcImplementationRegistration globalGetConstantRegistration = null; - private ClusterSingletonServiceRegistration getSingletonConstantRegistration; + private Registration globalGetConstantRegistration = null; + private Registration getSingletonConstantRegistration; private FlappingSingletonService flappingSingletonService; - private ListenerRegistration dtclReg; + private Registration dtclReg; private IdIntsListener idIntsListener; - private final Map publishNotificationsTasks = new HashMap<>(); @Inject @Activate @@ -200,7 +194,7 @@ public final class MdsalLowLevelTestProvider { this.domDataBroker = domDataBroker; this.configDataStore = configDataStore; - domDataTreeChangeService = domDataBroker.getExtensions().getInstance(DOMDataTreeChangeService.class); + dataTreeChangeExtension = domDataBroker.extension(DataTreeChangeExtension.class); registration = rpcRegistry.registerRpcImplementations(ImmutableClassToInstanceMap.>builder() .put(UnregisterSingletonConstant.class, this::unregisterSingletonConstant) @@ -284,7 +278,7 @@ public final class MdsalLowLevelTestProvider { idIntsListener = new IdIntsListener(); - dtclReg = domDataTreeChangeService.registerDataTreeChangeListener( + dtclReg = dataTreeChangeExtension.registerDataTreeChangeListener( new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, WriteTransactionsHandler.ID_INT_YID), idIntsListener); @@ -332,9 +326,7 @@ public final class MdsalLowLevelTestProvider { final UnregisterBoundConstantInput input) { LOG.info("In unregisterBoundConstant - {}", input); - final DOMRpcImplementationRegistration rpcRegistration = - routedRegistrations.remove(input.getContext()); - + final var rpcRegistration = routedRegistrations.remove(input.getContext()); if (rpcRegistration == null) { return RpcResultBuilder.failed() .withError(ErrorType.RPC, ErrorTag.DATA_MISSING, @@ -428,9 +420,8 @@ public final class MdsalLowLevelTestProvider { .buildFuture(); } - final DOMRpcImplementationRegistration rpcRegistration = - RoutedGetConstantService.registerNew(bindingNormalizedNodeSerializer, domRpcService, - input.getConstant(), input.getContext()); + final var rpcRegistration = RoutedGetConstantService.registerNew(bindingNormalizedNodeSerializer, domRpcService, + input.getConstant(), input.getContext()); routedRegistrations.put(input.getContext(), rpcRegistration); return RpcResultBuilder.success(new RegisterBoundConstantOutputBuilder().build()).buildFuture(); diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/FlappingSingletonService.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/FlappingSingletonService.java index cb427b7ee8..afd2d3d0ec 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/FlappingSingletonService.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/FlappingSingletonService.java @@ -7,32 +7,33 @@ */ package org.opendaylight.controller.clustering.it.provider.impl; +import static java.util.Objects.requireNonNull; + import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; -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.yangtools.concepts.Registration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public final class FlappingSingletonService implements ClusterSingletonService { private static final Logger LOG = LoggerFactory.getLogger(FlappingSingletonService.class); private static final ServiceGroupIdentifier SERVICE_GROUP_IDENTIFIER = - ServiceGroupIdentifier.create("flapping-singleton-service"); + new ServiceGroupIdentifier("flapping-singleton-service"); private final ClusterSingletonServiceProvider singletonServiceProvider; private final AtomicBoolean active = new AtomicBoolean(true); - private final AtomicLong flapCount = new AtomicLong(); - private volatile ClusterSingletonServiceRegistration registration; + + private volatile Registration registration; public FlappingSingletonService(final ClusterSingletonServiceProvider singletonServiceProvider) { LOG.debug("Registering flapping-singleton-service."); - - this.singletonServiceProvider = singletonServiceProvider; + this.singletonServiceProvider = requireNonNull(singletonServiceProvider); registration = singletonServiceProvider.registerClusterSingletonService(this); } diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/GetConstantService.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/GetConstantService.java index 0ab114ba8b..4d53a28401 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/GetConstantService.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/GetConstantService.java @@ -11,10 +11,10 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import org.opendaylight.mdsal.dom.api.DOMRpcIdentifier; import org.opendaylight.mdsal.dom.api.DOMRpcImplementation; -import org.opendaylight.mdsal.dom.api.DOMRpcImplementationRegistration; import org.opendaylight.mdsal.dom.api.DOMRpcProviderService; import org.opendaylight.mdsal.dom.api.DOMRpcResult; import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult; +import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; @@ -22,8 +22,7 @@ import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.common.YangConstants; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; -import org.opendaylight.yangtools.yang.data.impl.schema.Builders; -import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; +import org.opendaylight.yangtools.yang.data.spi.node.ImmutableNodes; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,8 +43,7 @@ public final class GetConstantService implements DOMRpcImplementation { this.constant = constant; } - public static DOMRpcImplementationRegistration registerNew( - final DOMRpcProviderService rpcProviderService, final String constant) { + public static Registration registerNew(final DOMRpcProviderService rpcProviderService, final String constant) { LOG.debug("Registering get-constant service, constant value: {}", constant); return rpcProviderService.registerRpcImplementation(new GetConstantService(constant), DOMRpcIdentifier.create(GET_CONSTANT)); @@ -55,7 +53,7 @@ public final class GetConstantService implements DOMRpcImplementation { public ListenableFuture invokeRpc(final DOMRpcIdentifier rpc, final ContainerNode input) { LOG.debug("get-constant invoked, current value: {}", constant); - return Futures.immediateFuture(new DefaultDOMRpcResult(Builders.containerBuilder() + return Futures.immediateFuture(new DefaultDOMRpcResult(ImmutableNodes.newContainerBuilder() .withNodeIdentifier(new NodeIdentifier(OUTPUT)) .withChild(ImmutableNodes.leafNode(CONSTANT, constant)) .build())); diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/RoutedGetConstantService.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/RoutedGetConstantService.java index 2e8a355ca5..04303a32de 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/RoutedGetConstantService.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/RoutedGetConstantService.java @@ -12,17 +12,16 @@ import com.google.common.util.concurrent.ListenableFuture; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.mdsal.dom.api.DOMRpcIdentifier; import org.opendaylight.mdsal.dom.api.DOMRpcImplementation; -import org.opendaylight.mdsal.dom.api.DOMRpcImplementationRegistration; import org.opendaylight.mdsal.dom.api.DOMRpcProviderService; import org.opendaylight.mdsal.dom.api.DOMRpcResult; import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult; +import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.common.YangConstants; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; @@ -46,14 +45,14 @@ public final class RoutedGetConstantService implements DOMRpcImplementation { this.constant = constant; } - public static DOMRpcImplementationRegistration registerNew( - final BindingNormalizedNodeSerializer codec, final DOMRpcProviderService rpcProviderService, - final String constant, final InstanceIdentifier context) { + public static Registration registerNew(final BindingNormalizedNodeSerializer codec, + final DOMRpcProviderService rpcProviderService, final String constant, + final InstanceIdentifier context) { LOG.debug("Registering get-contexted-constant on context: {}, with value: {}", context, constant); - final YangInstanceIdentifier yid = codec.toYangInstanceIdentifier(context); - final DOMRpcIdentifier id = DOMRpcIdentifier.create(GET_CONTEXTED_CONSTANT, yid); + final var yid = codec.toYangInstanceIdentifier(context); + final var id = DOMRpcIdentifier.create(GET_CONTEXTED_CONSTANT, yid); return rpcProviderService.registerRpcImplementation(new RoutedGetConstantService(constant), id); } diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/SingletonGetConstantService.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/SingletonGetConstantService.java index f700741891..9ff4720fd6 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/SingletonGetConstantService.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/SingletonGetConstantService.java @@ -11,14 +11,13 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import org.opendaylight.mdsal.dom.api.DOMRpcIdentifier; import org.opendaylight.mdsal.dom.api.DOMRpcImplementation; -import org.opendaylight.mdsal.dom.api.DOMRpcImplementationRegistration; import org.opendaylight.mdsal.dom.api.DOMRpcProviderService; import org.opendaylight.mdsal.dom.api.DOMRpcResult; import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult; -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.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; @@ -43,21 +42,20 @@ public final class SingletonGetConstantService implements DOMRpcImplementation, private static final QName GET_SINGLETON_CONSTANT = QName.create(MODULE, "get-singleton-constant").intern(); private static final ServiceGroupIdentifier SERVICE_GROUP_IDENTIFIER = - ServiceGroupIdentifier.create("get-singleton-constant-service"); + new ServiceGroupIdentifier("get-singleton-constant-service"); private final DOMRpcProviderService rpcProviderService; private final String constant; - private DOMRpcImplementationRegistration rpcRegistration = null; + private Registration rpcRegistration = null; private SingletonGetConstantService(final DOMRpcProviderService rpcProviderService, final String constant) { this.rpcProviderService = rpcProviderService; this.constant = constant; } - public static ClusterSingletonServiceRegistration registerNew( - final ClusterSingletonServiceProvider singletonService, final DOMRpcProviderService rpcProviderService, - final String constant) { + public static Registration registerNew(final ClusterSingletonServiceProvider singletonService, + final DOMRpcProviderService rpcProviderService, final String constant) { LOG.debug("Registering get-singleton-constant into ClusterSingletonService, value {}", constant); return singletonService.registerClusterSingletonService( diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/WriteTransactionsHandler.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/WriteTransactionsHandler.java index 26a3c3df1f..8a916e7c2b 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/WriteTransactionsHandler.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/WriteTransactionsHandler.java @@ -10,6 +10,7 @@ package org.opendaylight.controller.clustering.it.provider.impl; import static java.util.Objects.requireNonNull; import com.google.common.util.concurrent.FluentFuture; +import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; import java.util.LinkedHashSet; @@ -25,13 +26,12 @@ import org.opendaylight.mdsal.common.api.CommitInfo; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.common.api.OptimisticLockFailedException; 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.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.WriteTransactionsInput; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.WriteTransactionsOutput; import org.opendaylight.yang.gen.v1.tag.opendaylight.org._2017.controller.yang.lowlevel.control.rev170215.WriteTransactionsOutputBuilder; +import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.ErrorType; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; @@ -46,14 +46,15 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public abstract class WriteTransactionsHandler extends AbstractTransactionHandler { - private static final class Chained extends WriteTransactionsHandler implements DOMTransactionChainListener { + private static final class Chained extends WriteTransactionsHandler implements FutureCallback { private final SplittableRandom random = new SplittableRandom(); private final DOMTransactionChain transactionChain; Chained(final DOMDataBroker dataBroker, final YangInstanceIdentifier idListItem, final WriteTransactionsInput input) { super(idListItem, input); - transactionChain = dataBroker.createTransactionChain(this); + transactionChain = dataBroker.createTransactionChain(); + transactionChain.addCallback(this); } @Override @@ -67,15 +68,14 @@ public abstract class WriteTransactionsHandler extends AbstractTransactionHandle } @Override - public void onTransactionChainFailed(final DOMTransactionChain chain, final DOMDataTreeTransaction transaction, - final Throwable cause) { + public void onFailure(final Throwable cause) { // This is expected to happen frequently in isolation testing. LOG.debug("Transaction chain failed.", cause); // Do not return RPC here, rely on transaction failure to call runFailed. } @Override - public void onTransactionChainSuccessful(final DOMTransactionChain chain) { + public void onSuccess(final Empty result) { LOG.debug("Transaction chain closed successfully."); } } diff --git a/opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/sample/kitchen/impl/KitchenServiceImpl.java b/opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/sample/kitchen/impl/KitchenServiceImpl.java index 68daabaa91..b67de11367 100644 --- a/opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/sample/kitchen/impl/KitchenServiceImpl.java +++ b/opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/sample/kitchen/impl/KitchenServiceImpl.java @@ -26,7 +26,7 @@ import org.opendaylight.controller.sample.kitchen.api.KitchenService; import org.opendaylight.controller.sample.kitchen.api.KitchenServiceRuntimeMXBean; import org.opendaylight.mdsal.binding.api.NotificationService; import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener; -import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.MakeToast; import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.MakeToastInputBuilder; import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.MakeToastOutput; @@ -63,10 +63,10 @@ public final class KitchenServiceImpl extends AbstractMXBean implements KitchenS @Inject @Activate - public KitchenServiceImpl(@Reference final RpcConsumerRegistry rpcRegistry, + public KitchenServiceImpl(@Reference final RpcService rpcService, @Reference final NotificationService notifService) { super("KitchenService", "toaster-consumer", null); - makeToast = rpcRegistry.getRpc(MakeToast.class); + makeToast = rpcService.getRpc(MakeToast.class); reg = notifService.registerCompositeListener(new CompositeListener(Set.of( new CompositeListener.Component<>(ToasterOutOfBread.class, notification -> { LOG.info("ToasterOutOfBread notification"); diff --git a/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java b/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java index 37ebe29c87..33f2d2e14d 100644 --- a/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java +++ b/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java @@ -8,8 +8,6 @@ package org.opendaylight.controller.sample.toaster.provider; import static java.util.Objects.requireNonNull; -import static org.opendaylight.mdsal.binding.api.DataObjectModification.ModificationType.DELETE; -import static org.opendaylight.mdsal.binding.api.DataObjectModification.ModificationType.WRITE; import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.CONFIGURATION; import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.OPERATIONAL; import static org.opendaylight.yangtools.yang.common.ErrorType.APPLICATION; @@ -21,7 +19,7 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.SettableFuture; -import java.util.Collection; +import java.util.List; import java.util.Optional; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; @@ -37,7 +35,6 @@ import javax.inject.Singleton; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.controller.md.sal.common.util.jmx.AbstractMXBean; 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; @@ -67,7 +64,6 @@ import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterOutOfBreadBuilder; import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterRestocked; import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterRestockedBuilder; -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.Rpc; @@ -76,7 +72,6 @@ import org.opendaylight.yangtools.yang.common.ErrorType; import org.opendaylight.yangtools.yang.common.RpcError; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; -import org.opendaylight.yangtools.yang.common.Uint32; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Deactivate; @@ -115,7 +110,7 @@ public final class OpendaylightToaster extends AbstractMXBean private final DataBroker dataBroker; private final NotificationPublishService notificationProvider; - private final ListenerRegistration dataTreeChangeListenerRegistration; + private final Registration dataTreeChangeListenerRegistration; private final Registration reg; private final ExecutorService executor; @@ -153,7 +148,7 @@ public final class OpendaylightToaster extends AbstractMXBean LOG.info("Initializing..."); dataTreeChangeListenerRegistration = requireNonNull(dataBroker, "dataBroker must be set") - .registerDataTreeChangeListener(DataTreeIdentifier.create(CONFIGURATION, TOASTER_IID), this); + .registerTreeChangeListener(DataTreeIdentifier.of(CONFIGURATION, TOASTER_IID), this); try { setToasterStatusUp(null).get(); } catch (InterruptedException | ExecutionException e) { @@ -231,23 +226,26 @@ public final class OpendaylightToaster extends AbstractMXBean * Implemented from the DataTreeChangeListener interface. */ @Override - public void onDataTreeChanged(final Collection> changes) { - for (DataTreeModification change: changes) { - DataObjectModification rootNode = change.getRootNode(); - if (rootNode.getModificationType() == WRITE) { - Toaster oldToaster = rootNode.getDataBefore(); - Toaster newToaster = rootNode.getDataAfter(); - LOG.info("onDataTreeChanged - Toaster config with path {} was added or replaced: " - + "old Toaster: {}, new Toaster: {}", change.getRootPath().getRootIdentifier(), - oldToaster, newToaster); - - Uint32 darkness = newToaster.getDarknessFactor(); - if (darkness != null) { - darknessFactor.set(darkness.toJava()); + public void onDataTreeChanged(final List> changes) { + for (var change: changes) { + final var rootNode = change.getRootNode(); + switch (rootNode.modificationType()) { + case WRITE -> { + final var oldToaster = rootNode.dataBefore(); + final var newToaster = rootNode.dataAfter(); + LOG.info("onDataTreeChanged - Toaster config with path {} was added or replaced: old Toaster: {}, " + + "new Toaster: {}", change.getRootPath().path(), oldToaster, newToaster); + + final var darkness = newToaster.getDarknessFactor(); + if (darkness != null) { + darknessFactor.set(darkness.toJava()); + } + } + case DELETE -> LOG.info("onDataTreeChanged - Toaster config with path {} was deleted: old Toaster: {}", + change.getRootPath().path(), rootNode.dataBefore()); + default -> { + // No-op } - } else if (rootNode.getModificationType() == DELETE) { - LOG.info("onDataTreeChanged - Toaster config with path {} was deleted: old Toaster: {}", - change.getRootPath().getRootIdentifier(), rootNode.getDataBefore()); } } } @@ -256,7 +254,7 @@ public final class OpendaylightToaster extends AbstractMXBean * RPC call implemented from the ToasterService interface that cancels the current toast, if any. */ private ListenableFuture> cancelToast(final CancelToastInput input) { - Future current = currentMakeToastTask.getAndSet(null); + final var current = currentMakeToastTask.getAndSet(null); if (current != null) { current.cancel(true); } -- 2.36.6