You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ad...@apache.org on 2022/05/27 10:42:29 UTC

[cassandra] branch cassandra-4.1 updated: Add vnodes option to CircleCI Java dtest multiplexer

This is an automated email from the ASF dual-hosted git repository.

adelapena pushed a commit to branch cassandra-4.1
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/cassandra-4.1 by this push:
     new 0f58db9465 Add vnodes option to CircleCI Java dtest multiplexer
0f58db9465 is described below

commit 0f58db94658ee4fa4af49e9499fb2dbe85e8b075
Author: Andrés de la Peña <a....@gmail.com>
AuthorDate: Fri May 20 14:52:07 2022 +0100

    Add vnodes option to CircleCI Java dtest multiplexer
    
    patch by Andrés de la Peña; reviewed by Berenguer Blasi and Ekaterina Dimitrova for CASSANDRA-17616
---
 .circleci/config-2_1.yml     | 17 ++++++++++++-
 .circleci/config.yml         | 60 +++++++++++++++++++++++++++++++++++++++++---
 .circleci/config.yml.HIGHRES | 60 +++++++++++++++++++++++++++++++++++++++++---
 .circleci/config.yml.LOWRES  | 60 +++++++++++++++++++++++++++++++++++++++++---
 .circleci/config.yml.MIDRES  | 60 +++++++++++++++++++++++++++++++++++++++++---
 .circleci/generate.sh        |  2 ++
 6 files changed, 246 insertions(+), 13 deletions(-)

diff --git a/.circleci/config-2_1.yml b/.circleci/config-2_1.yml
index bf6cc94991..bea5f94d18 100644
--- a/.circleci/config-2_1.yml
+++ b/.circleci/config-2_1.yml
@@ -60,6 +60,10 @@ default_env_vars: &default_env_vars
     # REPEATED_UTEST_METHODS: testCompoundPartitionKey,testStaticTable
     # Please note that some Ant targets will ignore the -Dtest.methods argument produced by this.
     REPEATED_UTEST_METHODS:
+    # Whether the test iteration should use vnodes for JVM dtests (-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16').
+    # This will only be applied as a default to JVM dtests that don't provide their own initial tokens or token count,
+    # in the same way that it's done for *_jvm_dtests_vnode jobs. Ant targets other than JVM dtests will ignore this.
+    REPEATED_UTEST_VNODES: false
     # The number of times that the repeated JUnit test should be run
     REPEATED_UTEST_COUNT: 100
     # Whether the test iteration should stop on the first failure
@@ -1085,6 +1089,7 @@ jobs:
           target: ${REPEATED_UTEST_TARGET}
           class: ${REPEATED_UTEST_CLASS}
           methods: ${REPEATED_UTEST_METHODS}
+          vnodes: ${REPEATED_UTEST_VNODES}
           count: ${REPEATED_UTEST_COUNT}
           stop_on_failure: ${REPEATED_UTEST_STOP_ON_FAILURE}
 
@@ -1098,6 +1103,7 @@ jobs:
           target: ${REPEATED_UTEST_TARGET}
           class: ${REPEATED_UTEST_CLASS}
           methods: ${REPEATED_UTEST_METHODS}
+          vnodes: ${REPEATED_UTEST_VNODES}
           count: ${REPEATED_UTEST_COUNT}
           stop_on_failure: ${REPEATED_UTEST_STOP_ON_FAILURE}
 
@@ -1140,6 +1146,7 @@ jobs:
           target: test-jvm-dtest-some
           class: ${REPEATED_JVM_UPGRADE_DTEST_CLASS}
           methods: ${REPEATED_JVM_UPGRADE_DTEST_METHODS}
+          vnodes: "false"
           count: ${REPEATED_JVM_UPGRADE_DTEST_COUNT}
           stop_on_failure: ${REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE}
 
@@ -1513,6 +1520,8 @@ commands:
         type: string
       methods:
         type: string
+      vnodes:
+        type: string
       count:
         type: string
       stop_on_failure:
@@ -1571,6 +1580,12 @@ commands:
                 else
                   methods="-Dtest.methods=<<parameters.methods>>"
                 fi
+            
+                # Prepare the JVM dtests vnodes argument, which is optional
+                vnodes_args=""
+                if <<parameters.vnodes>>; then
+                  vnodes_args="-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'"
+                fi
 
                 # Run the test target as many times as requested collecting the exit code,
                 # stopping the iteration only if stop_on_failure is set.
@@ -1581,7 +1596,7 @@ commands:
 
                   # run the test
                   status="passes"
-                  if !( set -o pipefail && ant $target $name $methods -Dno-build-test=true | tee stdout.txt ); then
+                  if !( set -o pipefail && ant $target $name $methods $vnodes_args -Dno-build-test=true | tee stdout.txt ); then
                     status="fails"
                     exit_code=1
                   fi
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 0586c5cd75..92d7b0db98 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -112,6 +112,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -213,6 +214,12 @@ jobs:
                 methods="-Dtest.methods=${REPEATED_JVM_UPGRADE_DTEST_METHODS}"
               fi
 
+              # Prepare the JVM dtests vnodes argument, which is optional
+              vnodes_args=""
+              if false; then
+                vnodes_args="-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'"
+              fi
+
               # Run the test target as many times as requested collecting the exit code,
               # stopping the iteration only if stop_on_failure is set.
               exit_code="$?"
@@ -222,7 +229,7 @@ jobs:
 
                 # run the test
                 status="passes"
-                if !( set -o pipefail && ant $target $name $methods -Dno-build-test=true | tee stdout.txt ); then
+                if !( set -o pipefail && ant $target $name $methods $vnodes_args -Dno-build-test=true | tee stdout.txt ); then
                   status="fails"
                   exit_code=1
                 fi
@@ -287,6 +294,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -396,6 +404,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -505,6 +514,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -628,6 +638,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -723,6 +734,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -818,6 +830,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -914,6 +927,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1010,6 +1024,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1120,6 +1135,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1216,6 +1232,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1360,6 +1377,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1483,6 +1501,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1581,6 +1600,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1658,6 +1678,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1734,6 +1755,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1797,6 +1819,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1906,6 +1929,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2015,6 +2039,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2114,6 +2139,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2169,6 +2195,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2271,6 +2298,12 @@ jobs:
                 methods="-Dtest.methods=${REPEATED_UTEST_METHODS}"
               fi
 
+              # Prepare the JVM dtests vnodes argument, which is optional
+              vnodes_args=""
+              if ${REPEATED_UTEST_VNODES}; then
+                vnodes_args="-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'"
+              fi
+
               # Run the test target as many times as requested collecting the exit code,
               # stopping the iteration only if stop_on_failure is set.
               exit_code="$?"
@@ -2280,7 +2313,7 @@ jobs:
 
                 # run the test
                 status="passes"
-                if !( set -o pipefail && ant $target $name $methods -Dno-build-test=true | tee stdout.txt ); then
+                if !( set -o pipefail && ant $target $name $methods $vnodes_args -Dno-build-test=true | tee stdout.txt ); then
                   status="fails"
                   exit_code=1
                 fi
@@ -2345,6 +2378,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2422,6 +2456,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2517,6 +2552,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2627,6 +2663,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2725,6 +2762,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2820,6 +2858,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2915,6 +2954,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2978,6 +3018,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3087,6 +3128,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3141,6 +3183,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3204,6 +3247,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3302,6 +3346,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3412,6 +3457,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3513,6 +3559,12 @@ jobs:
                 methods="-Dtest.methods=${REPEATED_UTEST_METHODS}"
               fi
 
+              # Prepare the JVM dtests vnodes argument, which is optional
+              vnodes_args=""
+              if ${REPEATED_UTEST_VNODES}; then
+                vnodes_args="-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'"
+              fi
+
               # Run the test target as many times as requested collecting the exit code,
               # stopping the iteration only if stop_on_failure is set.
               exit_code="$?"
@@ -3522,7 +3574,7 @@ jobs:
 
                 # run the test
                 status="passes"
-                if !( set -o pipefail && ant $target $name $methods -Dno-build-test=true | tee stdout.txt ); then
+                if !( set -o pipefail && ant $target $name $methods $vnodes_args -Dno-build-test=true | tee stdout.txt ); then
                   status="fails"
                   exit_code=1
                 fi
@@ -3587,6 +3639,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3682,6 +3735,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
diff --git a/.circleci/config.yml.HIGHRES b/.circleci/config.yml.HIGHRES
index 8a24b928ec..c6d8f2b365 100644
--- a/.circleci/config.yml.HIGHRES
+++ b/.circleci/config.yml.HIGHRES
@@ -112,6 +112,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -213,6 +214,12 @@ jobs:
                 methods="-Dtest.methods=${REPEATED_JVM_UPGRADE_DTEST_METHODS}"
               fi
 
+              # Prepare the JVM dtests vnodes argument, which is optional
+              vnodes_args=""
+              if false; then
+                vnodes_args="-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'"
+              fi
+
               # Run the test target as many times as requested collecting the exit code,
               # stopping the iteration only if stop_on_failure is set.
               exit_code="$?"
@@ -222,7 +229,7 @@ jobs:
 
                 # run the test
                 status="passes"
-                if !( set -o pipefail && ant $target $name $methods -Dno-build-test=true | tee stdout.txt ); then
+                if !( set -o pipefail && ant $target $name $methods $vnodes_args -Dno-build-test=true | tee stdout.txt ); then
                   status="fails"
                   exit_code=1
                 fi
@@ -287,6 +294,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -396,6 +404,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -505,6 +514,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -628,6 +638,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -723,6 +734,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -818,6 +830,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -914,6 +927,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1010,6 +1024,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1120,6 +1135,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1216,6 +1232,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1360,6 +1377,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1483,6 +1501,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1581,6 +1600,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1658,6 +1678,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1734,6 +1755,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1797,6 +1819,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1906,6 +1929,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2015,6 +2039,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2114,6 +2139,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2169,6 +2195,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2271,6 +2298,12 @@ jobs:
                 methods="-Dtest.methods=${REPEATED_UTEST_METHODS}"
               fi
 
+              # Prepare the JVM dtests vnodes argument, which is optional
+              vnodes_args=""
+              if ${REPEATED_UTEST_VNODES}; then
+                vnodes_args="-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'"
+              fi
+
               # Run the test target as many times as requested collecting the exit code,
               # stopping the iteration only if stop_on_failure is set.
               exit_code="$?"
@@ -2280,7 +2313,7 @@ jobs:
 
                 # run the test
                 status="passes"
-                if !( set -o pipefail && ant $target $name $methods -Dno-build-test=true | tee stdout.txt ); then
+                if !( set -o pipefail && ant $target $name $methods $vnodes_args -Dno-build-test=true | tee stdout.txt ); then
                   status="fails"
                   exit_code=1
                 fi
@@ -2345,6 +2378,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2422,6 +2456,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2517,6 +2552,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2627,6 +2663,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2725,6 +2762,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2820,6 +2858,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2915,6 +2954,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2978,6 +3018,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3087,6 +3128,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3141,6 +3183,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3204,6 +3247,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3302,6 +3346,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3412,6 +3457,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3513,6 +3559,12 @@ jobs:
                 methods="-Dtest.methods=${REPEATED_UTEST_METHODS}"
               fi
 
+              # Prepare the JVM dtests vnodes argument, which is optional
+              vnodes_args=""
+              if ${REPEATED_UTEST_VNODES}; then
+                vnodes_args="-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'"
+              fi
+
               # Run the test target as many times as requested collecting the exit code,
               # stopping the iteration only if stop_on_failure is set.
               exit_code="$?"
@@ -3522,7 +3574,7 @@ jobs:
 
                 # run the test
                 status="passes"
-                if !( set -o pipefail && ant $target $name $methods -Dno-build-test=true | tee stdout.txt ); then
+                if !( set -o pipefail && ant $target $name $methods $vnodes_args -Dno-build-test=true | tee stdout.txt ); then
                   status="fails"
                   exit_code=1
                 fi
@@ -3587,6 +3639,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3682,6 +3735,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
diff --git a/.circleci/config.yml.LOWRES b/.circleci/config.yml.LOWRES
index 0586c5cd75..92d7b0db98 100644
--- a/.circleci/config.yml.LOWRES
+++ b/.circleci/config.yml.LOWRES
@@ -112,6 +112,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -213,6 +214,12 @@ jobs:
                 methods="-Dtest.methods=${REPEATED_JVM_UPGRADE_DTEST_METHODS}"
               fi
 
+              # Prepare the JVM dtests vnodes argument, which is optional
+              vnodes_args=""
+              if false; then
+                vnodes_args="-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'"
+              fi
+
               # Run the test target as many times as requested collecting the exit code,
               # stopping the iteration only if stop_on_failure is set.
               exit_code="$?"
@@ -222,7 +229,7 @@ jobs:
 
                 # run the test
                 status="passes"
-                if !( set -o pipefail && ant $target $name $methods -Dno-build-test=true | tee stdout.txt ); then
+                if !( set -o pipefail && ant $target $name $methods $vnodes_args -Dno-build-test=true | tee stdout.txt ); then
                   status="fails"
                   exit_code=1
                 fi
@@ -287,6 +294,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -396,6 +404,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -505,6 +514,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -628,6 +638,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -723,6 +734,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -818,6 +830,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -914,6 +927,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1010,6 +1024,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1120,6 +1135,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1216,6 +1232,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1360,6 +1377,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1483,6 +1501,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1581,6 +1600,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1658,6 +1678,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1734,6 +1755,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1797,6 +1819,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1906,6 +1929,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2015,6 +2039,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2114,6 +2139,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2169,6 +2195,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2271,6 +2298,12 @@ jobs:
                 methods="-Dtest.methods=${REPEATED_UTEST_METHODS}"
               fi
 
+              # Prepare the JVM dtests vnodes argument, which is optional
+              vnodes_args=""
+              if ${REPEATED_UTEST_VNODES}; then
+                vnodes_args="-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'"
+              fi
+
               # Run the test target as many times as requested collecting the exit code,
               # stopping the iteration only if stop_on_failure is set.
               exit_code="$?"
@@ -2280,7 +2313,7 @@ jobs:
 
                 # run the test
                 status="passes"
-                if !( set -o pipefail && ant $target $name $methods -Dno-build-test=true | tee stdout.txt ); then
+                if !( set -o pipefail && ant $target $name $methods $vnodes_args -Dno-build-test=true | tee stdout.txt ); then
                   status="fails"
                   exit_code=1
                 fi
@@ -2345,6 +2378,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2422,6 +2456,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2517,6 +2552,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2627,6 +2663,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2725,6 +2762,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2820,6 +2858,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2915,6 +2954,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2978,6 +3018,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3087,6 +3128,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3141,6 +3183,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3204,6 +3247,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3302,6 +3346,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3412,6 +3457,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3513,6 +3559,12 @@ jobs:
                 methods="-Dtest.methods=${REPEATED_UTEST_METHODS}"
               fi
 
+              # Prepare the JVM dtests vnodes argument, which is optional
+              vnodes_args=""
+              if ${REPEATED_UTEST_VNODES}; then
+                vnodes_args="-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'"
+              fi
+
               # Run the test target as many times as requested collecting the exit code,
               # stopping the iteration only if stop_on_failure is set.
               exit_code="$?"
@@ -3522,7 +3574,7 @@ jobs:
 
                 # run the test
                 status="passes"
-                if !( set -o pipefail && ant $target $name $methods -Dno-build-test=true | tee stdout.txt ); then
+                if !( set -o pipefail && ant $target $name $methods $vnodes_args -Dno-build-test=true | tee stdout.txt ); then
                   status="fails"
                   exit_code=1
                 fi
@@ -3587,6 +3639,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3682,6 +3735,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
diff --git a/.circleci/config.yml.MIDRES b/.circleci/config.yml.MIDRES
index df5b5c8081..3478c8e178 100644
--- a/.circleci/config.yml.MIDRES
+++ b/.circleci/config.yml.MIDRES
@@ -112,6 +112,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -213,6 +214,12 @@ jobs:
                 methods="-Dtest.methods=${REPEATED_JVM_UPGRADE_DTEST_METHODS}"
               fi
 
+              # Prepare the JVM dtests vnodes argument, which is optional
+              vnodes_args=""
+              if false; then
+                vnodes_args="-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'"
+              fi
+
               # Run the test target as many times as requested collecting the exit code,
               # stopping the iteration only if stop_on_failure is set.
               exit_code="$?"
@@ -222,7 +229,7 @@ jobs:
 
                 # run the test
                 status="passes"
-                if !( set -o pipefail && ant $target $name $methods -Dno-build-test=true | tee stdout.txt ); then
+                if !( set -o pipefail && ant $target $name $methods $vnodes_args -Dno-build-test=true | tee stdout.txt ); then
                   status="fails"
                   exit_code=1
                 fi
@@ -287,6 +294,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -396,6 +404,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -505,6 +514,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -628,6 +638,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -723,6 +734,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -818,6 +830,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -914,6 +927,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1010,6 +1024,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1120,6 +1135,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1216,6 +1232,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1360,6 +1377,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1483,6 +1501,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1581,6 +1600,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1658,6 +1678,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1734,6 +1755,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1797,6 +1819,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -1906,6 +1929,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2015,6 +2039,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2114,6 +2139,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2169,6 +2195,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2271,6 +2298,12 @@ jobs:
                 methods="-Dtest.methods=${REPEATED_UTEST_METHODS}"
               fi
 
+              # Prepare the JVM dtests vnodes argument, which is optional
+              vnodes_args=""
+              if ${REPEATED_UTEST_VNODES}; then
+                vnodes_args="-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'"
+              fi
+
               # Run the test target as many times as requested collecting the exit code,
               # stopping the iteration only if stop_on_failure is set.
               exit_code="$?"
@@ -2280,7 +2313,7 @@ jobs:
 
                 # run the test
                 status="passes"
-                if !( set -o pipefail && ant $target $name $methods -Dno-build-test=true | tee stdout.txt ); then
+                if !( set -o pipefail && ant $target $name $methods $vnodes_args -Dno-build-test=true | tee stdout.txt ); then
                   status="fails"
                   exit_code=1
                 fi
@@ -2345,6 +2378,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2422,6 +2456,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2517,6 +2552,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2627,6 +2663,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2725,6 +2762,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2820,6 +2858,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2915,6 +2954,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -2978,6 +3018,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3087,6 +3128,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3141,6 +3183,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3204,6 +3247,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3302,6 +3346,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3412,6 +3457,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3513,6 +3559,12 @@ jobs:
                 methods="-Dtest.methods=${REPEATED_UTEST_METHODS}"
               fi
 
+              # Prepare the JVM dtests vnodes argument, which is optional
+              vnodes_args=""
+              if ${REPEATED_UTEST_VNODES}; then
+                vnodes_args="-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'"
+              fi
+
               # Run the test target as many times as requested collecting the exit code,
               # stopping the iteration only if stop_on_failure is set.
               exit_code="$?"
@@ -3522,7 +3574,7 @@ jobs:
 
                 # run the test
                 status="passes"
-                if !( set -o pipefail && ant $target $name $methods -Dno-build-test=true | tee stdout.txt ); then
+                if !( set -o pipefail && ant $target $name $methods $vnodes_args -Dno-build-test=true | tee stdout.txt ); then
                   status="fails"
                   exit_code=1
                 fi
@@ -3587,6 +3639,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
@@ -3682,6 +3735,7 @@ jobs:
     - REPEATED_UTEST_TARGET: testsome
     - REPEATED_UTEST_CLASS: null
     - REPEATED_UTEST_METHODS: null
+    - REPEATED_UTEST_VNODES: false
     - REPEATED_UTEST_COUNT: 100
     - REPEATED_UTEST_STOP_ON_FAILURE: false
     - REPEATED_DTEST_NAME: null
diff --git a/.circleci/generate.sh b/.circleci/generate.sh
index 12e56ec95a..f632d989c6 100755
--- a/.circleci/generate.sh
+++ b/.circleci/generate.sh
@@ -41,6 +41,7 @@ print_help()
   echo "                   -e REPEATED_UTEST_TARGET=testsome"
   echo "                   -e REPEATED_UTEST_CLASS=org.apache.cassandra.cql3.ViewTest"
   echo "                   -e REPEATED_UTEST_METHODS=testCompoundPartitionKey,testStaticTable"
+  echo "                   -e REPEATED_UTEST_VNODES=false"
   echo "                   -e REPEATED_UTEST_COUNT=100"
   echo "                   -e REPEATED_UTEST_STOP_ON_FAILURE=false"
   echo "                   -e REPEATED_DTEST_NAME=cqlsh_tests/test_cqlsh.py::TestCqlshSmoke"
@@ -98,6 +99,7 @@ if $has_env_vars && $check_env_vars; then
        [ "$key" != "REPEATED_UTEST_TARGET" ] &&
        [ "$key" != "REPEATED_UTEST_CLASS" ] &&
        [ "$key" != "REPEATED_UTEST_METHODS" ] &&
+       [ "$key" != "REPEATED_UTEST_VNODES" ] &&
        [ "$key" != "REPEATED_UTEST_COUNT" ] &&
        [ "$key" != "REPEATED_UTEST_STOP_ON_FAILURE" ] &&
        [ "$key" != "REPEATED_DTEST_NAME" ] &&


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org