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%2FLocalReadWriteProxyTransaction.java;h=a8a38a8497cc5ebb5f0f5ce989a83f77ec2b26af;hb=refs%2Fchanges%2F65%2F100765%2F7;hp=ecb914549dacac574c0a524016972ea823de4233;hpb=cb697c760773585fc89b3a52c6cc7e3605de716f;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadWriteProxyTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadWriteProxyTransaction.java index ecb914549d..a8a38a8497 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadWriteProxyTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadWriteProxyTransaction.java @@ -11,6 +11,7 @@ import static com.google.common.base.Preconditions.checkState; import static com.google.common.base.Verify.verify; import static com.google.common.base.Verify.verifyNotNull; +import com.google.common.util.concurrent.FluentFuture; import java.util.Optional; import java.util.OptionalLong; import java.util.function.BiConsumer; @@ -21,9 +22,11 @@ import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.controller.cluster.access.commands.AbortLocalTransactionRequest; import org.opendaylight.controller.cluster.access.commands.AbstractLocalTransactionRequest; import org.opendaylight.controller.cluster.access.commands.CommitLocalTransactionRequest; +import org.opendaylight.controller.cluster.access.commands.ExistsTransactionRequest; import org.opendaylight.controller.cluster.access.commands.ModifyTransactionRequest; import org.opendaylight.controller.cluster.access.commands.ModifyTransactionRequestBuilder; import org.opendaylight.controller.cluster.access.commands.PersistenceProtocol; +import org.opendaylight.controller.cluster.access.commands.ReadTransactionRequest; import org.opendaylight.controller.cluster.access.commands.TransactionAbortRequest; import org.opendaylight.controller.cluster.access.commands.TransactionDelete; import org.opendaylight.controller.cluster.access.commands.TransactionDoCommitRequest; @@ -33,8 +36,11 @@ import org.opendaylight.controller.cluster.access.commands.TransactionPreCommitR import org.opendaylight.controller.cluster.access.commands.TransactionRequest; import org.opendaylight.controller.cluster.access.commands.TransactionWrite; import org.opendaylight.controller.cluster.access.concepts.Response; +import org.opendaylight.controller.cluster.access.concepts.RuntimeRequestException; import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; import org.opendaylight.controller.cluster.datastore.util.AbstractDataTreeModificationCursor; +import org.opendaylight.mdsal.common.api.ReadFailedException; +import org.opendaylight.yangtools.util.concurrent.FluentFutures; 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; @@ -86,7 +92,7 @@ final class LocalReadWriteProxyTransaction extends LocalProxyTransaction { private Exception recordedFailure; LocalReadWriteProxyTransaction(final ProxyHistory parent, final TransactionIdentifier identifier, - final DataTreeSnapshot snapshot) { + final DataTreeSnapshot snapshot) { super(parent, identifier, false); modification = (CursorAwareDataTreeModification) snapshot.newModification(); } @@ -107,6 +113,20 @@ final class LocalReadWriteProxyTransaction extends LocalProxyTransaction { return getModification(); } + @Override + FluentFuture doExists(final YangInstanceIdentifier path) { + final var ex = recordedFailure; + return ex == null ? super.doExists(path) + : FluentFutures.immediateFailedFluentFuture(ReadFailedException.MAPPER.apply(ex)); + } + + @Override + FluentFuture> doRead(final YangInstanceIdentifier path) { + final var ex = recordedFailure; + return ex == null ? super.doRead(path) + : FluentFutures.immediateFailedFluentFuture(ReadFailedException.MAPPER.apply(ex)); + } + @Override @SuppressWarnings("checkstyle:IllegalCatch") void doDelete(final YangInstanceIdentifier path) { @@ -323,6 +343,22 @@ final class LocalReadWriteProxyTransaction extends LocalProxyTransaction { } } + @Override + Response handleExistsRequest(final DataTreeSnapshot snapshot, final ExistsTransactionRequest request) { + final var ex = recordedFailure; + return ex == null ? super.handleExistsRequest(snapshot, request) + : request.toRequestFailure( + new RuntimeRequestException("Previous modification failed", ReadFailedException.MAPPER.apply(ex))); + } + + @Override + Response handleReadRequest(final DataTreeSnapshot snapshot, final ReadTransactionRequest request) { + final var ex = recordedFailure; + return ex == null ? super.handleReadRequest(snapshot, request) + : request.toRequestFailure( + new RuntimeRequestException("Previous modification failed", ReadFailedException.MAPPER.apply(ex))); + } + @Override void forwardToLocal(final LocalProxyTransaction successor, final TransactionRequest request, final Consumer> callback) {