From 2becbbc76732b4845a660ea9e5352cd7087e0f73 Mon Sep 17 00:00:00 2001 From: Tom Pantelis Date: Tue, 15 Dec 2015 13:45:27 -0500 Subject: [PATCH] Make LocalThreePhaseCommitCohort::operationError final This is a follow-up to https://git.opendaylight.org/gerrit/#/c/31448/ to make LocalThreePhaseCommitCohort::operationError final and remove the setter. The callers were refactored to use the LocalThreePhaseCommitCohort ctor that passes the operationError. Change-Id: I68f69be08e7f74524e92f224172ebf1ca9469017 Signed-off-by: Tom Pantelis --- .../datastore/LocalThreePhaseCommitCohort.java | 12 ++---------- .../cluster/datastore/LocalTransactionChain.java | 10 +++++++++- .../cluster/datastore/LocalTransactionContext.java | 6 +----- .../datastore/LocalTransactionFactoryImpl.java | 10 +++++++++- .../datastore/LocalTransactionReadySupport.java | 5 ++++- .../datastore/LocalTransactionContextTest.java | 8 +++----- 6 files changed, 28 insertions(+), 23 deletions(-) diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalThreePhaseCommitCohort.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalThreePhaseCommitCohort.java index 442e2f3b4d..5323adb03a 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalThreePhaseCommitCohort.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalThreePhaseCommitCohort.java @@ -12,7 +12,6 @@ import akka.dispatch.Futures; import akka.dispatch.OnComplete; import com.google.common.base.Preconditions; import com.google.common.util.concurrent.ListenableFuture; -import javax.annotation.Nonnull; import org.opendaylight.controller.cluster.datastore.identifiers.TransactionIdentifier; import org.opendaylight.controller.cluster.datastore.messages.CommitTransactionReply; import org.opendaylight.controller.cluster.datastore.messages.ReadyLocalTransaction; @@ -38,7 +37,7 @@ class LocalThreePhaseCommitCohort implements DOMStoreThreePhaseCommitCohort { private final DataTreeModification modification; private final ActorContext actorContext; private final ActorSelection leader; - private Exception operationError; + private final Exception operationError; protected LocalThreePhaseCommitCohort(final ActorContext actorContext, final ActorSelection leader, final SnapshotBackedWriteTransaction transaction, final DataTreeModification modification) { @@ -46,6 +45,7 @@ class LocalThreePhaseCommitCohort implements DOMStoreThreePhaseCommitCohort { this.leader = Preconditions.checkNotNull(leader); this.transaction = Preconditions.checkNotNull(transaction); this.modification = Preconditions.checkNotNull(modification); + this.operationError = null; } protected LocalThreePhaseCommitCohort(final ActorContext actorContext, final ActorSelection leader, @@ -67,14 +67,6 @@ class LocalThreePhaseCommitCohort implements DOMStoreThreePhaseCommitCohort { return actorContext.executeOperationAsync(leader, message, actorContext.getTransactionCommitOperationTimeout()); } - void setOperationError(@Nonnull Exception operationError) { - if (this.operationError != null) { - LOG.info("Cohort {} already had operation error", this, this.operationError); - } - - this.operationError = Preconditions.checkNotNull(operationError); - } - Future initiateCoordinatedCommit() { final Future messageFuture = initiateCommit(false); final Future ret = TransactionReadyReplyMapper.transform(messageFuture, actorContext, diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalTransactionChain.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalTransactionChain.java index 56466f7840..b42c52d993 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalTransactionChain.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalTransactionChain.java @@ -9,6 +9,8 @@ package org.opendaylight.controller.cluster.datastore; import akka.actor.ActorSelection; import com.google.common.base.Preconditions; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.opendaylight.controller.cluster.datastore.identifiers.TransactionIdentifier; import org.opendaylight.controller.sal.core.spi.data.AbstractSnapshotBackedTransactionChain; import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadTransaction; @@ -78,7 +80,13 @@ final class LocalTransactionChain extends AbstractSnapshotBackedTransactionChain @SuppressWarnings("unchecked") @Override - public LocalThreePhaseCommitCohort onTransactionReady(DOMStoreWriteTransaction tx) { + public LocalThreePhaseCommitCohort onTransactionReady(@Nonnull DOMStoreWriteTransaction tx, + @Nullable Exception operationError) { + if(operationError != null) { + return new LocalChainThreePhaseCommitCohort((SnapshotBackedWriteTransaction)tx, + operationError); + } + try { return (LocalThreePhaseCommitCohort) tx.ready(); } catch (Exception e) { diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalTransactionContext.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalTransactionContext.java index 9398171b20..75cdd1b597 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalTransactionContext.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalTransactionContext.java @@ -112,11 +112,7 @@ abstract class LocalTransactionContext extends AbstractTransactionContext { private LocalThreePhaseCommitCohort ready() { logModificationCount(); - LocalThreePhaseCommitCohort cohort = readySupport.onTransactionReady(getWriteDelegate()); - if (operationError != null) { - cohort.setOperationError(operationError); - } - return cohort; + return readySupport.onTransactionReady(getWriteDelegate(), operationError); } @Override diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalTransactionFactoryImpl.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalTransactionFactoryImpl.java index 2f4474b5d7..700d96f4fd 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalTransactionFactoryImpl.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalTransactionFactoryImpl.java @@ -9,6 +9,8 @@ package org.opendaylight.controller.cluster.datastore; import akka.actor.ActorSelection; import com.google.common.base.Preconditions; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.opendaylight.controller.cluster.datastore.identifiers.TransactionIdentifier; import org.opendaylight.controller.cluster.datastore.utils.ActorContext; import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadTransaction; @@ -71,7 +73,13 @@ final class LocalTransactionFactoryImpl extends TransactionReadyPrototype)tx, operationError); + } + try { return (LocalThreePhaseCommitCohort) tx.ready(); } catch (Exception e) { diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalTransactionReadySupport.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalTransactionReadySupport.java index e03f3d2433..2e0dbb9fd1 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalTransactionReadySupport.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/LocalTransactionReadySupport.java @@ -7,6 +7,8 @@ */ package org.opendaylight.controller.cluster.datastore; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.opendaylight.controller.sal.core.spi.data.DOMStoreWriteTransaction; /** @@ -15,5 +17,6 @@ import org.opendaylight.controller.sal.core.spi.data.DOMStoreWriteTransaction; * @author Thomas Pantelis */ interface LocalTransactionReadySupport { - LocalThreePhaseCommitCohort onTransactionReady(DOMStoreWriteTransaction tx); + LocalThreePhaseCommitCohort onTransactionReady(@Nonnull DOMStoreWriteTransaction tx, + @Nullable Exception operationError); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/LocalTransactionContextTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/LocalTransactionContextTest.java index 08c4813523..838a169dbe 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/LocalTransactionContextTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/LocalTransactionContextTest.java @@ -106,12 +106,12 @@ public class LocalTransactionContextTest { public void testReady() { final LocalThreePhaseCommitCohort mockCohort = mock(LocalThreePhaseCommitCohort.class); doReturn(akka.dispatch.Futures.successful(null)).when(mockCohort).initiateCoordinatedCommit(); - doReturn(mockCohort).when(mockReadySupport).onTransactionReady(readWriteTransaction); + doReturn(mockCohort).when(mockReadySupport).onTransactionReady(readWriteTransaction, null); Future future = localTransactionContext.readyTransaction(); assertTrue(future.isCompleted()); - verify(mockReadySupport).onTransactionReady(readWriteTransaction); + verify(mockReadySupport).onTransactionReady(readWriteTransaction, null); } @Test @@ -161,10 +161,8 @@ public class LocalTransactionContextTest { private void doReadyWithExpectedError(RuntimeException expError) { LocalThreePhaseCommitCohort mockCohort = mock(LocalThreePhaseCommitCohort.class); doReturn(akka.dispatch.Futures.successful(null)).when(mockCohort).initiateCoordinatedCommit(); - doReturn(mockCohort).when(mockReadySupport).onTransactionReady(readWriteTransaction); + doReturn(mockCohort).when(mockReadySupport).onTransactionReady(readWriteTransaction, expError); localTransactionContext.readyTransaction(); - - verify(mockCohort).setOperationError(expError); } } -- 2.36.6