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=7cc245a42f302871726cb2a4a297a2b82fb09c61;hb=3980617d0cbe4279f5518a7d828b98989199d363;hp=9806208b7ca3c5d30c368aec7aa4e71cb1aa5e9a;hpb=e5d320150e9cb40c338bf27f31a636fa5207d3eb;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 9806208b7c..7cc245a42f 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 @@ -11,22 +11,14 @@ import com.google.common.base.Preconditions; import com.google.common.base.Verify; import java.util.function.Consumer; import javax.annotation.concurrent.NotThreadSafe; -import org.opendaylight.controller.cluster.access.commands.AbortLocalTransactionRequest; import org.opendaylight.controller.cluster.access.commands.CommitLocalTransactionRequest; import org.opendaylight.controller.cluster.access.commands.ModifyTransactionRequest; import org.opendaylight.controller.cluster.access.commands.PersistenceProtocol; -import org.opendaylight.controller.cluster.access.commands.TransactionPurgeRequest; -import org.opendaylight.controller.cluster.access.commands.TransactionRequest; import org.opendaylight.controller.cluster.access.concepts.Response; import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; -import org.opendaylight.controller.cluster.datastore.util.AbstractDataTreeModificationCursor; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshot; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * A read-only specialization of {@link LocalProxyTransaction}. @@ -35,16 +27,21 @@ import org.slf4j.LoggerFactory; */ @NotThreadSafe final class LocalReadOnlyProxyTransaction extends LocalProxyTransaction { - private static final Logger LOG = LoggerFactory.getLogger(LocalReadOnlyProxyTransaction.class); private final DataTreeSnapshot snapshot; LocalReadOnlyProxyTransaction(final ProxyHistory parent, final TransactionIdentifier identifier, final DataTreeSnapshot snapshot) { - super(parent, identifier); + super(parent, identifier, false); this.snapshot = Preconditions.checkNotNull(snapshot); } + LocalReadOnlyProxyTransaction(final ProxyHistory parent, final TransactionIdentifier identifier) { + super(parent, identifier, true); + // It is an error to touch snapshot once we are DONE + this.snapshot = null; + } + @Override boolean isSnapshotOnly() { return true; @@ -52,7 +49,7 @@ final class LocalReadOnlyProxyTransaction extends LocalProxyTransaction { @Override DataTreeSnapshot readOnlyView() { - return snapshot; + return Preconditions.checkNotNull(snapshot, "Transaction %s is DONE", getIdentifier()); } @Override @@ -86,52 +83,23 @@ final class LocalReadOnlyProxyTransaction extends LocalProxyTransaction { } @Override - void applyModifyTransactionRequest(final ModifyTransactionRequest request, + void applyForwardedModifyTransactionRequest(final ModifyTransactionRequest request, final Consumer> callback) { - Verify.verify(request.getModifications().isEmpty()); - - final PersistenceProtocol protocol = request.getPersistenceProtocol().get(); - Verify.verify(protocol == PersistenceProtocol.ABORT); + commonModifyTransactionRequest(request); abort(); } @Override - void forwardToRemote(final RemoteProxyTransaction successor, final TransactionRequest request, - final Consumer> callback) { - if (request instanceof CommitLocalTransactionRequest) { - final CommitLocalTransactionRequest req = (CommitLocalTransactionRequest) request; - final DataTreeModification mod = req.getModification(); - - LOG.debug("Applying modification {} to successor {}", mod, successor); - mod.applyToCursor(new AbstractDataTreeModificationCursor() { - @Override - public void write(final PathArgument child, final NormalizedNode data) { - successor.write(current().node(child), data); - } - - @Override - public void merge(final PathArgument child, final NormalizedNode data) { - successor.merge(current().node(child), data); - } - - @Override - public void delete(final PathArgument child) { - successor.delete(current().node(child)); - } - }); - - successor.ensureSealed(); - - final ModifyTransactionRequest successorReq = successor.commitRequest(req.isCoordinated()); - successor.sendRequest(successorReq, callback); - } else if (request instanceof AbortLocalTransactionRequest) { - LOG.debug("Forwarding abort {} to successor {}", request, successor); - successor.abort(); - } else if (request instanceof TransactionPurgeRequest) { - LOG.debug("Forwarding purge {} to successor {}", request, successor); - successor.purge(); - } else { - throw new IllegalArgumentException("Unhandled request" + request); - } + void replayModifyTransactionRequest(final ModifyTransactionRequest request, + final Consumer> callback, final long enqueuedTicks) { + commonModifyTransactionRequest(request); + enqueueAbort(callback, enqueuedTicks); + } + + private static void commonModifyTransactionRequest(final ModifyTransactionRequest request) { + Verify.verify(request.getModifications().isEmpty()); + + final PersistenceProtocol protocol = request.getPersistenceProtocol().get(); + Verify.verify(protocol == PersistenceProtocol.ABORT); } }