Repository: cassandra Updated Branches: refs/heads/cassandra-3.X d4a914d21 -> 7c759e2c3 refs/heads/trunk aedb2187a -> 3c7206078
Add sequence distribution type to cassandra stress: fix problem with setSeed() Patch by Ben Slater; reviewed by Stefania Alborghetti for CASSANDRA-12490 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/7c759e2c Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/7c759e2c Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/7c759e2c Branch: refs/heads/cassandra-3.X Commit: 7c759e2c326357a241e63c19cd4cd329f7920ea3 Parents: d4a914d Author: Ben Slater <ben.sla...@instaclustr.com> Authored: Fri Oct 21 13:55:37 2016 +0800 Committer: Stefania Alborghetti <stefania.alborghe...@datastax.com> Committed: Mon Oct 24 11:09:04 2016 +0800 ---------------------------------------------------------------------- tools/cqlstress-counter-example.yaml | 3 +- tools/cqlstress-example.yaml | 2 +- tools/cqlstress-insanity-example.yaml | 2 +- .../stress/generate/DistributionSequence.java | 5 +++- .../stress/settings/OptionDistribution.java | 2 +- .../generate/DistributionSequenceTest.java | 31 ++++++++++++++++++++ 6 files changed, 39 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/7c759e2c/tools/cqlstress-counter-example.yaml ---------------------------------------------------------------------- diff --git a/tools/cqlstress-counter-example.yaml b/tools/cqlstress-counter-example.yaml index 9084e84..2430e50 100644 --- a/tools/cqlstress-counter-example.yaml +++ b/tools/cqlstress-counter-example.yaml @@ -48,11 +48,10 @@ table_definition: | # GAUSSIAN(min..max,mean,stdev) A gaussian/normal distribution, with explicitly defined mean and stdev # UNIFORM(min..max) A uniform distribution over the range [min, max] # FIXED(val) A fixed distribution, always returning the same value -# SEQ(min..max) A fixed sequence, returning values from min to max sequentially, wrapping if necessary. +# SEQ(min..max) A fixed sequence, returning values in the range min to max sequentially (starting based on seed), wrapping if necessary. # Aliases: extr, gauss, normal, norm, weibull # # If preceded by ~, the distribution is inverted -# # Defaults for all columns are size: uniform(4..8), population: uniform(1..100B), cluster: fixed(1) # http://git-wip-us.apache.org/repos/asf/cassandra/blob/7c759e2c/tools/cqlstress-example.yaml ---------------------------------------------------------------------- diff --git a/tools/cqlstress-example.yaml b/tools/cqlstress-example.yaml index b2b915d..cde345a 100644 --- a/tools/cqlstress-example.yaml +++ b/tools/cqlstress-example.yaml @@ -59,7 +59,7 @@ table_definition: | # GAUSSIAN(min..max,mean,stdev) A gaussian/normal distribution, with explicitly defined mean and stdev # UNIFORM(min..max) A uniform distribution over the range [min, max] # FIXED(val) A fixed distribution, always returning the same value -# SEQ(min..max) A fixed sequence, returning values from min to max sequentially, wrapping if necessary. +# SEQ(min..max) A fixed sequence, returning values in the range min to max sequentially (starting based on seed), wrapping if necessary. # Aliases: extr, gauss, normal, norm, weibull # # If preceded by ~, the distribution is inverted http://git-wip-us.apache.org/repos/asf/cassandra/blob/7c759e2c/tools/cqlstress-insanity-example.yaml ---------------------------------------------------------------------- diff --git a/tools/cqlstress-insanity-example.yaml b/tools/cqlstress-insanity-example.yaml index 35bcd4a..5eb4fec 100644 --- a/tools/cqlstress-insanity-example.yaml +++ b/tools/cqlstress-insanity-example.yaml @@ -58,7 +58,7 @@ table_definition: | # GAUSSIAN(min..max,mean,stdev) A gaussian/normal distribution, with explicitly defined mean and stdev # UNIFORM(min..max) A uniform distribution over the range [min, max] # FIXED(val) A fixed distribution, always returning the same value -# SEQ(min..max) A fixed sequence, returning values from min to max sequentially, wrapping if necessary. +# SEQ(min..max) A fixed sequence, returning values in the range min to max sequentially (starting based on seed), wrapping if necessary. # Aliases: extr, gauss, normal, norm, weibull # # If preceded by ~, the distribution is inverted http://git-wip-us.apache.org/repos/asf/cassandra/blob/7c759e2c/tools/stress/src/org/apache/cassandra/stress/generate/DistributionSequence.java ---------------------------------------------------------------------- diff --git a/tools/stress/src/org/apache/cassandra/stress/generate/DistributionSequence.java b/tools/stress/src/org/apache/cassandra/stress/generate/DistributionSequence.java index 424c661..0546897 100644 --- a/tools/stress/src/org/apache/cassandra/stress/generate/DistributionSequence.java +++ b/tools/stress/src/org/apache/cassandra/stress/generate/DistributionSequence.java @@ -63,7 +63,10 @@ public class DistributionSequence extends Distribution } @Override - public void setSeed(long seed){} + public void setSeed(long seed) + { + next.set(seed); + } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/7c759e2c/tools/stress/src/org/apache/cassandra/stress/settings/OptionDistribution.java ---------------------------------------------------------------------- diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/OptionDistribution.java b/tools/stress/src/org/apache/cassandra/stress/settings/OptionDistribution.java index 8784158..cc93323 100644 --- a/tools/stress/src/org/apache/cassandra/stress/settings/OptionDistribution.java +++ b/tools/stress/src/org/apache/cassandra/stress/settings/OptionDistribution.java @@ -124,7 +124,7 @@ public class OptionDistribution extends Option GroupedOptions.formatMultiLine("GAUSSIAN(min..max,mean,stdev)", "A gaussian/normal distribution, with explicitly defined mean and stdev"), GroupedOptions.formatMultiLine("UNIFORM(min..max)", "A uniform distribution over the range [min, max]"), GroupedOptions.formatMultiLine("FIXED(val)", "A fixed distribution, always returning the same value"), - GroupedOptions.formatMultiLine("SEQ(min..max)", "A fixed sequence, returning values from min to max sequentially, wrapping if necessary."), + GroupedOptions.formatMultiLine("SEQ(min..max)", "A fixed sequence, returning values in the range min to max sequentially (starting based on seed), wrapping if necessary."), "Preceding the name with ~ will invert the distribution, e.g. ~exp(1..10) will yield 10 most, instead of least, often", "Aliases: extr, qextr, gauss, normal, norm, weibull" ); http://git-wip-us.apache.org/repos/asf/cassandra/blob/7c759e2c/tools/stress/test/unit/org/apache/cassandra/stress/generate/DistributionSequenceTest.java ---------------------------------------------------------------------- diff --git a/tools/stress/test/unit/org/apache/cassandra/stress/generate/DistributionSequenceTest.java b/tools/stress/test/unit/org/apache/cassandra/stress/generate/DistributionSequenceTest.java index 6f184d7..591833c 100644 --- a/tools/stress/test/unit/org/apache/cassandra/stress/generate/DistributionSequenceTest.java +++ b/tools/stress/test/unit/org/apache/cassandra/stress/generate/DistributionSequenceTest.java @@ -96,4 +96,35 @@ public class DistributionSequenceTest assertEquals(Long.MAX_VALUE, dist.inverseCumProb(1d)); } + + @Test + public void setSeed() throws Exception + { + Distribution dist = OptionDistribution.get("seq(1..10)").get(); + assertTrue(dist instanceof DistributionSequence); + + for (int seed=1; seed<500; seed+=seed) + { + dist.setSeed(seed); + assertEquals(1, dist.minValue()); + assertEquals(10, dist.maxValue()); + assertEquals(5, dist.average()); + + assertEquals(1, dist.inverseCumProb(0d)); + assertEquals(10, dist.inverseCumProb(1d)); + + long last = dist.next(); + for (int i = 0; i < 9; i++) + { + long next = dist.next(); + if (next>1) + { + assertEquals(next, last + 1); //increase by one each step + }else{ + assertEquals(last, 10); //wrap after the end + } + last = next; + } + } + } }