Testing has revealed:
WARN | FrontendReadOnlyTransaction | Rejecting unsupported request ModifyTransactionRequest{target=member-2-datastore-config-fe-0-txn-2-0, sequence=1, replyTo=Actor[akka.tcp://opendaylight-cluster-data@10.29.15.184:2550/user/$a#
585956314], operations=[], protocol=ABORT}
This is a thinko on the part of which message does what:
TransactionAbortRequest is dedicated for 3PC doAbort phase, hence
it is never seen for read-only transactions.
The message corresponding to an abort is either
AbortLocalTransactionRequest or ModifyTransactionRequest with protocol
set to ABORT.
Change-Id: I3238ade7b9f7933e6538742354888d182f599412
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
import javax.annotation.concurrent.NotThreadSafe;
import org.opendaylight.controller.cluster.access.commands.ExistsTransactionRequest;
import org.opendaylight.controller.cluster.access.commands.ExistsTransactionSuccess;
import javax.annotation.concurrent.NotThreadSafe;
import org.opendaylight.controller.cluster.access.commands.ExistsTransactionRequest;
import org.opendaylight.controller.cluster.access.commands.ExistsTransactionSuccess;
+import org.opendaylight.controller.cluster.access.commands.ModifyTransactionRequest;
+import org.opendaylight.controller.cluster.access.commands.ModifyTransactionSuccess;
+import org.opendaylight.controller.cluster.access.commands.PersistenceProtocol;
import org.opendaylight.controller.cluster.access.commands.ReadTransactionRequest;
import org.opendaylight.controller.cluster.access.commands.ReadTransactionSuccess;
import org.opendaylight.controller.cluster.access.commands.ReadTransactionRequest;
import org.opendaylight.controller.cluster.access.commands.ReadTransactionSuccess;
-import org.opendaylight.controller.cluster.access.commands.TransactionAbortRequest;
-import org.opendaylight.controller.cluster.access.commands.TransactionAbortSuccess;
import org.opendaylight.controller.cluster.access.commands.TransactionRequest;
import org.opendaylight.controller.cluster.access.commands.TransactionSuccess;
import org.opendaylight.controller.cluster.access.concepts.RequestEnvelope;
import org.opendaylight.controller.cluster.access.commands.TransactionRequest;
import org.opendaylight.controller.cluster.access.commands.TransactionSuccess;
import org.opendaylight.controller.cluster.access.concepts.RequestEnvelope;
return handleExistsTransaction((ExistsTransactionRequest) request);
} else if (request instanceof ReadTransactionRequest) {
return handleReadTransaction((ReadTransactionRequest) request);
return handleExistsTransaction((ExistsTransactionRequest) request);
} else if (request instanceof ReadTransactionRequest) {
return handleReadTransaction((ReadTransactionRequest) request);
- } else if (request instanceof TransactionAbortRequest) {
- handleTransactionAbort((TransactionAbortRequest) request, envelope, now);
+ } else if (request instanceof ModifyTransactionRequest) {
+ handleModifyTransaction((ModifyTransactionRequest) request, envelope, now);
return null;
} else {
LOG.warn("Rejecting unsupported request {}", request);
return null;
} else {
LOG.warn("Rejecting unsupported request {}", request);
- private void handleTransactionAbort(final TransactionAbortRequest request, final RequestEnvelope envelope,
- final long now) throws RequestException {
- openTransaction.abort(() -> recordAndSendSuccess(envelope, now, new TransactionAbortSuccess(request.getTarget(),
- request.getSequence())));
+ private void handleModifyTransaction(final ModifyTransactionRequest request, final RequestEnvelope envelope,
+ final long now) {
+ // The only valid request here is with abort protocol
+ final java.util.Optional<PersistenceProtocol> optProto = request.getPersistenceProtocol();
+ Preconditions.checkArgument(optProto.isPresent(), "Commit protocol is missing in %s", request);
+ Preconditions.checkArgument(optProto.get() == PersistenceProtocol.ABORT, "Unsupported commit protocol in %s",
+ request);
+ openTransaction.abort(() -> recordAndSendSuccess(envelope, now,
+ new ModifyTransactionSuccess(request.getTarget(), request.getSequence())));
}
private ExistsTransactionSuccess handleExistsTransaction(final ExistsTransactionRequest request)
}
private ExistsTransactionSuccess handleExistsTransaction(final ExistsTransactionRequest request)