GEODE-2088: Correctly throw TransactionDataRebalancedException when bucket is moved during rebalance.
Turns out the transaction layer code has already handled when to throw TransactionDataNotColocatedException in getTransactionException method call in TXStateProxyImpl by checking whether the key is colocated with the keys already touched in the transaction. Only need to make sure that piece of code will be executed by throwing correct TransactionException. Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/139398a1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/139398a1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/139398a1 Branch: refs/heads/feature/GEODE-1930 Commit: 139398a1f5af656c59eeacdb2dd9283a7145d992 Parents: c9e3b05 Author: eshu <e...@pivotal.io> Authored: Tue Nov 15 08:34:34 2016 -0800 Committer: eshu <e...@pivotal.io> Committed: Tue Nov 15 08:34:34 2016 -0800 ---------------------------------------------------------------------- .../apache/geode/internal/cache/PartitionedRegion.java | 4 ++-- .../org/apache/geode/disttx/PRDistTXDUnitTest.java | 4 ++++ .../geode/disttx/PRDistTXWithVersionsDUnitTest.java | 4 ++++ .../internal/cache/execute/PRTransactionDUnitTest.java | 13 +++++++++++-- 4 files changed, 21 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/139398a1/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java index 96c58d5..7c3f19b 100755 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java @@ -4001,8 +4001,8 @@ public class PartitionedRegion extends LocalRegion } else { // with transaction if (prce instanceof BucketNotFoundException) { - TransactionException ex = new TransactionDataNotColocatedException( - LocalizedStrings.PartitionedRegion_KEY_0_NOT_COLOCATED_WITH_TRANSACTION + TransactionException ex = new TransactionDataRebalancedException( + LocalizedStrings.PartitionedRegion_TRANSACTIONAL_DATA_MOVED_DUE_TO_REBALANCING .toLocalizedString(key)); ex.initCause(prce); throw ex; http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/139398a1/geode-core/src/test/java/org/apache/geode/disttx/PRDistTXDUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/disttx/PRDistTXDUnitTest.java b/geode-core/src/test/java/org/apache/geode/disttx/PRDistTXDUnitTest.java index ed8d3c6..1061cd5 100644 --- a/geode-core/src/test/java/org/apache/geode/disttx/PRDistTXDUnitTest.java +++ b/geode-core/src/test/java/org/apache/geode/disttx/PRDistTXDUnitTest.java @@ -45,6 +45,10 @@ public class PRDistTXDUnitTest extends PRTransactionDUnitTest { @Ignore("[DISTTX] TODO test overridden and intentionally left blank as it does not apply to disttx.") @Test + public void testTxWithGetOnMovedBucketUsingBucketReadHook() {} + + @Ignore("[DISTTX] TODO test overridden and intentionally left blank as it does not apply to disttx.") + @Test public void testTxWithContainsValueForKeyOnMovedBucket() {} @Ignore("[DISTTX] TODO test overridden and intentionally left blank as it does not apply to disttx.") http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/139398a1/geode-core/src/test/java/org/apache/geode/disttx/PRDistTXWithVersionsDUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/disttx/PRDistTXWithVersionsDUnitTest.java b/geode-core/src/test/java/org/apache/geode/disttx/PRDistTXWithVersionsDUnitTest.java index 4e6f846..34c28f4 100644 --- a/geode-core/src/test/java/org/apache/geode/disttx/PRDistTXWithVersionsDUnitTest.java +++ b/geode-core/src/test/java/org/apache/geode/disttx/PRDistTXWithVersionsDUnitTest.java @@ -45,6 +45,10 @@ public class PRDistTXWithVersionsDUnitTest extends PRTransactionWithVersionsDUni @Ignore("[DISTTX] TODO test overridden and intentionally left blank as it does not apply to disttx.") @Test + public void testTxWithGetOnMovedBucketUsingBucketReadHook() {} + + @Ignore("[DISTTX] TODO test overridden and intentionally left blank as it does not apply to disttx.") + @Test public void testTxWithContainsValueForKeyOnMovedBucket() {} @Ignore("[DISTTX] TODO test overridden and intentionally left blank as it does not apply to disttx.") http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/139398a1/geode-core/src/test/java/org/apache/geode/internal/cache/execute/PRTransactionDUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/execute/PRTransactionDUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/execute/PRTransactionDUnitTest.java index e2ba2b3..937059c 100644 --- a/geode-core/src/test/java/org/apache/geode/internal/cache/execute/PRTransactionDUnitTest.java +++ b/geode-core/src/test/java/org/apache/geode/internal/cache/execute/PRTransactionDUnitTest.java @@ -580,11 +580,11 @@ public class PRTransactionDUnitTest extends PRColocationDUnitTest { @SuppressWarnings("unchecked") private void moveBucketForGet(OrderId order1, boolean isCust1Local, DistributedMember source, DistributedMember destination, PartitionedRegion prOrder) { - if (isCust1Local) { + if (isCust1Local && useBucketReadHook) { // Use TXState setBucketReadHook(order1, source, destination, prOrder); } else { - // Use TXStateStub -- transaction data on remote node + // Use TXState and TXStateStub -- transaction data on remote node PartitionRegionHelper.moveBucketByKey(prOrder, source, destination, order1); } } @@ -648,6 +648,15 @@ public class PRTransactionDUnitTest extends PRColocationDUnitTest { } @Test + public void testTxWithGetOnMovedBucketUsingBucketReadHook() { + Op op = Op.GET; + useBucketReadHook = true; + basicPRTXWithOpOnMovedBucket(op, 0); + } + + private boolean useBucketReadHook = false; + + @Test public void testTxWithContainsValueForKeyOnMovedBucket() { Op op = Op.CONTAINSVALUEFORKEY; basicPRTXWithOpOnMovedBucket(op, 0);