X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatabroker%2Factors%2Fdds%2FLocalReadOnlyProxyTransaction.java;h=6d019af1a19383b460ff95524a02b501cb12aa30;hb=HEAD;hp=65e6bf6b49cb9dc9520856c5db7b9da7aecb55db;hpb=caa423625725a7937205f003421e7a08a734760b;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadOnlyProxyTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadOnlyProxyTransaction.java index 65e6bf6b49..6d019af1a1 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadOnlyProxyTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadOnlyProxyTransaction.java @@ -7,10 +7,12 @@ */ package org.opendaylight.controller.cluster.databroker.actors.dds; -import com.google.common.base.Preconditions; -import com.google.common.base.Verify; +import static com.google.common.base.Verify.verify; +import static com.google.common.base.Verify.verifyNotNull; +import static java.util.Objects.requireNonNull; + +import java.util.Optional; import java.util.function.Consumer; -import javax.annotation.concurrent.NotThreadSafe; import org.opendaylight.controller.cluster.access.commands.CommitLocalTransactionRequest; import org.opendaylight.controller.cluster.access.commands.ModifyTransactionRequest; import org.opendaylight.controller.cluster.access.commands.PersistenceProtocol; @@ -18,22 +20,26 @@ import org.opendaylight.controller.cluster.access.concepts.Response; import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; 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.tree.DataTreeSnapshot; +import org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot; /** - * A read-only specialization of {@link LocalProxyTransaction}. + * A read-only specialization of {@link LocalProxyTransaction}. This class is NOT thread-safe. * * @author Robert Varga */ -@NotThreadSafe final class LocalReadOnlyProxyTransaction extends LocalProxyTransaction { - private final DataTreeSnapshot snapshot; LocalReadOnlyProxyTransaction(final ProxyHistory parent, final TransactionIdentifier identifier, final DataTreeSnapshot snapshot) { - super(parent, identifier); - this.snapshot = Preconditions.checkNotNull(snapshot); + super(parent, identifier, false); + this.snapshot = requireNonNull(snapshot); + } + + LocalReadOnlyProxyTransaction(final ProxyHistory parent, final TransactionIdentifier identifier) { + super(parent, identifier, true); + // It is an error to touch snapshot once we are DONE + snapshot = null; } @Override @@ -43,47 +49,53 @@ final class LocalReadOnlyProxyTransaction extends LocalProxyTransaction { @Override DataTreeSnapshot readOnlyView() { - return snapshot; + return verifyNotNull(snapshot, "Transaction %s is DONE", getIdentifier()); } @Override void doDelete(final YangInstanceIdentifier path) { - throw new UnsupportedOperationException("Read-only snapshot"); + throw new UnsupportedOperationException("doDelete"); } @Override - void doMerge(final YangInstanceIdentifier path, final NormalizedNode data) { - throw new UnsupportedOperationException("Read-only snapshot"); + void doMerge(final YangInstanceIdentifier path, final NormalizedNode data) { + throw new UnsupportedOperationException("doMerge"); } @Override - void doWrite(final YangInstanceIdentifier path, final NormalizedNode data) { - throw new UnsupportedOperationException("Read-only snapshot"); + void doWrite(final YangInstanceIdentifier path, final NormalizedNode data) { + throw new UnsupportedOperationException("doWrite"); } @Override CommitLocalTransactionRequest commitRequest(final boolean coordinated) { - throw new UnsupportedOperationException("Read-only snapshot"); + throw new UnsupportedOperationException("commitRequest"); } @Override - void doSeal() { + Optional flushState() { // No-op + return Optional.empty(); } @Override - void flushState(final AbstractProxyTransaction successor) { - // No-op + void applyForwardedModifyTransactionRequest(final ModifyTransactionRequest request, + final Consumer> callback) { + commonModifyTransactionRequest(request); + abort(); } @Override - void applyModifyTransactionRequest(final ModifyTransactionRequest request, - final Consumer> callback) { - Verify.verify(request.getModifications().isEmpty()); - - final PersistenceProtocol protocol = request.getPersistenceProtocol().get(); - Verify.verify(protocol == PersistenceProtocol.ABORT); - abort(); + void replayModifyTransactionRequest(final ModifyTransactionRequest request, + final Consumer> callback, final long enqueuedTicks) { + commonModifyTransactionRequest(request); + enqueueAbort(callback, enqueuedTicks); } + private static void commonModifyTransactionRequest(final ModifyTransactionRequest request) { + verify(request.getModifications().isEmpty()); + + final PersistenceProtocol protocol = request.getPersistenceProtocol().orElseThrow(); + verify(protocol == PersistenceProtocol.ABORT); + } }