From: Robert Varga Date: Tue, 12 Nov 2019 11:21:13 +0000 (+0100) Subject: Refactor AbstractClientHandle a bit X-Git-Tag: release/magnesium~17 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=44d274e8a4282ef859a35369c563e4963cf2185a Refactor AbstractClientHandle a bit We can pull the proxy creation method down into the subclass, making it simpler to follow. Change-Id: I0d025ace708a0646fb0c7dc49fc3f819453b90e5 Signed-off-by: Robert Varga --- diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractClientHandle.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractClientHandle.java index 1246c2f7c7..90773359dc 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractClientHandle.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/AbstractClientHandle.java @@ -13,10 +13,9 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; import java.util.Collection; -import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; -import java.util.function.Function; +import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; import org.opendaylight.yangtools.concepts.Identifiable; @@ -103,17 +102,19 @@ public abstract class AbstractClientHandle e return local == null ? null : local.values(); } - final T ensureProxy(final YangInstanceIdentifier path, final Function createProxy) { - final Map local = getState(); + final T ensureProxy(final YangInstanceIdentifier path) { + final State local = getState(); final Long shard = parent.resolveShardForPath(path); - return local.computeIfAbsent(shard, createProxy); + return local.computeIfAbsent(shard, this::createProxy); } final AbstractClientHistory parent() { return parent; } + abstract @NonNull T createProxy(@NonNull Long shard); + private State getState() { final State local = state; checkState(local != null, "Transaction %s is closed", transactionId); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientSnapshot.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientSnapshot.java index 74c4ae48b0..c8b1328cfd 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientSnapshot.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientSnapshot.java @@ -27,14 +27,6 @@ public class ClientSnapshot extends AbstractClientHandle exists(final YangInstanceIdentifier path) { return ensureSnapshotProxy(path).exists(path); } @@ -42,4 +34,13 @@ public class ClientSnapshot extends AbstractClientHandle>> read(final YangInstanceIdentifier path) { return ensureSnapshotProxy(path).read(path); } + + @Override + final AbstractProxyTransaction createProxy(final Long shard) { + return parent().createSnapshotProxy(getIdentifier(), shard); + } + + private AbstractProxyTransaction ensureSnapshotProxy(final YangInstanceIdentifier path) { + return ensureProxy(path); + } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientTransaction.java index 46e208b0b8..c706d99a1b 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientTransaction.java @@ -60,12 +60,8 @@ public class ClientTransaction extends AbstractClientHandle function = mock(Function.class); final AbstractProxyTransaction expected = mock(AbstractProxyTransaction.class); - when(function.apply(0L)).thenReturn(expected); - final AbstractProxyTransaction proxy = handle.ensureProxy(PATH, function); - verify(function).apply(0L); - Assert.assertEquals(expected, proxy); + final AbstractProxyTransaction proxy = handle.ensureProxy(PATH); + Assert.assertEquals(0, proxy.getIdentifier().getTransactionId()); } @Test