X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=dom%2Fmdsal-dom-spi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fdom%2Fspi%2Fstore%2FSnapshotBackedWriteTransaction.java;h=99f60497d81d0469b84150b1bafff614508f5ae4;hb=fb0a271c02454f11cd3c64130513dfb7caf3f386;hp=5deb8fd2c5688c3e5cd701ae91e18918a92b8a0f;hpb=8d19626640b8f6cab9ed3e0f9908fa3c416956e5;p=mdsal.git diff --git a/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/store/SnapshotBackedWriteTransaction.java b/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/store/SnapshotBackedWriteTransaction.java index 5deb8fd2c5..99f60497d8 100644 --- a/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/store/SnapshotBackedWriteTransaction.java +++ b/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/store/SnapshotBackedWriteTransaction.java @@ -8,13 +8,14 @@ package org.opendaylight.mdsal.dom.spi.store; import static com.google.common.base.Preconditions.checkState; +import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects.ToStringHelper; -import com.google.common.base.Preconditions; import com.google.common.base.Throwables; import java.util.Optional; import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; +import org.eclipse.jdt.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; @@ -23,15 +24,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * Implementation of Write transaction which is backed by - * {@link DataTreeSnapshot} and executed according to - * {@link org.opendaylight.mdsal.dom.spi.store.SnapshotBackedWriteTransaction.TransactionReadyPrototype}. + * Implementation of Write transaction which is backed by {@link DataTreeSnapshot} and executed according to + * {@link TransactionReadyPrototype}. * * @param Identifier type */ @Beta public class SnapshotBackedWriteTransaction extends AbstractDOMStoreTransaction - implements DOMStoreWriteTransaction { + implements DOMStoreWriteTransaction, SnapshotBackedTransaction { private static final Logger LOG = LoggerFactory.getLogger(SnapshotBackedWriteTransaction.class); @@ -55,7 +55,7 @@ public class SnapshotBackedWriteTransaction extends AbstractDOMStoreTransacti SnapshotBackedWriteTransaction(final T identifier, final boolean debug, final DataTreeSnapshot snapshot, final TransactionReadyPrototype readyImpl) { super(identifier, debug); - this.readyImpl = Preconditions.checkNotNull(readyImpl, "readyImpl must not be null."); + this.readyImpl = requireNonNull(readyImpl, "readyImpl must not be null."); mutableTree = snapshot.newModification(); LOG.debug("Write Tx: {} allocated with snapshot {}", identifier, snapshot); } @@ -92,7 +92,7 @@ public class SnapshotBackedWriteTransaction extends AbstractDOMStoreTransacti tree.merge(path, data); // FIXME: Add checked exception } catch (Exception e) { - LOG.error("Tx: {}, failed to write {}:{} in {}", getIdentifier(), path, data, tree, e); + LOG.error("Tx: {}, failed to merge {}:{} in {}", getIdentifier(), path, data, tree, e); // Rethrow original ones if they are subclasses of RuntimeException or Error Throwables.throwIfUnchecked(e); // FIXME: Introduce proper checked exception @@ -136,6 +136,7 @@ public class SnapshotBackedWriteTransaction extends AbstractDOMStoreTransacti "Transaction %s is no longer open. No further modifications allowed.", getIdentifier()); } + @SuppressWarnings("checkstyle:IllegalCatch") @Override public DOMStoreThreePhaseCommitCohort ready() { @SuppressWarnings("unchecked") @@ -146,8 +147,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 @@ -163,6 +169,11 @@ public class SnapshotBackedWriteTransaction extends AbstractDOMStoreTransacti } } + @Override + public Optional getSnapshot() { + return readyImpl == null ? Optional.empty() : Optional.ofNullable(mutableTree); + } + @Override protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { return toStringHelper.add("ready", readyImpl == null); @@ -195,9 +206,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); } }