From 920660971adda2a58672596e8ce93ac3c42b40bb Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sat, 13 Nov 2021 19:38:08 +0100 Subject: [PATCH] Handle ModifyTransactionRequest in forward path When we have remote -> local handoff, we will use a ModifyTransactionRequest, which we need to apply before moving on. JIRA: CONTROLLER-2022 Change-Id: I04bdfda162d474966b153223c7480fd5b3af8099 Signed-off-by: Robert Varga --- .../dds/LocalReadWriteProxyTransaction.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadWriteProxyTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadWriteProxyTransaction.java index 1f1e394932..c58f834dd6 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadWriteProxyTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalReadWriteProxyTransaction.java @@ -86,13 +86,13 @@ final class LocalReadWriteProxyTransaction extends LocalProxyTransaction { LocalReadWriteProxyTransaction(final ProxyHistory parent, final TransactionIdentifier identifier, final DataTreeSnapshot snapshot) { super(parent, identifier, false); - this.modification = (CursorAwareDataTreeModification) snapshot.newModification(); + modification = (CursorAwareDataTreeModification) snapshot.newModification(); } LocalReadWriteProxyTransaction(final ProxyHistory parent, final TransactionIdentifier identifier) { super(parent, identifier, true); // This is DONE transaction, this should never be touched - this.modification = null; + modification = null; } @Override @@ -325,12 +325,19 @@ final class LocalReadWriteProxyTransaction extends LocalProxyTransaction { void forwardToLocal(final LocalProxyTransaction successor, final TransactionRequest request, final Consumer> callback) { if (request instanceof CommitLocalTransactionRequest) { - Verify.verify(successor instanceof LocalReadWriteProxyTransaction); - ((LocalReadWriteProxyTransaction) successor).sendRebased((CommitLocalTransactionRequest)request, callback); - LOG.debug("Forwarded request {} to successor {}", request, successor); + verifyLocalReadWrite(successor).sendRebased((CommitLocalTransactionRequest)request, callback); + } else if (request instanceof ModifyTransactionRequest) { + verifyLocalReadWrite(successor).handleForwardedRemoteRequest(request, callback); } else { super.forwardToLocal(successor, request, callback); + return; } + LOG.debug("Forwarded request {} to successor {}", request, successor); + } + + private static LocalReadWriteProxyTransaction verifyLocalReadWrite(final LocalProxyTransaction successor) { + Verify.verify(successor instanceof LocalReadWriteProxyTransaction, "Unexpected successor %s", successor); + return (LocalReadWriteProxyTransaction) successor; } @Override -- 2.36.6