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%2Fdatastore%2FFrontendReadWriteTransaction.java;h=9f1df4c8ab31b45fdea9d47bf7c11ddc20c25331;hb=2fdecf33df3d9ca653fb8730116c54c67c6740ed;hp=64aef6838b1af2969fbe077a7127ff4a04e24c17;hpb=63d615831603b7a0a11b173f9d9316641e880844;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendReadWriteTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendReadWriteTransaction.java index 64aef6838b..9f1df4c8ab 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendReadWriteTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendReadWriteTransaction.java @@ -14,6 +14,7 @@ import com.google.common.util.concurrent.FutureCallback; import java.util.Collection; import javax.annotation.Nullable; import javax.annotation.concurrent.NotThreadSafe; +import org.opendaylight.controller.cluster.access.commands.AbortLocalTransactionRequest; import org.opendaylight.controller.cluster.access.commands.CommitLocalTransactionRequest; import org.opendaylight.controller.cluster.access.commands.ExistsTransactionRequest; import org.opendaylight.controller.cluster.access.commands.ExistsTransactionSuccess; @@ -101,7 +102,10 @@ final class FrontendReadWriteTransaction extends FrontendTransaction { handleTransactionDoCommit((TransactionDoCommitRequest) request, envelope, now); return null; } else if (request instanceof TransactionAbortRequest) { - handleTransactionAbort((TransactionAbortRequest) request, envelope, now); + handleTransactionAbort(request.getSequence(), envelope, now); + return null; + } else if (request instanceof AbortLocalTransactionRequest) { + handleLocalTransactionAbort(request.getSequence(), envelope, now); return null; } else { LOG.warn("Rejecting unsupported request {}", request); @@ -142,11 +146,17 @@ final class FrontendReadWriteTransaction extends FrontendTransaction { }); } - private void handleTransactionAbort(final TransactionAbortRequest request, - final RequestEnvelope envelope, final long now) throws RequestException { + private void handleLocalTransactionAbort(final long sequence, final RequestEnvelope envelope, final long now) { + Preconditions.checkState(readyCohort == null, "Transaction {} encountered local abort with commit underway", + getIdentifier()); + openTransaction.abort(() -> recordAndSendSuccess(envelope, now, new TransactionAbortSuccess(getIdentifier(), + sequence))); + } + + private void handleTransactionAbort(final long sequence, final RequestEnvelope envelope, final long now) { if (readyCohort == null) { - openTransaction.abort(() -> recordAndSendSuccess(envelope, now, - new TransactionAbortSuccess(getIdentifier(), request.getSequence()))); + openTransaction.abort(() -> recordAndSendSuccess(envelope, now, new TransactionAbortSuccess(getIdentifier(), + sequence))); return; } @@ -154,8 +164,7 @@ final class FrontendReadWriteTransaction extends FrontendTransaction { @Override public void onSuccess(final Void result) { readyCohort = null; - recordAndSendSuccess(envelope, now, new TransactionAbortSuccess(getIdentifier(), - request.getSequence())); + recordAndSendSuccess(envelope, now, new TransactionAbortSuccess(getIdentifier(), sequence)); LOG.debug("Transaction {} aborted", getIdentifier()); }