X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fsal-dom-spi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fcore%2Fspi%2Fdata%2FSnapshotBackedWriteTransaction.java;h=eaabb3a21fbb802e82e90fcd70a2ef1e41c46e39;hb=7292faba613ab556babd7bbcdd78984f5668bf9b;hp=a02d768370133743b4c38ef0d7246f450422a6d2;hpb=dea515c8870769408b9bea29f555d6b71ff43211;p=controller.git diff --git a/opendaylight/md-sal/sal-dom-spi/src/main/java/org/opendaylight/controller/sal/core/spi/data/SnapshotBackedWriteTransaction.java b/opendaylight/md-sal/sal-dom-spi/src/main/java/org/opendaylight/controller/sal/core/spi/data/SnapshotBackedWriteTransaction.java index a02d768370..eaabb3a21f 100644 --- a/opendaylight/md-sal/sal-dom-spi/src/main/java/org/opendaylight/controller/sal/core/spi/data/SnapshotBackedWriteTransaction.java +++ b/opendaylight/md-sal/sal-dom-spi/src/main/java/org/opendaylight/controller/sal/core/spi/data/SnapshotBackedWriteTransaction.java @@ -8,12 +8,14 @@ package org.opendaylight.controller.sal.core.spi.data; import static com.google.common.base.Preconditions.checkState; + import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.base.Throwables; import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; +import javax.annotation.Nullable; 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.DataTreeModification; @@ -119,11 +121,12 @@ public class SnapshotBackedWriteTransaction extends AbstractDOMStoreTransacti * @return null if the the transaction has been closed; */ final Optional> readSnapshotNode(final YangInstanceIdentifier path) { - return readyImpl == null ? null : mutableTree.readNode(path); + return readyImpl == null ? null : Optional.fromJavaUtil(mutableTree.readNode(path)); } private final void checkNotReady() { - checkState(readyImpl != null, "Transaction %s is no longer open. No further modifications allowed.", getIdentifier()); + checkState(readyImpl != null, "Transaction %s is no longer open. No further modifications allowed.", + getIdentifier()); } @Override @@ -136,8 +139,13 @@ public class SnapshotBackedWriteTransaction extends AbstractDOMStoreTransacti final DataTreeModification tree = mutableTree; TREE_UPDATER.lazySet(this, null); - tree.ready(); - return wasReady.transactionReady(this, tree); + try { + tree.ready(); + return wasReady.transactionReady(this, tree, null); + } catch (RuntimeException e) { + LOG.debug("Store transaction: {}: unexpected failure when readying", getIdentifier(), e); + return wasReady.transactionReady(this, tree, e); + } } @Override @@ -159,9 +167,6 @@ public class SnapshotBackedWriteTransaction extends AbstractDOMStoreTransacti } /** - * Prototype implementation of - * {@link #ready(org.opendaylight.controller.sal.core.spi.data.SnapshotBackedWriteTransaction)} - * * This class is intended to be implemented by Transaction factories * responsible for allocation of {@link org.opendaylight.controller.sal.core.spi.data.SnapshotBackedWriteTransaction} and * providing underlying logic for applying implementation. @@ -186,8 +191,12 @@ public class SnapshotBackedWriteTransaction extends AbstractDOMStoreTransacti * Transaction on which ready was invoked. * @param tree * Modified data tree which has been constructed. + * @param readyError + * Any error that has already happened when readying. * @return DOMStoreThreePhaseCommitCohort associated with transaction */ - protected abstract DOMStoreThreePhaseCommitCohort transactionReady(SnapshotBackedWriteTransaction tx, DataTreeModification tree); + protected abstract DOMStoreThreePhaseCommitCohort transactionReady(SnapshotBackedWriteTransaction tx, + DataTreeModification tree, + @Nullable Exception readyError); } -} \ No newline at end of file +}