BUG-8372: fix abort message confusion 96/56596/3
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 5 May 2017 11:46:22 +0000 (13:46 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Sat, 6 May 2017 14:11:39 +0000 (16:11 +0200)
Immediate transaction aborts need to use the appropriate message,
not 3PC's TransactionAbortRequest.

Change-Id: I9e25e3f20ed62fc520853685af17accef35c1bb4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadWriteProxyTransaction.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/RemoteProxyTransaction.java
opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadWriteProxyTransactionTest.java
opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/actors/dds/RemoteProxyTransactionTest.java

index a41bef9c9e992518c672c418da82769ea6cfdfc9..9eba0bf4e94d17c369b9e8319826f2d6650b6a9a 100644 (file)
@@ -13,6 +13,7 @@ import java.util.function.Consumer;
 import java.util.function.Supplier;
 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.ModifyTransactionRequest;
 import org.opendaylight.controller.cluster.access.commands.PersistenceProtocol;
@@ -220,7 +221,7 @@ final class LocalReadWriteProxyTransaction extends LocalProxyTransaction {
 
             switch (maybeProtocol.get()) {
                 case ABORT:
-                    sendAbort(callback);
+                    sendRequest(new AbortLocalTransactionRequest(getIdentifier(), localActor()), callback);
                     break;
                 case READY:
                     // No-op, as we have already issued a seal()
index e91bd6c8b031f935a08749272286ac565602d95c..d14b7bda666790f7268875c4dead378d77e70b31 100644 (file)
@@ -71,7 +71,6 @@ final class RemoteProxyTransaction extends AbstractProxyTransaction {
 
     private volatile Exception operationFailure;
 
-
     RemoteProxyTransaction(final ProxyHistory parent, final TransactionIdentifier identifier,
             final boolean snapshotOnly, final boolean sendReadyOnSeal) {
         super(parent);
@@ -303,7 +302,11 @@ final class RemoteProxyTransaction extends AbstractProxyTransaction {
 
                 switch (maybeProto.get()) {
                     case ABORT:
-                        sendAbort(callback);
+                        ensureInitializedBuilder();
+                        builder.setAbort();
+                        final ModifyTransactionRequest newReq = builder.build();
+                        builderBusy = false;
+                        sendRequest(newReq, callback);
                         break;
                     case SIMPLE:
                         sendRequest(commitRequest(false), callback);
index 9cec79c9f8d5897ddcc22065976463b444576887..390302b539f116bf1a3a6a0eb8716a27323654f3 100644 (file)
@@ -177,7 +177,7 @@ public class LocalReadWriteProxyTransactionTest extends LocalProxyTransactionTes
         final ModifyTransactionRequest request = builder.build();
         final Consumer<Response<?, ?>> callback = createCallbackMock();
         transaction.applyModifyTransactionRequest(request, callback);
-        getTester().expectTransactionRequest(TransactionAbortRequest.class);
+        getTester().expectTransactionRequest(AbortLocalTransactionRequest.class);
     }
 
     @Test
index 9d6122f65332bb024172a21272744b131b157175..f646bed486a6ee3eb7b144df8f0d07d73c4a7bdf 100644 (file)
@@ -178,8 +178,10 @@ public class RemoteProxyTransactionTest extends AbstractProxyTransactionTest<Rem
         builder.setSequence(0L);
         builder.setAbort();
         final ModifyTransactionRequest request = builder.build();
-        final TransactionAbortRequest received = testForwardToRemote(request, TransactionAbortRequest.class);
+        final ModifyTransactionRequest received = testForwardToRemote(request, ModifyTransactionRequest.class);
         Assert.assertEquals(request.getTarget(), received.getTarget());
+        Assert.assertTrue(received.getPersistenceProtocol().isPresent());
+        Assert.assertEquals(PersistenceProtocol.ABORT, received.getPersistenceProtocol().get());
     }
 
     @Test