From 5f8a373c07549a901b70595067dd11c161d0c4e4 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sat, 9 Dec 2023 18:06:03 +0100 Subject: [PATCH] Reduce ObjectRegistration use We have a few more services which are exposing ObjectRegistration from APIs for no particularly good reason. Switch them to use Registration instead, which allows us to reduce adaptation in some cases. JIRA: MDSAL-843 Change-Id: I9c88288cd4d57b9fb2fc780d9017fbb3eb5dbd94 Signed-off-by: Robert Varga --- .../binding/api/ActionProviderService.java | 24 +++---- .../mdsal/binding/api/ActionService.java | 4 -- .../api/DataTreeCommitCohortRegistry.java | 19 ++---- .../adapter/ActionProviderServiceAdapter.java | 16 ++--- ...OMDataTreeCommitCohortRegistryAdapter.java | 19 ++---- .../osgi/OSGiActionProviderService.java | 8 +-- ...taTreeCommitCohortRegistryAdapterTest.java | 22 +++--- .../spi/ModuleInfoSnapshotResolver.java | 12 ++-- .../dom/api/DOMActionProviderService.java | 21 +++--- .../dom/broker/DOMNotificationRouter.java | 11 +-- .../mdsal/dom/broker/DOMRpcRouter.java | 67 +++++++++---------- .../impl/RegularYangModuleInfoRegistry.java | 3 +- .../ForwardingDOMActionProviderService.java | 8 +-- 13 files changed, 100 insertions(+), 134 deletions(-) diff --git a/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ActionProviderService.java b/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ActionProviderService.java index a818c833e7..7a1ee8cb11 100644 --- a/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ActionProviderService.java +++ b/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ActionProviderService.java @@ -7,12 +7,11 @@ */ package org.opendaylight.mdsal.binding.api; -import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableSet; import java.util.Set; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.yangtools.concepts.ObjectRegistration; +import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.Action; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -22,10 +21,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; * and implementations can be invoked dynamically at runtime, via {@link ActionService}. Implementations registered * with this interface may throw {@link IllegalArgumentException}s when they encounter inconsistent input data and * {@link IllegalStateException} in they are unable to service the request. - * - * @author Robert Varga */ -@Beta public interface ActionProviderService extends BindingService { /** * Register an implementation of an action, potentially constrained to a set of nodes. @@ -35,24 +31,24 @@ public interface ActionProviderService extends BindingService { * @param datastore {@link LogicalDatastoreType} on which the implementation operates * @param validNodes Set of nodes this implementation is constrained to, empty if this implementation can handle * any target node. - * @return An {@link ObjectRegistration} + * @return A {@link Registration} * @throws NullPointerException if any of the arguments is null * @throws IllegalArgumentException if any of the {@code validNodes} does not match {@code datastore} * @throws UnsupportedOperationException if this service cannot handle requested datastore */ -

, ?, ?>, S extends A> - @NonNull ObjectRegistration registerImplementation(@NonNull ActionSpec spec, @NonNull S implementation, +

, ?, ?>> + @NonNull Registration registerImplementation(@NonNull ActionSpec spec, @NonNull A implementation, @NonNull LogicalDatastoreType datastore, @NonNull Set> validNodes); - default

, ?, ?>, S extends T> - @NonNull ObjectRegistration registerImplementation(final @NonNull ActionSpec spec, - final @NonNull S implementation, final @NonNull LogicalDatastoreType datastore) { + default

, ?, ?>> + @NonNull Registration registerImplementation(final @NonNull ActionSpec spec, + final @NonNull A implementation, final @NonNull LogicalDatastoreType datastore) { return registerImplementation(spec, implementation, datastore, ImmutableSet.of()); } - default

, ?, ?>, S extends T> - @NonNull ObjectRegistration registerImplementation(final @NonNull ActionSpec spec, - final @NonNull S implementation) { + default

, ?, ?>> + @NonNull Registration registerImplementation(final @NonNull ActionSpec spec, + final @NonNull A implementation) { return registerImplementation(spec, implementation, LogicalDatastoreType.OPERATIONAL); } } diff --git a/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ActionService.java b/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ActionService.java index 778f942179..9ee19f7b71 100644 --- a/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ActionService.java +++ b/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ActionService.java @@ -7,7 +7,6 @@ */ package org.opendaylight.mdsal.binding.api; -import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableSet; import java.util.Set; import org.eclipse.jdt.annotation.NonNullByDefault; @@ -20,10 +19,7 @@ import org.opendaylight.yangtools.yang.binding.RpcInput; /** * Provides access to registered {@code action} implementations. Each action is defined in a YANG model, * and implementations are added dynamically at runtime, via {@link ActionProviderService}. - * - * @author Robert Varga */ -@Beta @NonNullByDefault public interface ActionService extends BindingService { /** diff --git a/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataTreeCommitCohortRegistry.java b/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataTreeCommitCohortRegistry.java index 811ed33bfc..f806842fb5 100644 --- a/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataTreeCommitCohortRegistry.java +++ b/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataTreeCommitCohortRegistry.java @@ -8,26 +8,21 @@ package org.opendaylight.mdsal.binding.api; import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.yangtools.concepts.ObjectRegistration; +import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.DataObject; /** - * Commit Cohort registry. - * - *

- * See {@link DataTreeCommitCohort} for more details. - * - * @author Tony Tkacik <ttkacik@cisco.com> + * Commit Cohort registry. See {@link DataTreeCommitCohort} for more details. */ public interface DataTreeCommitCohortRegistry { /** - * Register commit cohort which will participate in three-phase commit protocols of write - * transaction in data broker associated with this instance of extension. + * Register commit cohort which will participate in three-phase commit protocols of write transaction in data broker + * associated with this instance of extension. * * @param subtree Subtree path on which commit cohort operates. * @param cohort Commit cohort - * @return Registaration object for DOM Data Three Commit cohort. + * @return Registration object for DOM Data Three Commit cohort. */ - > @NonNull ObjectRegistration registerCommitCohort( - @NonNull DataTreeIdentifier subtree, @NonNull T cohort); + @NonNull Registration registerCommitCohort(@NonNull DataTreeIdentifier subtree, + @NonNull DataTreeCommitCohort cohort); } diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionProviderServiceAdapter.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionProviderServiceAdapter.java index 04c5a43345..a3ad6568c0 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionProviderServiceAdapter.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionProviderServiceAdapter.java @@ -29,8 +29,7 @@ import org.opendaylight.mdsal.dom.api.DOMActionResult; import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; import org.opendaylight.mdsal.dom.api.DOMService; import org.opendaylight.mdsal.dom.spi.SimpleDOMActionResult; -import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; -import org.opendaylight.yangtools.concepts.ObjectRegistration; +import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.Action; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -75,8 +74,8 @@ public final class ActionProviderServiceAdapter extends AbstractBindingAdapter, ?, ?>, S extends A> - ObjectRegistration registerImplementation(final ActionSpec spec, final S implementation, + public

, ?, ?>> + Registration registerImplementation(final ActionSpec spec, final A implementation, final LogicalDatastoreType datastore, final Set> validNodes) { final CurrentAdapterSerializer serializer = currentSerializer(); final Absolute actionPath = serializer.getActionPath(spec); @@ -90,14 +89,7 @@ public final class ActionProviderServiceAdapter extends AbstractBindingAdapter reg = getDelegate().registerActionImplementation(impl, instance); - - return new AbstractObjectRegistration<>(implementation) { - @Override - protected void removeRegistration() { - reg.close(); - } - }; + return getDelegate().registerActionImplementation(impl, instance); } private static final class Impl implements DOMActionImplementation { diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeCommitCohortRegistryAdapter.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeCommitCohortRegistryAdapter.java index 16a9d638d4..c31e30463f 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeCommitCohortRegistryAdapter.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeCommitCohortRegistryAdapter.java @@ -11,7 +11,7 @@ import org.opendaylight.mdsal.binding.api.DataTreeCommitCohort; import org.opendaylight.mdsal.binding.api.DataTreeCommitCohortRegistry; import org.opendaylight.mdsal.binding.api.DataTreeIdentifier; import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistry; -import org.opendaylight.yangtools.concepts.ObjectRegistration; +import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.Augmentation; import org.opendaylight.yangtools.yang.binding.DataObject; @@ -23,23 +23,12 @@ final class BindingDOMDataTreeCommitCohortRegistryAdapter } @Override - public > ObjectRegistration registerCommitCohort( - final DataTreeIdentifier subtree, final T cohort) { + public Registration registerCommitCohort(final DataTreeIdentifier subtree, + final DataTreeCommitCohort cohort) { final var target = subtree.path().getTargetType(); final var adapter = new BindingDOMDataTreeCommitCohortAdapter<>(adapterContext(), cohort, Augmentation.class.isAssignableFrom(target) ? target : null); final var domPath = currentSerializer().toDOMDataTreeIdentifier(subtree); - final var domReg = getDelegate().registerCommitCohort(domPath, adapter); - return new ObjectRegistration<>() { - @Override - public T getInstance() { - return cohort; - } - - @Override - public void close() { - domReg.close(); - } - }; + return getDelegate().registerCommitCohort(domPath, adapter); } } diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/osgi/OSGiActionProviderService.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/osgi/OSGiActionProviderService.java index c26553fb12..9ca49caabd 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/osgi/OSGiActionProviderService.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/osgi/OSGiActionProviderService.java @@ -12,7 +12,7 @@ import java.util.Set; import org.opendaylight.mdsal.binding.api.ActionProviderService; import org.opendaylight.mdsal.binding.api.ActionSpec; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.yangtools.concepts.ObjectRegistration; +import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.Action; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -37,9 +37,9 @@ public final class OSGiActionProviderService extends AbstractAdaptedService, ?, ?>, S extends A> - ObjectRegistration registerImplementation(final ActionSpec spec, final S implementation, - final LogicalDatastoreType datastore, final Set> validNodes) { + public

, ?, ?>> + Registration registerImplementation(final ActionSpec spec, final A implementation, + final LogicalDatastoreType datastore, final Set> validNodes) { return delegate.registerImplementation(spec, implementation, datastore, validNodes); } } diff --git a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeCommitCohortRegistryAdapterTest.java b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeCommitCohortRegistryAdapterTest.java index bb76474729..02824349d0 100644 --- a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeCommitCohortRegistryAdapterTest.java +++ b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeCommitCohortRegistryAdapterTest.java @@ -7,15 +7,15 @@ */ package org.opendaylight.mdsal.binding.dom.adapter; -import static org.junit.jupiter.api.Assertions.assertSame; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; import com.google.common.util.concurrent.MoreExecutors; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; import org.opendaylight.mdsal.binding.api.DataTreeCommitCohort; import org.opendaylight.mdsal.binding.api.DataTreeIdentifier; import org.opendaylight.mdsal.binding.dom.adapter.test.util.BindingBrokerTestFactory; @@ -25,7 +25,15 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.te import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +@ExtendWith(MockitoExtension.class) public class BindingDOMDataTreeCommitCohortRegistryAdapterTest { + @Mock + private DOMDataTreeCommitCohortRegistry cohortRegistry; + @Mock + private Registration cohortRegistration; + @Mock + private DataTreeCommitCohort dataTreeCommitCohort; + @Test void basicTest() { final var bindingBrokerTestFactory = new BindingBrokerTestFactory(); @@ -33,8 +41,6 @@ public class BindingDOMDataTreeCommitCohortRegistryAdapterTest { final var bindingTestContext = bindingBrokerTestFactory.getTestContext(); bindingTestContext.start(); - final var cohortRegistry = mock(DOMDataTreeCommitCohortRegistry.class); - final var cohortRegistration = mock(Registration.class); doReturn(cohortRegistration).when(cohortRegistry).registerCommitCohort(any(), any()); doNothing().when(cohortRegistration).close(); final var registryAdapter = new BindingDOMDataTreeCommitCohortRegistryAdapter(bindingTestContext.getCodec(), @@ -42,10 +48,8 @@ public class BindingDOMDataTreeCommitCohortRegistryAdapterTest { final var dataTreeIdentifier = DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(Top.class)); - final DataTreeCommitCohort dataTreeCommitCohort = mock(DataTreeCommitCohort.class); - try (var objectRegistration = registryAdapter.registerCommitCohort(dataTreeIdentifier, dataTreeCommitCohort)) { - assertSame(dataTreeCommitCohort, objectRegistration.getInstance()); + try (var reg = registryAdapter.registerCommitCohort(dataTreeIdentifier, dataTreeCommitCohort)) { + // Nothing else } - verify(cohortRegistration).close(); } } \ No newline at end of file diff --git a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotResolver.java b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotResolver.java index 458a7bc141..ab655c8782 100644 --- a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotResolver.java +++ b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotResolver.java @@ -29,9 +29,8 @@ import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.mdsal.binding.runtime.api.ModuleInfoSnapshot; import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; -import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; +import org.opendaylight.yangtools.concepts.AbstractRegistration; import org.opendaylight.yangtools.concepts.Mutable; -import org.opendaylight.yangtools.concepts.ObjectRegistration; import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.DataRoot; import org.opendaylight.yangtools.yang.binding.YangFeature; @@ -113,9 +112,8 @@ public final class ModuleInfoSnapshotResolver implements Mutable { return ctxResolver.registerSupportedFeatures(BindingReflections.getQNameModule(module), features); } - public synchronized List> registerModuleInfos( - final Iterable moduleInfos) { - final var ret = new ArrayList>(); + public synchronized List registerModuleInfos(final Iterable moduleInfos) { + final var ret = new ArrayList(); for (var moduleInfo : moduleInfos) { ret.add(register(requireNonNull(moduleInfo))); } @@ -123,12 +121,12 @@ public final class ModuleInfoSnapshotResolver implements Mutable { } @Holding("this") - private ObjectRegistration register(final @NonNull YangModuleInfo moduleInfo) { + private Registration register(final @NonNull YangModuleInfo moduleInfo) { final var regInfos = flatDependencies(moduleInfo).stream() .map(this::registerModuleInfo) .collect(ImmutableList.toImmutableList()); - return new AbstractObjectRegistration<>(moduleInfo) { + return new AbstractRegistration() { @Override protected void removeRegistration() { unregister(regInfos); diff --git a/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMActionProviderService.java b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMActionProviderService.java index 11ac9ed156..254d0a8534 100644 --- a/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMActionProviderService.java +++ b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMActionProviderService.java @@ -7,17 +7,15 @@ */ package org.opendaylight.mdsal.dom.api; -import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableSet; import java.util.Set; import org.eclipse.jdt.annotation.NonNullByDefault; -import org.opendaylight.yangtools.concepts.ObjectRegistration; +import org.opendaylight.yangtools.concepts.Registration; /** * A {@link DOMService} which allows registration of action implementations with a conceptual router. The client * counterpart of this service is {@link DOMActionService}. */ -@Beta @NonNullByDefault public interface DOMActionProviderService extends DOMService { @@ -33,24 +31,23 @@ public interface DOMActionProviderService * * @param implementation action implementation, must not be null * @param instances Set of supported operation identifiers. Must not be null, empty, or contain a null element. - * @return A {@link ObjectRegistration} object, guaranteed to be non-null. + * @return A {@link Registration} object, guaranteed to be non-null. * @throws NullPointerException if {@code implementation} or {@code instances} is null, or if {@code instances} * contains a null element. * @throws IllegalArgumentException if {@code instances} is empty */ - ObjectRegistration registerActionImplementation(T implementation, - Set instances); + Registration registerActionImplementation(DOMActionImplementation implementation, Set instances); /** * Register an {@link DOMActionImplementation} object with this service, servicing specified action instance. * * @param implementation action implementation, must not be null * @param instance supported operation identifier. Must not be null. - * @return A {@link ObjectRegistration} object, guaranteed to be non-null. + * @return A {@link Registration} object, guaranteed to be non-null. * @throws NullPointerException if any argument is null */ - default ObjectRegistration registerActionImplementation( - final T implementation, final DOMActionInstance instance) { + default Registration registerActionImplementation(final DOMActionImplementation implementation, + final DOMActionInstance instance) { return registerActionImplementation(implementation, ImmutableSet.of(instance)); } @@ -59,13 +56,13 @@ public interface DOMActionProviderService * * @param implementation action implementation, must not be null * @param instances Set of supported operation identifiers. Must not be null, empty, or contain a null element. - * @return A {@link ObjectRegistration} object, guaranteed to be non-null. + * @return A {@link Registration} object, guaranteed to be non-null. * @throws NullPointerException if {@code implementation} or {@code instances} is null, or if {@code instances} * contains a null element. * @throws IllegalArgumentException if {@code instances} is empty */ - default ObjectRegistration registerActionImplementation( - final T implementation, final DOMActionInstance... instances) { + default Registration registerActionImplementation(final DOMActionImplementation implementation, + final DOMActionInstance... instances) { return registerActionImplementation(implementation, ImmutableSet.copyOf(instances)); } } diff --git a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMNotificationRouter.java b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMNotificationRouter.java index 6b5e956d45..4b3190a1da 100644 --- a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMNotificationRouter.java +++ b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMNotificationRouter.java @@ -7,6 +7,8 @@ */ package org.opendaylight.mdsal.dom.broker; +import static java.util.Objects.requireNonNull; + import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMultimap; @@ -35,7 +37,6 @@ import org.opendaylight.mdsal.dom.api.DOMNotificationPublishDemandExtension; import org.opendaylight.mdsal.dom.api.DOMNotificationPublishDemandExtension.DemandListener; import org.opendaylight.mdsal.dom.api.DOMNotificationPublishService; import org.opendaylight.mdsal.dom.api.DOMNotificationService; -import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; import org.opendaylight.yangtools.concepts.AbstractRegistration; import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.util.ObjectRegistry; @@ -72,9 +73,11 @@ public class DOMNotificationRouter implements AutoCloseable { } @VisibleForTesting - abstract static sealed class Reg extends AbstractObjectRegistration { + abstract static sealed class Reg extends AbstractRegistration { + private final @NonNull DOMNotificationListener listener; + Reg(final @NonNull DOMNotificationListener listener) { - super(listener); + this.listener = requireNonNull(listener); } } @@ -323,7 +326,7 @@ public class DOMNotificationRouter implements AutoCloseable { private static void deliverEvents(final Reg reg, final ImmutableList events) { if (reg.notClosed()) { - final var listener = reg.getInstance(); + final var listener = reg.listener; for (var event : events) { event.deliverTo(listener); } diff --git a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMRpcRouter.java b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMRpcRouter.java index e740b37ba0..3b6587a802 100644 --- a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMRpcRouter.java +++ b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMRpcRouter.java @@ -56,9 +56,7 @@ import org.opendaylight.mdsal.dom.api.DOMRpcProviderService; import org.opendaylight.mdsal.dom.api.DOMRpcResult; import org.opendaylight.mdsal.dom.api.DOMRpcService; import org.opendaylight.mdsal.dom.api.DOMSchemaService; -import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; import org.opendaylight.yangtools.concepts.AbstractRegistration; -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; @@ -87,10 +85,10 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv private final @NonNull DOMRpcService rpcService = new RpcServiceFacade(); @GuardedBy("this") - private ImmutableList listeners = ImmutableList.of(); + private ImmutableList listeners = ImmutableList.of(); @GuardedBy("this") - private ImmutableList actionListeners = ImmutableList.of(); + private ImmutableList actionListeners = ImmutableList.of(); private volatile DOMRpcRoutingTable routingTable = DOMRpcRoutingTable.EMPTY; @@ -166,11 +164,11 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv listenerNotifier.execute(() -> notifyActionChanged(newTable, implementation)); } - private synchronized void removeListener(final RegImpl reg) { + private synchronized void removeListener(final RpcAvailReg reg) { listeners = ImmutableList.copyOf(Collections2.filter(listeners, input -> !reg.equals(input))); } - private synchronized void removeActionListener(final ActionRegistration reg) { + private synchronized void removeActionListener(final ActionAvailReg reg) { actionListeners = ImmutableList.copyOf(Collections2.filter(actionListeners, input -> !reg.equals(input))); } @@ -248,13 +246,15 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv return routingTable; } - private static final class RegImpl extends AbstractObjectRegistration { + private static final class RpcAvailReg extends AbstractRegistration { + private final DOMRpcAvailabilityListener listener; + private Map> prevRpcs; private DOMRpcRouter router; - RegImpl(final DOMRpcRouter router, final DOMRpcAvailabilityListener listener, + RpcAvailReg(final DOMRpcRouter router, final DOMRpcAvailabilityListener listener, final Map> rpcs) { - super(listener); + this.listener = requireNonNull(listener); this.router = requireNonNull(router); prevRpcs = requireNonNull(rpcs); } @@ -271,17 +271,16 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv added.addAll(Collections2.transform(e.getValue(), i -> DOMRpcIdentifier.create(e.getKey(), i))); } if (!added.isEmpty()) { - getInstance().onRpcAvailable(added); + listener.onRpcAvailable(added); } } void addRpc(final DOMRpcRoutingTable newTable, final DOMRpcImplementation impl) { - final var l = getInstance(); - if (!l.acceptsImplementation(impl)) { + if (!listener.acceptsImplementation(impl)) { return; } - final Map> rpcs = verifyNotNull(newTable.getOperations(l)); + final Map> rpcs = verifyNotNull(newTable.getOperations(listener)); final MapDifference> diff = Maps.difference(prevRpcs, rpcs); final List added = new ArrayList<>(); @@ -296,17 +295,16 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv prevRpcs = rpcs; if (!added.isEmpty()) { - l.onRpcAvailable(added); + listener.onRpcAvailable(added); } } void removeRpc(final DOMRpcRoutingTable newTable, final DOMRpcImplementation impl) { - final var l = getInstance(); - if (!l.acceptsImplementation(impl)) { + if (!listener.acceptsImplementation(impl)) { return; } - final Map> rpcs = verifyNotNull(newTable.getOperations(l)); + final Map> rpcs = verifyNotNull(newTable.getOperations(listener)); final MapDifference> diff = Maps.difference(prevRpcs, rpcs); final List removed = new ArrayList<>(); @@ -321,18 +319,20 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv prevRpcs = rpcs; if (!removed.isEmpty()) { - l.onRpcUnavailable(removed); + listener.onRpcUnavailable(removed); } } } - private static final class ActionRegistration extends AbstractObjectRegistration { + private static final class ActionAvailReg extends AbstractRegistration { + private final AvailabilityListener listener; + private Map> prevActions; private DOMRpcRouter router; - ActionRegistration(final DOMRpcRouter router, final AvailabilityListener listener, + ActionAvailReg(final DOMRpcRouter router, final AvailabilityListener listener, final Map> actions) { - super(listener); + this.listener = requireNonNull(listener); this.router = requireNonNull(router); prevActions = requireNonNull(actions); } @@ -349,17 +349,16 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv added.addAll(Collections2.transform(e.getValue(), i -> DOMActionInstance.of(e.getKey(), i))); } if (!added.isEmpty()) { - getInstance().onActionsChanged(ImmutableSet.of(), ImmutableSet.copyOf(added)); + listener.onActionsChanged(ImmutableSet.of(), ImmutableSet.copyOf(added)); } } void actionChanged(final DOMActionRoutingTable newTable, final DOMActionImplementation impl) { - final var l = getInstance(); - if (!l.acceptsImplementation(impl)) { + if (!listener.acceptsImplementation(impl)) { return; } - final Map> actions = verifyNotNull(newTable.getOperations(l)); + final Map> actions = verifyNotNull(newTable.getOperations(listener)); final MapDifference> diff = Maps.difference(prevActions, actions); final Set removed = new HashSet<>(); @@ -385,7 +384,7 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv prevActions = actions; if (!removed.isEmpty() || !added.isEmpty()) { - l.onActionsChanged(removed, added); + listener.onActionsChanged(removed, added); } } } @@ -412,9 +411,9 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv @Override public Registration registerAvailabilityListener(final AvailabilityListener listener) { synchronized (DOMRpcRouter.this) { - final var ret = new ActionRegistration(DOMRpcRouter.this, listener, + final var ret = new ActionAvailReg(DOMRpcRouter.this, listener, actionRoutingTable.getOperations(listener)); - actionListeners = ImmutableList.builder() + actionListeners = ImmutableList.builder() .addAll(actionListeners) .add(ret) .build(); @@ -428,8 +427,8 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv @NonNullByDefault private final class ActionProviderServiceFacade implements DOMActionProviderService { @Override - public ObjectRegistration registerActionImplementation( - final T implementation, final Set instances) { + public Registration registerActionImplementation(final DOMActionImplementation implementation, + final Set instances) { checkArgument(!instances.isEmpty(), "Instances must not be empty"); synchronized (DOMRpcRouter.this) { @@ -440,10 +439,10 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv listenerNotifier.execute(() -> notifyActionChanged(newTable, implementation)); } - return new AbstractObjectRegistration<>(implementation) { + return new AbstractRegistration() { @Override protected void removeRegistration() { - removeActionImplementation(getInstance(), instances); + removeActionImplementation(implementation, instances); } }; } @@ -464,8 +463,8 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv @Override public Registration registerRpcListener(final DOMRpcAvailabilityListener listener) { synchronized (DOMRpcRouter.this) { - final var ret = new RegImpl(DOMRpcRouter.this, listener, routingTable.getOperations(listener)); - listeners = ImmutableList.builder().addAll(listeners).add(ret).build(); + final var ret = new RpcAvailReg(DOMRpcRouter.this, listener, routingTable.getOperations(listener)); + listeners = ImmutableList.builder().addAll(listeners).add(ret).build(); listenerNotifier.execute(ret::initialTable); return ret; diff --git a/dom/mdsal-dom-schema-osgi/src/main/java/org/opendaylight/mdsal/dom/schema/osgi/impl/RegularYangModuleInfoRegistry.java b/dom/mdsal-dom-schema-osgi/src/main/java/org/opendaylight/mdsal/dom/schema/osgi/impl/RegularYangModuleInfoRegistry.java index 8c0b167db6..d1e3717245 100644 --- a/dom/mdsal-dom-schema-osgi/src/main/java/org/opendaylight/mdsal/dom/schema/osgi/impl/RegularYangModuleInfoRegistry.java +++ b/dom/mdsal-dom-schema-osgi/src/main/java/org/opendaylight/mdsal/dom/schema/osgi/impl/RegularYangModuleInfoRegistry.java @@ -18,7 +18,6 @@ import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.runtime.api.ModuleInfoSnapshot; import org.opendaylight.mdsal.binding.runtime.spi.ModuleInfoSnapshotResolver; import org.opendaylight.yangtools.concepts.AbstractRegistration; -import org.opendaylight.yangtools.concepts.ObjectRegistration; import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.DataRoot; import org.opendaylight.yangtools.yang.binding.YangFeatureProvider; @@ -99,7 +98,7 @@ final class RegularYangModuleInfoRegistry extends YangModuleInfoRegistry { @Override protected void removeRegistration() { featureRegs.forEach(Registration::close); - infoRegs.forEach(ObjectRegistration::close); + infoRegs.forEach(Registration::close); } }; } diff --git a/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/ForwardingDOMActionProviderService.java b/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/ForwardingDOMActionProviderService.java index 4272bb52a6..2d532bd45b 100644 --- a/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/ForwardingDOMActionProviderService.java +++ b/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/ForwardingDOMActionProviderService.java @@ -7,22 +7,20 @@ */ package org.opendaylight.mdsal.dom.spi; -import com.google.common.annotations.Beta; import java.util.Set; import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.mdsal.dom.api.DOMActionImplementation; import org.opendaylight.mdsal.dom.api.DOMActionInstance; import org.opendaylight.mdsal.dom.api.DOMActionProviderService; -import org.opendaylight.yangtools.concepts.ObjectRegistration; +import org.opendaylight.yangtools.concepts.Registration; -@Beta @NonNullByDefault public abstract class ForwardingDOMActionProviderService extends ForwardingDOMService implements DOMActionProviderService { @Override - public ObjectRegistration registerActionImplementation( - final T implementation, final Set instances) { + public Registration registerActionImplementation(final DOMActionImplementation implementation, + final Set instances) { return delegate().registerActionImplementation(implementation, instances); } } -- 2.36.6