Rename DOMDataTreeChangeService 49/109849/5
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 18 Jan 2024 19:30:44 +0000 (20:30 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 18 Jan 2024 20:43:12 +0000 (21:43 +0100)
This is not a free-standing service, but a well-known extension. Move it
to DOMDataBroker.

JIRA: MDSAL-841
Change-Id: Ib1cf203f6f285d7fa4f3922fff6958665839a9a8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataBrokerAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeChangeServiceAdapter.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeChangeServiceAdapterTest.java
dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataBroker.java
dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataTreeChangeService.java [deleted file]
dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/DOMDataTreeListenerTest.java
dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/AbstractDOMDataBroker.java
replicate/mdsal-replicate-netty/src/main/java/org/opendaylight/mdsal/replicate/netty/NettyReplicationSource.java
replicate/mdsal-replicate-netty/src/main/java/org/opendaylight/mdsal/replicate/netty/SourceRequestHandler.java
replicate/mdsal-replicate-netty/src/main/java/org/opendaylight/mdsal/replicate/netty/SourceSingletonService.java
trace/mdsal-trace-impl/src/main/java/org/opendaylight/mdsal/trace/impl/TracingBroker.java

index 9fbc7f23a2fe87a817bbbde11925ff3e29f52af7..3b848b2ee76996945961788128d17421ce18dd9c 100644 (file)
@@ -22,7 +22,7 @@ import org.opendaylight.mdsal.binding.api.TransactionChain;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.binding.dom.adapter.BindingDOMAdapterBuilder.Factory;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension;
 import org.opendaylight.mdsal.dom.api.DOMService;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
@@ -43,7 +43,7 @@ public class BindingDOMDataBrokerAdapter extends AbstractBindingAdapter<@NonNull
 
     public BindingDOMDataBrokerAdapter(final AdapterContext adapterContext, final DOMDataBroker domDataBroker) {
         super(adapterContext, domDataBroker);
-        final var domTreeChange = domDataBroker.extension(DOMDataTreeChangeService.class);
+        final var domTreeChange = domDataBroker.extension(DataTreeChangeExtension.class);
         treeChangeService = domTreeChange == null ? null
                 : new BindingDOMDataTreeChangeServiceAdapter(adapterContext, domTreeChange);
     }
index d82203ba5da4473638db1c28b7b21b8de3986eee..9ec4e275ecdfa8694782e87c3273b5c31543af58 100644 (file)
@@ -14,24 +14,24 @@ import org.opendaylight.mdsal.binding.api.DataListener;
 import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeChangeService;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
-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.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.Augmentation;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 
 /**
- * Adapter exposing Binding {@link DataTreeChangeService} and wrapping a {@link DOMDataTreeChangeService} and is
+ * Adapter exposing Binding {@link DataTreeChangeService} and wrapping a {@link DataTreeChangeExtension} and is
  * responsible for translation and instantiation of {@link BindingDOMDataTreeChangeListenerAdapter} adapters.
  *
  * <p>
  * Each registered {@link DataTreeChangeListener} is wrapped using adapter and registered directly to DOM service.
  */
-final class BindingDOMDataTreeChangeServiceAdapter extends AbstractBindingAdapter<DOMDataTreeChangeService>
+final class BindingDOMDataTreeChangeServiceAdapter extends AbstractBindingAdapter<DataTreeChangeExtension>
         implements DataTreeChangeService {
     BindingDOMDataTreeChangeServiceAdapter(final AdapterContext adapterContext,
-            final DOMDataTreeChangeService dataTreeChangeService) {
-        super(adapterContext, dataTreeChangeService);
+            final DataTreeChangeExtension dataTreeChangeExtension) {
+        super(adapterContext, dataTreeChangeExtension);
     }
 
     @Override
index a935e831561f120e5cc9dccb6d9b605319cf5719..42a8d2e959554a9bb24ff5d737a27f69c06418db 100644 (file)
@@ -29,8 +29,8 @@ import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.ClusteredDOMDataTreeChangeListener;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.Top;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
@@ -48,7 +48,7 @@ public class BindingDOMDataTreeChangeServiceAdapterTest {
     private static final YangInstanceIdentifier TOP_YIID = YangInstanceIdentifier.of(Top.QNAME);
 
     @Mock
-    private DOMDataTreeChangeService mockDOMService;
+    private DataTreeChangeExtension mockDOMService;
 
     @Mock
     private BindingDOMCodecServices services;
index 6654fbdab5bd3fd46df5784281325e4c191b4759..34f822c3faa991c893519df6909f8f97b82e2cbc 100644 (file)
@@ -93,4 +93,42 @@ public interface DOMDataBroker extends DOMService<DOMDataBroker, DOMDataBroker.E
          */
         Registration registerCommitCohort(DOMDataTreeIdentifier path, DOMDataTreeCommitCohort cohort);
     }
+
+    /**
+     * An {@link Extension} which allows users to register for changes to a subtree.
+     */
+    interface DataTreeChangeExtension extends Extension {
+        /**
+         * Registers a {@link DOMDataTreeChangeListener} to receive notifications when data changes under a given path
+         * in the conceptual data tree.
+         *
+         * <p>
+         * You are able to register for notifications for any node or subtree which can be represented using
+         * {@link DOMDataTreeIdentifier}.
+         *
+         * <p>
+         * You are able to register for data change notifications for a subtree or leaf even if it does not exist. You
+         * will receive notification once that node is created.
+         *
+         * <p>
+         * If there is any pre-existing data in the data tree for the path for which you are registering, you will
+         * receive an initial data change event, which will contain all pre-existing data, marked as created.
+         *
+         * <p>
+         * This method returns a {@link Registration} object. To "unregister" your listener for changes call
+         * the {@link Registration#close()} method on the returned object.
+         *
+         * <p>
+         * You MUST explicitly unregister your listener when you no longer want to receive notifications. This is
+         * especially true in OSGi environments, where failure to do so during bundle shutdown can lead to stale
+         * listeners being still registered.
+         *
+         * @param treeId Data tree identifier of the subtree which should be watched for changes.
+         * @param listener Listener instance which is being registered
+         * @return A {@link Registration} object, which may be used to unregister your listener using
+         *         {@link Registration#close()} to stop delivery of change events.
+         * @throws NullPointerException if any of the arguments is {@code null}
+         */
+        Registration registerDataTreeChangeListener(DOMDataTreeIdentifier treeId, DOMDataTreeChangeListener listener);
+    }
 }
diff --git a/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataTreeChangeService.java b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataTreeChangeService.java
deleted file mode 100644 (file)
index 8585fea..0000000
+++ /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.mdsal.dom.api;
-
-import org.eclipse.jdt.annotation.NonNullByDefault;
-import org.opendaylight.yangtools.concepts.Registration;
-
-/**
- * A {@link DOMDataBroker.Extension} which allows users to register for changes to a subtree.
- */
-@NonNullByDefault
-public interface DOMDataTreeChangeService extends DOMDataBroker.Extension {
-    /**
-     * Registers a {@link DOMDataTreeChangeListener} to receive notifications when data changes under a given path in
-     * the conceptual data tree.
-     *
-     * <p>
-     * You are able to register for notifications for any node or subtree which can be represented using
-     * {@link DOMDataTreeIdentifier}.
-     *
-     * <p>
-     * You are able to register for data change notifications for a subtree or leaf even if it does not exist. You will
-     * receive notification once that node is created.
-     *
-     * <p>
-     * If there is any pre-existing data in the data tree for the path for which you are registering, you will receive
-     * an initial data change event, which will contain all pre-existing data, marked as created.
-     *
-     * <p>
-     * This method returns a {@link Registration} object. To "unregister" your listener for changes call
-     * the {@link Registration#close()} method on the returned object.
-     *
-     * <p>
-     * You MUST explicitly unregister your listener when you no longer want to receive notifications. This is especially
-     * true in OSGi environments, where failure to do so during bundle shutdown can lead to stale listeners being still
-     * registered.
-     *
-     * @param treeId Data tree identifier of the subtree which should be watched for changes.
-     * @param listener Listener instance which is being registered
-     * @return A {@link Registration} object, which may be used to unregister your listener using
-     *         {@link Registration#close()} to stop delivery of change events.
-     * @throws NullPointerException if any of the arguments is {@code null}
-     */
-    Registration registerDataTreeChangeListener(DOMDataTreeIdentifier treeId, DOMDataTreeChangeListener listener);
-}
index 4b91c8ee622d825a6b2c82fb590e03982844688c..eda4c008889098c49643cbde41f2924d12cd0a70 100644 (file)
@@ -28,8 +28,8 @@ import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.common.api.TransactionCommitDeadlockException;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.mdsal.dom.spi.AbstractDOMDataBroker;
 import org.opendaylight.mdsal.dom.spi.store.DOMStore;
@@ -117,7 +117,7 @@ public class DOMDataTreeListenerTest extends AbstractDatastoreTest {
     public void writeContainerEmptyTreeTest() throws InterruptedException {
         final var latch = new CountDownLatch(1);
 
-        final var dataTreeChangeService = getDOMDataTreeChangeService();
+        final var dataTreeChangeService = getDataTreeChangeExtension();
         assertNotNull("DOMDataTreeChangeService not found, cannot continue with test!",
                 dataTreeChangeService);
 
@@ -145,7 +145,7 @@ public class DOMDataTreeListenerTest extends AbstractDatastoreTest {
     public void replaceContainerContainerInTreeTest() throws ExecutionException, InterruptedException {
         final var latch = new CountDownLatch(2);
 
-        final var dataTreeChangeService = getDOMDataTreeChangeService();
+        final var dataTreeChangeService = getDataTreeChangeExtension();
         assertNotNull("DOMDataTreeChangeService not found, cannot continue with test!",
                 dataTreeChangeService);
 
@@ -184,7 +184,7 @@ public class DOMDataTreeListenerTest extends AbstractDatastoreTest {
     public void deleteContainerContainerInTreeTest() throws ExecutionException, InterruptedException {
         final var latch = new CountDownLatch(2);
 
-        final var dataTreeChangeService = getDOMDataTreeChangeService();
+        final var dataTreeChangeService = getDataTreeChangeExtension();
         assertNotNull("DOMDataTreeChangeService not found, cannot continue with test!", dataTreeChangeService);
 
         var writeTx = domBroker.newWriteOnlyTransaction();
@@ -223,7 +223,7 @@ public class DOMDataTreeListenerTest extends AbstractDatastoreTest {
     public void replaceChildListContainerInTreeTest() throws ExecutionException, InterruptedException {
         final var latch = new CountDownLatch(2);
 
-        final var dataTreeChangeService = getDOMDataTreeChangeService();
+        final var dataTreeChangeService = getDataTreeChangeExtension();
         assertNotNull("DOMDataTreeChangeService not found, cannot continue with test!", dataTreeChangeService);
 
         var writeTx = domBroker.newWriteOnlyTransaction();
@@ -264,7 +264,7 @@ public class DOMDataTreeListenerTest extends AbstractDatastoreTest {
     public void rootModificationChildListenerTest() throws ExecutionException, InterruptedException {
         final var latch = new CountDownLatch(2);
 
-        final var dataTreeChangeService = getDOMDataTreeChangeService();
+        final var dataTreeChangeService = getDataTreeChangeExtension();
         assertNotNull("DOMDataTreeChangeService not found, cannot continue with test!",
                 dataTreeChangeService);
 
@@ -304,7 +304,7 @@ public class DOMDataTreeListenerTest extends AbstractDatastoreTest {
     public void listEntryChangeNonRootRegistrationTest() throws ExecutionException, InterruptedException {
         final var latch = new CountDownLatch(2);
 
-        final var dataTreeChangeService = getDOMDataTreeChangeService();
+        final var dataTreeChangeService = getDataTreeChangeExtension();
         assertNotNull("DOMDataTreeChangeService not found, cannot continue with test!", dataTreeChangeService);
 
         var writeTx = domBroker.newWriteOnlyTransaction();
@@ -373,8 +373,8 @@ public class DOMDataTreeListenerTest extends AbstractDatastoreTest {
         assertEquals(expectedMod, candidateNode.modificationType());
     }
 
-    private DOMDataTreeChangeService getDOMDataTreeChangeService() {
-        return domBroker.extension(DOMDataTreeChangeService.class);
+    private DataTreeChangeExtension getDataTreeChangeExtension() {
+        return domBroker.extension(DataTreeChangeExtension.class);
     }
 
     static class CommitExecutorService extends ForwardingExecutorService {
index 92144cd0688ecdb8fcf2eae82a3cb26b86a3846f..d1be9449ea21f527024923c2be5d6a6a78f5768b 100644 (file)
@@ -14,7 +14,6 @@ import java.util.Map;
 import java.util.concurrent.atomic.AtomicLong;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
 import org.opendaylight.mdsal.dom.spi.store.DOMStore;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionChain;
@@ -35,7 +34,7 @@ public abstract class AbstractDOMDataBroker extends AbstractDOMForwardedTransact
 
         final var builder = ImmutableList.<Extension>builder();
         if (isSupported(datastores, DOMStoreTreeChangePublisher.class)) {
-            builder.add((DOMDataTreeChangeService) (treeId, listener) -> {
+            builder.add((DataTreeChangeExtension) (treeId, listener) -> {
                 final var dsType = treeId.datastore();
                 if (getTxFactories().get(dsType) instanceof DOMStoreTreeChangePublisher publisher) {
                     return publisher.registerTreeChangeListener(treeId.path(), listener);
index 91ad211a319569954df483a98c85e3b301d5803c..eee974009781c61dea1bb38bade9ead3f9ae99eb 100644 (file)
@@ -13,7 +13,7 @@ import static com.google.common.base.Verify.verifyNotNull;
 import com.google.common.annotations.VisibleForTesting;
 import java.time.Duration;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.osgi.service.component.annotations.Activate;
@@ -67,7 +67,7 @@ public final class NettyReplicationSource {
             final ClusterSingletonServiceProvider singleton, final boolean enabled, final int listenPort,
             final Duration keepaliveInterval, final int maxMissedKeepalives) {
         LOG.debug("Source {}", enabled ? "enabled" : "disabled");
-        final var dtcs = verifyNotNull(broker.extension(DOMDataTreeChangeService.class),
+        final var dtcs = verifyNotNull(broker.extension(DataTreeChangeExtension.class),
             "Missing DOMDataTreeChangeService in broker %s", broker);
         checkArgument(maxMissedKeepalives > 0, "max-missed-keepalives %s must be greater than 0", maxMissedKeepalives);
         return enabled ? singleton.registerClusterSingletonService(new SourceSingletonService(bootstrap,
index a4a6d987405899efd114176665f91b6d2ddaa8c2..1f9a15e074b5859bd8616410a293ad30f207ffc0 100644 (file)
@@ -19,7 +19,7 @@ import java.io.IOException;
 import java.util.List;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.ClusteredDOMDataTreeChangeListener;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeDataInput;
@@ -33,11 +33,11 @@ import org.slf4j.LoggerFactory;
 final class SourceRequestHandler extends SimpleChannelInboundHandler<ByteBuf> {
     private static final Logger LOG = LoggerFactory.getLogger(SourceRequestHandler.class);
 
-    private final DOMDataTreeChangeService dtcs;
+    private final DataTreeChangeExtension dtcs;
 
     private Registration reg;
 
-    SourceRequestHandler(final DOMDataTreeChangeService dtcs) {
+    SourceRequestHandler(final DataTreeChangeExtension dtcs) {
         this.dtcs = requireNonNull(dtcs);
     }
 
index c86423e72ddbc7cbad77a7ddf8ac04ed621c3db8..22cc0c95f811d55a31538a4b6cd6a297abb9de02 100644 (file)
@@ -26,7 +26,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 import org.checkerframework.checker.lock.qual.GuardedBy;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
 import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
 import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeStreamVersion;
@@ -43,7 +43,7 @@ final class SourceSingletonService extends ChannelInitializer<SocketChannel> imp
         new ServiceGroupIdentifier(SourceSingletonService.class.getName());
 
     private final BootstrapSupport bootstrapSupport;
-    private final DOMDataTreeChangeService dtcs;
+    private final DataTreeChangeExtension dtcs;
     private final int listenPort;
 
     @GuardedBy("this")
@@ -53,7 +53,7 @@ final class SourceSingletonService extends ChannelInitializer<SocketChannel> imp
     @GuardedBy("this")
     private Channel serverChannel;
 
-    SourceSingletonService(final BootstrapSupport bootstrapSupport, final DOMDataTreeChangeService dtcs,
+    SourceSingletonService(final BootstrapSupport bootstrapSupport, final DataTreeChangeExtension dtcs,
             final int listenPort, final Duration keepaliveInterval, final int maxMissedKeepalives) {
         this.bootstrapSupport = requireNonNull(bootstrapSupport);
         this.dtcs = requireNonNull(dtcs);
index 49df6240bd8117fa726f4fc11475f86db1b4a6fb..b7b528b636de630f645554e18e5d6fb1a814a1c0 100644 (file)
@@ -18,7 +18,6 @@ import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.ClusteredDOMDataTreeChangeListener;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
@@ -301,8 +300,8 @@ public class TracingBroker implements TracingDOMDataBroker {
     @Override
     public <T extends Extension> T extension(final Class<T> type) {
         final var ext = delegate.extension(type);
-        if (DOMDataTreeChangeService.class.equals(type) && ext instanceof DOMDataTreeChangeService treeChange) {
-            return type.cast((DOMDataTreeChangeService) (domDataTreeIdentifier, listener) -> {
+        if (DataTreeChangeExtension.class.equals(type) && ext instanceof DataTreeChangeExtension treeChange) {
+            return type.cast((DataTreeChangeExtension) (domDataTreeIdentifier, listener) -> {
                 final var rootId = domDataTreeIdentifier.path();
                 if (isRegistrationWatched(rootId, domDataTreeIdentifier.datastore())) {
                     LOG.warn("{} registration (registerDataTreeChangeListener) for {} from {}.",