Add the range limit for the split ratio in PartitionerTestCase. Patch by Dikang Gu; Reviewed by Branimir Lambov for CASSANDRA-12858
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/4fd05e5b Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/4fd05e5b Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/4fd05e5b Branch: refs/heads/trunk Commit: 4fd05e5b5caa8403a1e3ba1318d5eed817c24ba9 Parents: 2f3e07a Author: Dikang Gu <dikan...@gmail.com> Authored: Tue Nov 8 14:06:12 2016 -0800 Committer: Dikang Gu <dikan...@gmail.com> Committed: Mon Nov 14 13:04:05 2016 -0800 ---------------------------------------------------------------------- CHANGES.txt | 9 +++------ .../dht/ByteOrderedPartitionerTest.java | 5 +++++ .../cassandra/dht/Murmur3PartitionerTest.java | 5 +++++ .../dht/OrderPreservingPartitionerTest.java | 5 +++++ .../cassandra/dht/PartitionerTestCase.java | 19 +++++++++++++++---- .../cassandra/dht/RandomPartitionerTest.java | 5 +++++ 6 files changed, 38 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/4fd05e5b/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index a8ef42c..78d6325 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,10 +1,6 @@ -3.11 - * Move cqlsh syntax rules into separate module and allow easier customization (CASSANDRA-12897) -Merged from 3.0: - * Prevent reloading of logback.xml from UDF sandbox (CASSANDRA-12535) - - 3.10 + * Fix Murmur3PartitionerTest (CASSANDRA-12858) + * Move cqlsh syntax rules into separate module and allow easier customization (CASSANDRA-12897) * Fix CommitLogSegmentManagerTest (CASSANDRA-12283) * Fix cassandra-stress truncate option (CASSANDRA-12695) * Fix crossNode value when receiving messages (CASSANDRA-12791) @@ -107,6 +103,7 @@ Merged from 3.0: * Restore resumable hints delivery (CASSANDRA-11960) * Properly report LWT contention (CASSANDRA-12626) Merged from 3.0: + * Prevent reloading of logback.xml from UDF sandbox (CASSANDRA-12535) * Pass root cause to CorruptBlockException when uncompression failed (CASSANDRA-12889) * Batch with multiple conditional updates for the same partition causes AssertionError (CASSANDRA-12867) * Make AbstractReplicationStrategy extendable from outside its package (CASSANDRA-12788) http://git-wip-us.apache.org/repos/asf/cassandra/blob/4fd05e5b/test/unit/org/apache/cassandra/dht/ByteOrderedPartitionerTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/dht/ByteOrderedPartitionerTest.java b/test/unit/org/apache/cassandra/dht/ByteOrderedPartitionerTest.java index c4896a3..f40c284 100644 --- a/test/unit/org/apache/cassandra/dht/ByteOrderedPartitionerTest.java +++ b/test/unit/org/apache/cassandra/dht/ByteOrderedPartitionerTest.java @@ -23,4 +23,9 @@ public class ByteOrderedPartitionerTest extends PartitionerTestCase { partitioner = ByteOrderedPartitioner.instance; } + + protected boolean shouldStopRecursion(Token left, Token right) + { + return false; + } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/4fd05e5b/test/unit/org/apache/cassandra/dht/Murmur3PartitionerTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/dht/Murmur3PartitionerTest.java b/test/unit/org/apache/cassandra/dht/Murmur3PartitionerTest.java index ad81f7f..83f3dda 100644 --- a/test/unit/org/apache/cassandra/dht/Murmur3PartitionerTest.java +++ b/test/unit/org/apache/cassandra/dht/Murmur3PartitionerTest.java @@ -37,6 +37,11 @@ public class Murmur3PartitionerTest extends PartitionerTestCase assertMidpoint(tok("a"), mintoken, 16); } + protected boolean shouldStopRecursion(Token left, Token right) + { + return left.size(right) < Math.scalb(1, -48); + } + @Test public void testSplit() { http://git-wip-us.apache.org/repos/asf/cassandra/blob/4fd05e5b/test/unit/org/apache/cassandra/dht/OrderPreservingPartitionerTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/dht/OrderPreservingPartitionerTest.java b/test/unit/org/apache/cassandra/dht/OrderPreservingPartitionerTest.java index 57f33e7..6ab5b45 100644 --- a/test/unit/org/apache/cassandra/dht/OrderPreservingPartitionerTest.java +++ b/test/unit/org/apache/cassandra/dht/OrderPreservingPartitionerTest.java @@ -39,6 +39,11 @@ public class OrderPreservingPartitionerTest extends PartitionerTestCase partitioner = OrderPreservingPartitioner.instance; } + protected boolean shouldStopRecursion(Token left, Token right) + { + return false; + } + @Test public void testCompare() { http://git-wip-us.apache.org/repos/asf/cassandra/blob/4fd05e5b/test/unit/org/apache/cassandra/dht/PartitionerTestCase.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/dht/PartitionerTestCase.java b/test/unit/org/apache/cassandra/dht/PartitionerTestCase.java index c411695..33e9d60 100644 --- a/test/unit/org/apache/cassandra/dht/PartitionerTestCase.java +++ b/test/unit/org/apache/cassandra/dht/PartitionerTestCase.java @@ -36,6 +36,9 @@ import static org.junit.Assert.fail; public abstract class PartitionerTestCase { + private static final double SPLIT_RATIO_MIN = 0.10; + private static final double SPLIT_RATIO_MAX = 1 - SPLIT_RATIO_MIN; + protected IPartitioner partitioner; public abstract void initPartitioner(); @@ -130,17 +133,25 @@ public abstract class PartitionerTestCase } } + protected abstract boolean shouldStopRecursion(Token left, Token right); + private void assertSplit(Token left, Token right, Random rand, int depth) { - double ratio = rand.nextDouble(); - Token newToken = partitioner.split(left, right, ratio); + if (shouldStopRecursion(left, right)) + { + System.out.println("Stop assertSplit at depth: " + depth); + return; + } - assert new Range<Token>(left, right).contains(newToken) - : "For " + left + "," + right + ": range did not contain new token:" + newToken; + double ratio = SPLIT_RATIO_MIN + (SPLIT_RATIO_MAX - SPLIT_RATIO_MIN) * rand.nextDouble(); + Token newToken = partitioner.split(left, right, ratio); assertEquals("For " + left + "," + right + ", new token: " + newToken, ratio, left.size(newToken) / left.size(right), 0.1); + assert new Range<Token>(left, right).contains(newToken) + : "For " + left + "," + right + ": range did not contain new token:" + newToken; + if (depth < 1) return; http://git-wip-us.apache.org/repos/asf/cassandra/blob/4fd05e5b/test/unit/org/apache/cassandra/dht/RandomPartitionerTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/dht/RandomPartitionerTest.java b/test/unit/org/apache/cassandra/dht/RandomPartitionerTest.java index d7fe602..273fe21 100644 --- a/test/unit/org/apache/cassandra/dht/RandomPartitionerTest.java +++ b/test/unit/org/apache/cassandra/dht/RandomPartitionerTest.java @@ -29,6 +29,11 @@ public class RandomPartitionerTest extends PartitionerTestCase partitioner = RandomPartitioner.instance; } + protected boolean shouldStopRecursion(Token left, Token right) + { + return left.size(right) < Math.scalb(1, -112); + } + @Test public void testSplit() {