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%2FLocalProxyTransaction.java;h=93c8c9350e2d4fc0c164e8c5a700b9125c494abd;hb=refs%2Fchanges%2F39%2F101139%2F5;hp=feddd5fc5a5763999cd4abf087ba8c6b54686f6a;hpb=3ce75d79be6b4b7d0f703505f791f71131c9cc48;p=controller.git 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 feddd5fc5a..93c8c9350e 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 @@ -26,8 +26,10 @@ import org.opendaylight.controller.cluster.access.commands.ReadTransactionSucces 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.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; @@ -52,6 +54,7 @@ import org.slf4j.LoggerFactory; * * @author Robert Varga */ +// FIXME: sealed when we have JDK17+ abstract class LocalProxyTransaction extends AbstractProxyTransaction { private static final Logger LOG = LoggerFactory.getLogger(LocalProxyTransaction.class); @@ -77,12 +80,24 @@ abstract class LocalProxyTransaction extends AbstractProxyTransaction { @Override FluentFuture doExists(final YangInstanceIdentifier path) { - return FluentFutures.immediateBooleanFluentFuture(readOnlyView().readNode(path).isPresent()); + final boolean result; + try { + result = readOnlyView().readNode(path).isPresent(); + } catch (FailedDataTreeModificationException e) { + return FluentFutures.immediateFailedFluentFuture(ReadFailedException.MAPPER.apply(e)); + } + return FluentFutures.immediateBooleanFluentFuture(result); } @Override FluentFuture> doRead(final YangInstanceIdentifier path) { - return FluentFutures.immediateFluentFuture(readOnlyView().readNode(path)); + final Optional result; + try { + result = readOnlyView().readNode(path); + } catch (FailedDataTreeModificationException e) { + return FluentFutures.immediateFailedFluentFuture(ReadFailedException.MAPPER.apply(e)); + } + return FluentFutures.immediateFluentFuture(result); } @Override @@ -140,14 +155,24 @@ abstract class LocalProxyTransaction extends AbstractProxyTransaction { @NonNull Response handleExistsRequest(final @NonNull DataTreeSnapshot snapshot, final @NonNull ExistsTransactionRequest request) { - return new ExistsTransactionSuccess(request.getTarget(), request.getSequence(), - snapshot.readNode(request.getPath()).isPresent()); + try { + return new ExistsTransactionSuccess(request.getTarget(), request.getSequence(), + snapshot.readNode(request.getPath()).isPresent()); + } catch (FailedDataTreeModificationException e) { + return request.toRequestFailure(new RuntimeRequestException("Failed to access data", + ReadFailedException.MAPPER.apply(e))); + } } @NonNull Response handleReadRequest(final @NonNull DataTreeSnapshot snapshot, final @NonNull ReadTransactionRequest request) { - return new ReadTransactionSuccess(request.getTarget(), request.getSequence(), - snapshot.readNode(request.getPath())); + try { + return new ReadTransactionSuccess(request.getTarget(), request.getSequence(), + snapshot.readNode(request.getPath())); + } catch (FailedDataTreeModificationException e) { + return request.toRequestFailure(new RuntimeRequestException("Failed to access data", + ReadFailedException.MAPPER.apply(e))); + } } private boolean handleReadRequest(final TransactionRequest request, final Consumer> callback) {