X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=dom%2Fmdsal-dom-inmemory-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fdom%2Fstore%2Finmemory%2FInMemoryDOMStoreThreePhaseCommitCohort.java;h=d7de64d02c33581adf89ce601485c065b4bd1cec;hb=11408d627adca7eb71ac956c3ad01f75b6b91596;hp=68cc7b49b243b56e0e8c3e1f1a8017a7713acea6;hpb=1bff2edfc4a3840e2e1cbd19c2144d81c7af55f9;p=mdsal.git diff --git a/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMStoreThreePhaseCommitCohort.java b/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMStoreThreePhaseCommitCohort.java index 68cc7b49b2..d7de64d02c 100644 --- a/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMStoreThreePhaseCommitCohort.java +++ b/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMStoreThreePhaseCommitCohort.java @@ -9,20 +9,20 @@ package org.opendaylight.mdsal.dom.store.inmemory; import static com.google.common.base.Preconditions.checkState; +import static java.util.Objects.requireNonNull; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import org.opendaylight.mdsal.common.api.OptimisticLockFailedException; +import org.opendaylight.mdsal.common.api.TransactionCommitFailedException; import org.opendaylight.mdsal.dom.spi.store.AbstractDOMStoreTransaction; import org.opendaylight.mdsal.dom.spi.store.DOMStoreThreePhaseCommitCohort; import org.opendaylight.mdsal.dom.spi.store.SnapshotBackedWriteTransaction; - -import org.opendaylight.mdsal.common.api.OptimisticLockFailedException; -import org.opendaylight.mdsal.common.api.TransactionCommitFailedException; -import com.google.common.base.Preconditions; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; -import org.opendaylight.yangtools.yang.data.api.schema.tree.ConflictingModificationAppliedException; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException; +import org.opendaylight.yangtools.yang.data.tree.api.ConflictingModificationAppliedException; +import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate; +import org.opendaylight.yangtools.yang.data.tree.api.DataTreeModification; +import org.opendaylight.yangtools.yang.data.tree.api.DataValidationFailedException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,15 +30,22 @@ class InMemoryDOMStoreThreePhaseCommitCohort implements DOMStoreThreePhaseCommit private static final Logger LOG = LoggerFactory.getLogger(InMemoryDOMStoreThreePhaseCommitCohort.class); private static final ListenableFuture SUCCESSFUL_FUTURE = Futures.immediateFuture(null); private static final ListenableFuture CAN_COMMIT_FUTURE = Futures.immediateFuture(Boolean.TRUE); + private final SnapshotBackedWriteTransaction transaction; private final DataTreeModification modification; private final InMemoryDOMDataStore store; - private DataTreeCandidate candidate; - - public InMemoryDOMStoreThreePhaseCommitCohort(final InMemoryDOMDataStore store, final SnapshotBackedWriteTransaction writeTransaction, final DataTreeModification modification) { - this.transaction = Preconditions.checkNotNull(writeTransaction); - this.modification = Preconditions.checkNotNull(modification); - this.store = Preconditions.checkNotNull(store); + private final Exception operationError; + + @VisibleForTesting + DataTreeCandidate candidate; + + InMemoryDOMStoreThreePhaseCommitCohort(final InMemoryDOMDataStore store, + final SnapshotBackedWriteTransaction transaction, final DataTreeModification modification, + final Exception operationError) { + this.transaction = requireNonNull(transaction); + this.modification = requireNonNull(modification); + this.store = requireNonNull(store); + this.operationError = operationError; } private static void warnDebugContext(final AbstractDOMStoreTransaction transaction) { @@ -48,8 +55,13 @@ class InMemoryDOMStoreThreePhaseCommitCohort implements DOMStoreThreePhaseCommit } } + @SuppressWarnings("checkstyle:IllegalCatch") @Override public final ListenableFuture canCommit() { + if (operationError != null) { + return Futures.immediateFailedFuture(operationError); + } + try { store.validate(modification); LOG.debug("Store Transaction: {} can be committed", getTransaction().getIdentifier()); @@ -66,15 +78,18 @@ class InMemoryDOMStoreThreePhaseCommitCohort implements DOMStoreThreePhaseCommit // For debugging purposes, allow dumping of the modification. Coupled with the above // precondition log, it should allow us to understand what went on. - LOG.trace("Store Tx: {} modifications: {} tree: {}", modification, store); + LOG.trace("Store Tx: {} modifications: {} tree: {}", getTransaction().getIdentifier(), + modification, store); - return Futures.immediateFailedFuture(new TransactionCommitFailedException("Data did not pass validation.", e)); + return Futures.immediateFailedFuture( + new TransactionCommitFailedException("Data did not pass validation.", e)); } catch (Exception e) { LOG.warn("Unexpected failure in validation phase", e); return Futures.immediateFailedFuture(e); } } + @SuppressWarnings("checkstyle:IllegalCatch") @Override public final ListenableFuture preCommit() { try {