From 9cf31226d0b84f6201284d0ed6db06d6266228ce Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sun, 31 Dec 2023 01:19:58 +0100 Subject: [PATCH] Seal AbstractProxyTransaction Class hierarchy here is firmly defined, express that through seal/permits. Change-Id: I3fc8f04133a788b0c89e156d0e8deb5a5abead7a Signed-off-by: Robert Varga --- .../databroker/actors/dds/AbstractProxyTransaction.java | 6 ++---- .../databroker/actors/dds/LocalProxyTransaction.java | 9 +++------ .../databroker/actors/dds/RemoteProxyTransaction.java | 2 -- .../databroker/actors/dds/AbstractClientHandleTest.java | 3 +-- 4 files changed, 6 insertions(+), 14 deletions(-) diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractProxyTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractProxyTransaction.java index 81448cac42..14ad546991 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractProxyTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractProxyTransaction.java @@ -65,11 +65,9 @@ import org.slf4j.LoggerFactory; *

* This class interacts with the queueing mechanism in ClientActorBehavior, hence once we arrive at a decision * to use either a local or remote implementation, we are stuck with it. We can re-evaluate on the next transaction. - * - * @author Robert Varga */ -// FIXME: sealed when we have JDK17+ -abstract class AbstractProxyTransaction implements Identifiable { +abstract sealed class AbstractProxyTransaction implements Identifiable + permits LocalProxyTransaction, RemoteProxyTransaction { /** * Marker object used instead of read-type of requests, which are satisfied only once. This has a lower footprint * and allows compressing multiple requests into a single entry. This class is not thread-safe. diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalProxyTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalProxyTransaction.java index 93c8c9350e..6c4006e93f 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalProxyTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalProxyTransaction.java @@ -51,11 +51,9 @@ import org.slf4j.LoggerFactory; *

* This class is not thread-safe as usual with transactions. Since it does not interact with the backend until the * transaction is submitted, at which point this class gets out of the picture, this is not a cause for concern. - * - * @author Robert Varga */ -// FIXME: sealed when we have JDK17+ -abstract class LocalProxyTransaction extends AbstractProxyTransaction { +abstract sealed class LocalProxyTransaction extends AbstractProxyTransaction + permits LocalReadOnlyProxyTransaction, LocalReadWriteProxyTransaction { private static final Logger LOG = LoggerFactory.getLogger(LocalProxyTransaction.class); private final @NonNull TransactionIdentifier identifier; @@ -198,8 +196,7 @@ abstract class LocalProxyTransaction extends AbstractProxyTransaction { @Override final void forwardToRemote(final RemoteProxyTransaction successor, final TransactionRequest request, final Consumer> callback) { - if (request instanceof CommitLocalTransactionRequest) { - final CommitLocalTransactionRequest req = (CommitLocalTransactionRequest) request; + if (request instanceof final CommitLocalTransactionRequest req) { final DataTreeModification mod = req.getModification(); LOG.debug("Applying modification {} to successor {}", mod, successor); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/RemoteProxyTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/RemoteProxyTransaction.java index 318d64ccef..946e3341fd 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/RemoteProxyTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/RemoteProxyTransaction.java @@ -64,8 +64,6 @@ import org.slf4j.LoggerFactory; *

* This class is not safe to access from multiple application threads, as is usual for transactions. Its internal state * transitions based on backend responses are thread-safe. - * - * @author Robert Varga */ final class RemoteProxyTransaction extends AbstractProxyTransaction { private static final Logger LOG = LoggerFactory.getLogger(RemoteProxyTransaction.class); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractClientHandleTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractClientHandleTest.java index eb6775cf32..37f38810ce 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractClientHandleTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractClientHandleTest.java @@ -147,8 +147,7 @@ public abstract class AbstractClientHandleTest