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/10/18 15:59:21 UTC

[cassandra] branch cassandra-4.1 updated (1e18eda3d9 -> 36e73bdf55)

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

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


    from 1e18eda3d9 Merge branch 'cassandra-4.0' into cassandra-4.1
     new 9aa28a81ec CircleCI: Automatically detect and repeat new or modified JUnit tests
     new f13cdddcad Merge branch 'cassandra-3.0' into cassandra-3.11
     new cc622a20e1 Merge branch 'cassandra-3.11' into cassandra-4.0
     new 36e73bdf55 Merge branch 'cassandra-4.0' into cassandra-4.1

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .circleci/config-2_1.yml                | 1005 ++++--
 .circleci/config-2_1.yml.high_res.patch |   10 +-
 .circleci/config-2_1.yml.mid_res.patch  |   64 +-
 .circleci/config.yml                    | 5003 ++++++++++++++++++-----------
 .circleci/config.yml.HIGHRES            | 5191 +++++++++++++++++++-----------
 .circleci/config.yml.LOWRES             | 5193 ++++++++++++++++++++-----------
 .circleci/config.yml.MIDRES             | 5151 +++++++++++++++++++-----------
 .circleci/generate.sh                   |  170 +-
 .circleci/readme.md                     |   99 +-
 9 files changed, 14480 insertions(+), 7406 deletions(-)


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


[cassandra] 01/01: Merge branch 'cassandra-4.0' into cassandra-4.1

Posted by ad...@apache.org.
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

commit 36e73bdf55e4a5e088e91eecea8896c1b47915cf
Merge: 1e18eda3d9 cc622a20e1
Author: Andrés de la Peña <a....@gmail.com>
AuthorDate: Tue Oct 18 16:53:48 2022 +0100

    Merge branch 'cassandra-4.0' into cassandra-4.1

 .circleci/config-2_1.yml                | 1005 ++++--
 .circleci/config-2_1.yml.high_res.patch |   10 +-
 .circleci/config-2_1.yml.mid_res.patch  |   64 +-
 .circleci/config.yml                    | 5003 ++++++++++++++++++-----------
 .circleci/config.yml.HIGHRES            | 5191 +++++++++++++++++++-----------
 .circleci/config.yml.LOWRES             | 5193 ++++++++++++++++++++-----------
 .circleci/config.yml.MIDRES             | 5151 +++++++++++++++++++-----------
 .circleci/generate.sh                   |  170 +-
 .circleci/readme.md                     |   99 +-
 9 files changed, 14480 insertions(+), 7406 deletions(-)

diff --cc .circleci/config-2_1.yml
index 5aa00b16f6,591cfd71f6..a3e865089e
--- a/.circleci/config-2_1.yml
+++ b/.circleci/config-2_1.yml
@@@ -44,63 -44,94 +44,106 @@@ default_env_vars: &default_env_var
      CCM_MAX_HEAP_SIZE: 1024M
      CCM_HEAP_NEWSIZE: 256M
  
+     # Whether the repeated test iterations should stop on the first failure by default.
+     REPEATED_TESTS_STOP_ON_FAILURE: false
+ 
+     # Comma-separated list of tests that should be included in the repeated run for regular unit tests,
+     # in addition to automatically detected new and modified tests. For example:
+     # REPEATED_UTESTS: org.apache.cassandra.cql3.ViewTest
+     # REPEATED_UTESTS: org.apache.cassandra.cql3.ViewTest#testCountersTable
+     # REPEATED_UTESTS: org.apache.cassandra.cql3.ViewTest,org.apache.cassandra.cql3.functions.TimeFctsTest
+     REPEATED_UTESTS:
+     # The number of times that new, modified or manually specified unit tests should be run.
+     REPEATED_UTESTS_COUNT: 500
+ 
+     # Comma-separated list of tests that should be included in the repeated run for fqltool unit tests,
+     # in addition to automatically detected new and modified tests. For example:
+     # REPEATED_UTESTS_FQLTOOL: org.apache.cassandra.fqltool.FQLCompareTest
+     # REPEATED_UTESTS_FQLTOOL: org.apache.cassandra.fqltool.FQLCompareTest#endToEnd
+     # REPEATED_UTESTS_FQLTOOL: org.apache.cassandra.fqltool.FQLCompareTest,org.apache.cassandra.fqltool.FQLReplayTest
+     REPEATED_UTESTS_FQLTOOL:
+     # The number of times that new, modified or manually specified fqltool unit tests should be run.
+     REPEATED_UTESTS_FQLTOOL_COUNT: 500
+ 
+     # Comma-separated list of tests that should be included in the repeated run for long unit tests,
+     # in addition to automatically detected new and modified tests. For example:
+     # REPEATED_UTESTS_LONG: org.apache.cassandra.db.commitlog.CommitLogStressTest
+     # REPEATED_UTESTS_LONG: org.apache.cassandra.db.commitlog.CommitLogStressTest#testRandomSize
+     REPEATED_UTESTS_LONG:
+     # The number of times that new, modified or manually specified long unit tests should be run.
+     REPEATED_UTESTS_LONG_COUNT: 100
+ 
+     # Comma-separated list of tests that should be included in the repeated run for stress unit tests,
+     # in addition to automatically detected new and modified tests. For example:
+     # REPEATED_UTESTS_STRESS: org.apache.cassandra.stress.generate.DistributionGaussianTest
+     # REPEATED_UTESTS_STRESS: org.apache.cassandra.stress.generate.DistributionGaussianTest#simpleGaussian
+     REPEATED_UTESTS_STRESS:
+     # The number of times that new, modified or manually specified stress unit tests should be run.
+     REPEATED_UTESTS_STRESS_COUNT: 500
+ 
++    # Comma-separated list of tests that should be included in the repeated run for simulator dtests,
++    # in addition to automatically detected new and modified tests. For example:
++    # REPEATED_SIMULATOR_DTESTS: org.apache.cassandra.simulator.test.TrivialSimulationTest
++    # REPEATED_SIMULATOR_DTESTS: org.apache.cassandra.simulator.test.TrivialSimulationTest#trivialTest
++    REPEATED_SIMULATOR_DTESTS:
++    # The number of times that new, modified or manually specified simulator dtests should be run.
++    REPEATED_SIMULATOR_DTESTS_COUNT: 500
++
+     # Comma-separated list of tests that should be included in the repeated run for JVM dtests,
+     # in addition to automatically detected new and modified tests. For example:
+     # REPEATED_JVM_DTESTS: org.apache.cassandra.distributed.test.PagingTest
+     # REPEATED_JVM_DTESTS: org.apache.cassandra.distributed.test.PagingTest#testPaging
+     REPEATED_JVM_DTESTS:
+     # The number of times that new, modified or manually specified JVM dtests should be run.
+     REPEATED_JVM_DTESTS_COUNT: 500
+ 
+     # Comma-separated list of tests that should be included in the repeated run for JVM upgrade dtests,
+     # in addition to automatically detected new and modified tests. For example:
+     # REPEATED_JVM_UPGRADE_DTESTS: org.apache.cassandra.distributed.upgrade.GroupByTest
+     # REPEATED_JVM_UPGRADE_DTESTS: org.apache.cassandra.distributed.upgrade.GroupByTest#testReads
+     REPEATED_JVM_UPGRADE_DTESTS:
+     # The number of times that new, modified or manually specified JVM upgrade dtests should be run.
+     REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+ 
+     # Comma-separated list of Python dtests that should be repeatedly run, for example:
+     # REPEATED_DTESTS: cqlsh_tests/test_cqlsh.py
+     # REPEATED_DTESTS: cqlsh_tests/test_cqlsh.py::TestCqlshSmoke
+     # REPEATED_DTESTS: cqlsh_tests/test_cqlsh.py::TestCqlshSmoke::test_create_index
+     # REPEATED_DTESTS: cqlsh_tests/test_cqlsh.py,consistency_test.py
+     REPEATED_DTESTS:
+     # The number of times that the manually specified Python dtests should be run.
+     REPEATED_DTESTS_COUNT: 500
+ 
+     # Comma-separated list of Python dtests that should be repeatedly run, for example:
+     # REPEATED_UPGRADE_DTESTS: upgrade_tests/cql_tests.py
+     # REPEATED_UPGRADE_DTESTS: upgrade_tests/cql_tests.py::TestCQLNodes2RF1_Upgrade_current_4_0_x_To_indev_4_0_x
+     # REPEATED_UPGRADE_DTESTS: upgrade_tests/cql_tests.py,upgrade_tests/paging_test.py
+     REPEATED_UPGRADE_DTESTS:
+     # The number of times that the manually specified Python upgrade dtests should be run.
+     REPEATED_UPGRADE_DTESTS_COUNT: 25
+ 
      # The Ant test target to run, for example:
-     # REPEATED_UTEST_TARGET: testsome
-     # REPEATED_UTEST_TARGET: test-jvm-dtest-some
-     # REPEATED_UTEST_TARGET: test-cdc
-     # REPEATED_UTEST_TARGET: test-compression
-     # REPEATED_UTEST_TARGET: test-system-keyspace-directory
-     REPEATED_UTEST_TARGET: testsome
+     # REPEATED_ANT_TEST_TARGET: testsome
+     # REPEATED_ANT_TEST_TARGET: test-jvm-dtest-some
+     # REPEATED_ANT_TEST_TARGET: test-cdc
+     # REPEATED_ANT_TEST_TARGET: test-compression
+     # REPEATED_ANT_TEST_TARGET: test-system-keyspace-directory
+     REPEATED_ANT_TEST_TARGET: testsome
      # The name of JUnit class to be run multiple times, for example:
-     # REPEATED_UTEST_CLASS: org.apache.cassandra.cql3.ViewTest
-     # REPEATED_UTEST_CLASS: org.apache.cassandra.distributed.test.PagingTest
-     REPEATED_UTEST_CLASS:
-     # The optional specific methods within REPEATED_UTEST_CLASS to be run, for example:
-     # REPEATED_UTEST_METHODS: testCompoundPartitionKey
-     # REPEATED_UTEST_METHODS: testCompoundPartitionKey,testStaticTable
+     # REPEATED_ANT_TEST_CLASS: org.apache.cassandra.cql3.ViewTest
+     # REPEATED_ANT_TEST_CLASS: org.apache.cassandra.distributed.test.PagingTest
+     REPEATED_ANT_TEST_CLASS:
+     # The optional specific methods within REPEATED_ANT_TEST_CLASS to be run, for example:
+     # REPEATED_ANT_TEST_METHODS: testCompoundPartitionKey
+     # REPEATED_ANT_TEST_METHODS: testCompoundPartitionKey,testStaticTable
      # Please note that some Ant targets will ignore the -Dtest.methods argument produced by this.
-     REPEATED_UTEST_METHODS:
+     REPEATED_ANT_TEST_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
-     REPEATED_UTEST_STOP_ON_FAILURE: false
- 
-     # A Python dtest to be run multiple times, for example:
-     # REPEATED_DTEST_NAME: cqlsh_tests/test_cqlsh.py
-     # REPEATED_DTEST_NAME: cqlsh_tests/test_cqlsh.py::TestCqlshSmoke
-     # REPEATED_DTEST_NAME: cqlsh_tests/test_cqlsh.py::TestCqlshSmoke::test_create_index
-     REPEATED_DTEST_NAME:
-     # Whether the repeated Python dtest should use vnodes
-     REPEATED_DTEST_VNODES: false
-     # The number of times that the repeated Python dtest should be run
-     REPEATED_DTEST_COUNT: 100
-     # Whether the test iteration should stop on the first failure
-     REPEATED_DTEST_STOP_ON_FAILURE: false
- 
-     # A Python upgrade dtest to be run multiple times, for example:
-     # REPEATED_UPGRADE_DTEST_NAME: upgrade_tests/cql_tests.py
-     # REPEATED_UPGRADE_DTEST_NAME: upgrade_tests/cql_tests.py::TestCQLNodes2RF1_Upgrade_current_4_0_x_To_indev_4_0_x
-     REPEATED_UPGRADE_DTEST_NAME:
-     # The number of times that the repeated Python upgrade dtest should be run
-     REPEATED_UPGRADE_DTEST_COUNT: 100
-     # Whether the test iteration should stop on the first failure
-     REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
- 
-     # The name of JVM upgrade dtest class to be run multiple times, for example:
-     # REPEATED_JVM_UPGRADE_DTEST_CLASS: org.apache.cassandra.distributed.upgrade.MixedModeAvailabilityV30Test
-     REPEATED_JVM_UPGRADE_DTEST_CLASS:
-     # The optional specific methods within REPEATED_JVM_UPGRADE_DTEST_CLASS to be run, for example:
-     # REPEATED_JVM_UPGRADE_DTEST_METHODS: testAvailabilityV30ToV3X
-     # REPEATED_JVM_UPGRADE_DTEST_METHODS: testAvailabilityV30ToV3X,testAvailabilityV30ToV4
-     REPEATED_JVM_UPGRADE_DTEST_METHODS:
-     # The number of times that the repeated JVM upgrade dtest should be run
-     REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     # Whether the JVM upgrade dtest iteration should stop on the first failure
-     REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
++    REPEATED_ANT_TEST_VNODES: false
+     # The number of times that the repeated JUnit test should be run.
+     REPEATED_ANT_TEST_COUNT: 500
  
  j8_par_executor: &j8_par_executor
    executor:
@@@ -200,14 -237,12 +249,36 @@@ j8_separate_jobs: &j8_separate_job
          requires:
            - start_j8_jvm_dtests
            - j8_build
++    - start_j8_jvm_dtests_vnode:
++        type: approval
++    - j8_jvm_dtests_vnode:
++        requires:
++          - start_j8_jvm_dtests_vnode
++          - j8_build
+     - start_j8_jvm_dtests_repeat:
+         type: approval
+     - j8_jvm_dtests_repeat:
+         requires:
+           - start_j8_jvm_dtests_repeat
+           - j8_build
++    - start_j8_jvm_dtests_vnode_repeat:
++        type: approval
++    - j8_jvm_dtests_vnode_repeat:
++        requires:
++          - start_j8_jvm_dtests_vnode_repeat
++          - j8_build
++    - start_j8_simulator_dtests:
++        type: approval
 +    - j8_simulator_dtests:
 +        requires:
-           - start_j8_jvm_dtests
++          - start_j8_simulator_dtests
 +          - j8_build
-     - j8_jvm_dtests_vnode:
++    - start_j8_simulator_dtests_repeat:
++        type: approval
++    - j8_simulator_dtests_repeat:
 +        requires:
-           - start_j8_jvm_dtests
++          - start_j8_simulator_dtests_repeat
 +          - j8_build
      - start_j8_cqlshlib_tests:
          type: approval
      - j8_cqlshlib_tests:
@@@ -271,108 -348,130 +384,117 @@@
          requires:
            - start_j8_dtests
            - j8_build
-     - j8_dtests-no-vnodes:
 -    - start_j8_dtests_repeat:
 -        type: approval
 -    - j8_dtests_repeat:
 -        requires:
 -          - start_j8_dtests_repeat
 -          - j8_build
+     - start_j8_dtests_vnode:
+         type: approval
+     - j8_dtests_vnode:
          requires:
-           - start_j8_dtests
+           - start_j8_dtests_vnode
            - j8_build
 -    - start_j8_dtests_vnode_repeat:
 -        type: approval
 -    - j8_dtests_vnode_repeat:
 -        requires:
 -          - start_j8_dtests_vnode_repeat
 -          - j8_build
      # Java 11 dtests
      - start_j11_dtests:
          type: approval
-     - j11_dtests-with-vnodes:
+     - j11_dtests:
          requires:
 -          - start_j11_dtests
 -          - j8_build
 -    - start_j11_dtests_repeat:
 -        type: approval
 -    - j11_dtests_repeat:
 -        requires:
 -          - start_j11_dtests_repeat
 -          - j8_build
 +        - start_j11_dtests
 +        - j8_build
-     - j11_dtests-no-vnodes:
+     - start_j11_dtests_vnode:
+         type: approval
+     - j11_dtests_vnode:
          requires:
-         - start_j11_dtests
-         - j8_build
+           - start_j11_dtests_vnode
+           - j8_build
 -    - start_j11_dtests_vnode_repeat:
 -        type: approval
 -    - j11_dtests_vnode_repeat:
 -        requires:
 -          - start_j11_dtests_vnode_repeat
 -          - j8_build
      # Java 8 upgrade tests
--    - start_upgrade_tests:
++    - start_upgrade_dtests:
          type: approval
-     - j8_upgradetests-no-vnodes:
+     - j8_upgrade_dtests:
          requires:
--          - start_upgrade_tests
 -          - j8_build
 -    - start_j8_upgrade_dtests_repeat:
 -        type: approval
 -    - j8_upgrade_dtests_repeat:
 -        requires:
 -          - start_j8_upgrade_dtests_repeat
++          - start_upgrade_dtests
            - j8_build
      # Java 8 cqlsh dtests
      - start_j8_cqlsh_tests:
          type: approval
-     - j8_cqlsh-dtests-py3-with-vnodes:
-         requires:
-         - start_j8_cqlsh_tests
-         - j8_build
-     - j8_cqlsh-dtests-py38-with-vnodes:
 -    - j8_cqlsh-dtests-py2-with-vnodes:
++    - j8_cqlsh_dtests_py3:
          requires:
--        - start_j8_cqlsh_tests
--        - j8_build
-     - j8_cqlsh-dtests-py3-no-vnodes:
++          - start_j8_cqlsh_tests
++          - j8_build
+     - j8_cqlsh_dtests_py3_vnode:
          requires:
--        - start_j8_cqlsh_tests
--        - j8_build
-     - j8_cqlsh-dtests-py38-no-vnodes:
 -    - j8_cqlsh_dtests_py38_vnode:
 -        requires:
 -        - start_j8_cqlsh_tests
 -        - j8_build
 -    - j8_cqlsh-dtests-py2-no-vnodes:
 -        requires:
 -        - start_j8_cqlsh_tests
 -        - j8_build
 -    - j8_cqlsh_dtests_py3:
 -        requires:
 -        - start_j8_cqlsh_tests
 -        - j8_build
++          - start_j8_cqlsh_tests
++          - j8_build
+     - j8_cqlsh_dtests_py38:
          requires:
            - start_j8_cqlsh_tests
            - j8_build
++    - j8_cqlsh_dtests_py38_vnode:
++        requires:
++        - start_j8_cqlsh_tests
++        - j8_build
      # Java 11 cqlsh dtests
      - start_j11_cqlsh_tests:
          type: approval
-     - j11_cqlsh-dtests-py3-with-vnodes:
-         requires:
-         - start_j11_cqlsh_tests
-         - j8_build
-     - j11_cqlsh-dtests-py38-with-vnodes:
 -    - j11_cqlsh-dtests-py2-with-vnodes:
++    - j11_cqlsh_dtests_py3:
          requires:
 -        - start_j11_cqlsh_tests
 -        - j8_build
 +          - start_j11_cqlsh_tests
 +          - j8_build
-     - j11_cqlsh-dtests-py3-no-vnodes:
+     - j11_cqlsh_dtests_py3_vnode:
+         requires:
+         - start_j11_cqlsh_tests
+         - j8_build
 -    - j11_cqlsh_dtests_py38_vnode:
 -        requires:
 -          - start_j11_cqlsh_tests
 -          - j8_build
 -    - j11_cqlsh-dtests-py2-no-vnodes:
 -        requires:
 -          - start_j11_cqlsh_tests
 -          - j8_build
 -    - j11_cqlsh_dtests_py3:
++    - j11_cqlsh_dtests_py38:
          requires:
            - start_j11_cqlsh_tests
            - j8_build
-     - j11_cqlsh-dtests-py38-no-vnodes:
 -    - j11_cqlsh_dtests_py38:
++    - j11_cqlsh_dtests_py38_vnode:
          requires:
            - start_j11_cqlsh_tests
            - j8_build
      # Java 8 repeated utest
-     - start_j8_repeated_utest:
+     - start_j8_repeated_ant_test:
          type: approval
-     - j8_repeated_utest:
+     - j8_repeated_ant_test:
          requires:
-           - start_j8_repeated_utest
+           - start_j8_repeated_ant_test
            - j8_build
      # Java 11 repeated utest
-     - start_j11_repeated_utest:
+     - start_j11_repeated_ant_test:
          type: approval
-     - j11_repeated_utest:
+     - j11_repeated_ant_test:
          requires:
-           - start_j11_repeated_utest
+           - start_j11_repeated_ant_test
            - j8_build
 +    # Java 8 repeated dtest
-     - start_j8_repeated_dtest:
++    - start_j8_dtests_repeat:
 +        type: approval
-     - j8_repeated_dtest:
++    - j8_dtests_repeat:
 +        requires:
-           - start_j8_repeated_dtest
++          - start_j8_dtests_repeat
++          - j8_build
++    - start_j8_dtests_vnode_repeat:
++        type: approval
++    - j8_dtests_vnode_repeat:
++        requires:
++          - start_j8_dtests_vnode_repeat
 +          - j8_build
 +    # Java 11 repeated dtest
-     - start_j11_repeated_dtest:
++    - start_j11_dtests_repeat:
 +        type: approval
-     - j11_repeated_dtest:
++    - j11_dtests_repeat:
 +        requires:
-           - start_j11_repeated_dtest
++          - start_j11_dtests_repeat
 +          - j8_build
-     # Repeated Python upgrade dtest
-     - start_repeated_upgrade_dtest:
++    - start_j11_dtests_vnode_repeat:
 +        type: approval
-     - repeated_upgrade_dtest:
++    - j11_dtests_vnode_repeat:
 +        requires:
-             - start_repeated_upgrade_dtest
-             - j8_build
-     # Repeated JVM upgrade dtest
-     - start_repeated_jvm_upgrade_dtest:
++          - start_j11_dtests_vnode_repeat
++          - j8_build
++    # Repeated Python upgrade dtest
++    - start_j8_upgrade_dtests_repeat:
 +        type: approval
-     - repeated_jvm_upgrade_dtest:
++    - j8_upgrade_dtests_repeat:
 +        requires:
-           - start_repeated_jvm_upgrade_dtest
-           - j8_dtest_jars_build
++            - start_j8_upgrade_dtests_repeat
++            - j8_build
  
  j8_pre-commit_jobs: &j8_pre-commit_jobs
    jobs:
@@@ -385,15 -484,15 +507,27 @@@
      - j8_unit_tests:
          requires:
            - j8_build
+     - j8_unit_tests_repeat:
+         requires:
+           - j8_build
 +    - j8_simulator_dtests:
 +        requires:
 +          - j8_build
++    - j8_simulator_dtests_repeat:
++        requires:
++          - j8_build
      - j8_jvm_dtests:
          requires:
            - j8_build
+     - j8_jvm_dtests_repeat:
+         requires:
+           - j8_build
 +    - j8_jvm_dtests_vnode:
 +        requires:
 +          - j8_build
++    - j8_jvm_dtests_vnode_repeat:
++        requires:
++          - j8_build
      - j8_cqlshlib_tests:
          requires:
            - j8_build
@@@ -434,104 -555,90 +590,78 @@@
      - j8_dtest_jars_build:
          requires:
            - j8_build
-           - start_j8_dtest_jars_build
-     - start_jvm_upgrade_dtest:
-         type: approval
+           - start_jvm_upgrade_dtests
      - j8_jvm_upgrade_dtests:
          requires:
-           - start_jvm_upgrade_dtest
+           - j8_dtest_jars_build
+     - j8_jvm_upgrade_dtests_repeat:
+         requires:
            - j8_dtest_jars_build
      # Java 8 dtests
-     - j8_dtests-with-vnodes:
+     - j8_dtests:
          requires:
            - j8_build
-     - j8_dtests-no-vnodes:
+     - j8_dtests_repeat:
          requires:
            - j8_build
-     # Java 11 dtests
-     - j11_dtests-with-vnodes:
+     - j8_dtests_vnode:
          requires:
            - j8_build
-     - j11_dtests-no-vnodes:
+     - j8_dtests_vnode_repeat:
          requires:
            - j8_build
-     # Java 8 upgrade tests (on request)
-     - start_upgrade_tests:
-         type: approval
-     - j8_upgradetests-no-vnodes:
+     # Java 11 dtests
+     - j11_dtests:
          requires:
            - j8_build
-           - start_upgrade_tests
-     # Java 8 cqlsh dtests
-     - j8_cqlsh-dtests-py3-with-vnodes:
+     - j11_dtests_repeat:
          requires:
            - j8_build
-     - j8_cqlsh-dtests-py38-with-vnodes:
+     - j11_dtests_vnode:
          requires:
            - j8_build
-     - j8_cqlsh-dtests-py3-no-vnodes:
+     - j11_dtests_vnode_repeat:
          requires:
            - j8_build
-     - j8_cqlsh-dtests-py38-no-vnodes:
+     # Java 8 upgrade tests (on request)
 -    - start_upgrade_tests:
++    - start_upgrade_dtests:
+         type: approval
+     - j8_upgrade_dtests:
          requires:
            - j8_build
-     # Java 11 cqlsh dtests
-     - j11_cqlsh-dtests-py3-with-vnodes:
 -          - start_upgrade_tests
++          - start_upgrade_dtests
+     - j8_upgrade_dtests_repeat:
          requires:
            - j8_build
-     - j11_cqlsh-dtests-py38-with-vnodes:
 -          - start_upgrade_tests
++          - start_upgrade_dtests
+     # Java 8 cqlsh dtests
 -    - j8_cqlsh-dtests-py2-with-vnodes:
++    - j8_cqlsh_dtests_py3:
          requires:
            - j8_build
-     - j11_cqlsh-dtests-py3-no-vnodes:
+     - j8_cqlsh_dtests_py3_vnode:
          requires:
            - j8_build
-     - j11_cqlsh-dtests-py38-no-vnodes:
 -    - j8_cqlsh_dtests_py38_vnode:
 -        requires:
 -          - j8_build
 -    - j8_cqlsh-dtests-py2-no-vnodes:
 -        requires:
 -          - j8_build
 -    - j8_cqlsh_dtests_py3:
++    - j8_cqlsh_dtests_py38:
          requires:
            - j8_build
-     # Java 8 repeated utest (on request)
-     - start_j8_repeated_utest:
-         type: approval
-     - j8_repeated_utest:
 -    - j8_cqlsh_dtests_py38:
++    - j8_cqlsh_dtests_py38_vnode:
          requires:
-           - start_j8_repeated_utest
            - j8_build
-     # Java 11 repeated utest (on request)
-     - start_j11_repeated_utest:
-         type: approval
-     - j11_repeated_utest:
+     # Java 11 cqlsh dtests
 -    - j11_cqlsh-dtests-py2-with-vnodes:
++    - j11_cqlsh_dtests_py3:
          requires:
-           - start_j11_repeated_utest
            - j8_build
-     # Java 8 repeated dtest (on request)
-     - start_j8_repeated_dtest:
-         type: approval
-     - j8_repeated_dtest:
+     - j11_cqlsh_dtests_py3_vnode:
          requires:
-           - start_j8_repeated_dtest
            - j8_build
-     # Java 11 repeated dtest (on request)
-     - start_j11_repeated_dtest:
-         type: approval
-     - j11_repeated_dtest:
 -    - j11_cqlsh_dtests_py38_vnode:
 -        requires:
 -          - j8_build
 -    - j11_cqlsh-dtests-py2-no-vnodes:
 -        requires:
 -          - j8_build
 -    - j11_cqlsh_dtests_py3:
++    - j11_cqlsh_dtests_py38:
          requires:
-           - start_j11_repeated_dtest
            - j8_build
-     # Repeated Python upgrade dtest (on request)
-     - start_repeated_upgrade_dtest:
-         type: approval
-     - repeated_upgrade_dtest:
 -    - j11_cqlsh_dtests_py38:
++    - j11_cqlsh_dtests_py38_vnode:
          requires:
-           - start_repeated_upgrade_dtest
            - j8_build
-     # Repeated JVM upgrade dtest (on request)
-     - start_repeated_jvm_upgrade_dtest:
-         type: approval
-     - repeated_jvm_upgrade_dtest:
-         requires:
-           - start_repeated_jvm_upgrade_dtest
-           - j8_dtest_jars_build
  
- j11_with_dtests_jobs: &j11_with_dtests_jobs
+ j11_separate_jobs: &j11_separate_jobs
    jobs:
      - start_j11_build:
          type: approval
@@@ -551,10 -664,12 +687,24 @@@
          requires:
            - start_j11_jvm_dtests
            - j11_build
++    - start_j11_jvm_dtests_vnode:
++        type: approval
 +    - j11_jvm_dtests_vnode:
 +        requires:
-           - start_j11_jvm_dtests
++          - start_j11_jvm_dtests_vnode
++          - j11_build
+     - start_j11_jvm_dtests_repeat:
+         type: approval
+     - j11_jvm_dtests_repeat:
+         requires:
+           - start_j11_jvm_dtests_repeat
+           - j11_build
++    - start_j11_jvm_dtests_vnode_repeat:
++        type: approval
++    - j11_jvm_dtests_vnode_repeat:
++        requires:
++          - start_j11_jvm_dtests_vnode_repeat
 +          - j11_build
      - start_j11_cqlshlib_tests:
          type: approval
      - j11_cqlshlib_tests:
@@@ -568,13 -683,27 +718,15 @@@
          requires:
            - start_j11_dtests
            - j11_build
-     - j11_dtests-no-vnodes:
+     - start_j11_dtests_vnode:
+         type: approval
+     - j11_dtests_vnode:
          requires:
-           - start_j11_dtests
+           - start_j11_dtests_vnode
            - j11_build
 -    - start_j11_dtests_repeat:
 -        type: approval
 -    - j11_dtests_repeat:
 -        requires:
 -          - start_j11_dtests_repeat
 -          - j11_build
 -    - start_j11_dtests_vnode_repeat:
 -        type: approval
 -    - j11_dtests_vnode_repeat:
 -        requires:
 -          - start_j11_dtests_vnode_repeat
 -          - j11_build
      - start_j11_cqlsh_tests:
          type: approval
-     - j11_cqlsh-dtests-py3-with-vnodes:
 -    - j11_cqlsh-dtests-py2-with-vnodes:
++    - j11_cqlsh_dtests_py3:
          requires:
            - start_j11_cqlsh_tests
            - j11_build
@@@ -582,28 -711,29 +734,34 @@@
          requires:
            - start_j11_cqlsh_tests
            - j11_build
-     - j11_cqlsh-dtests-py3-no-vnodes:
 -    - j11_cqlsh_dtests_py38_vnode:
 -        requires:
 -          - start_j11_cqlsh_tests
 -          - j11_build
 -    - j11_cqlsh-dtests-py2-no-vnodes:
 -        requires:
 -          - start_j11_cqlsh_tests
 -          - j11_build
 -    - j11_cqlsh_dtests_py3:
++    - j11_cqlsh_dtests_py38:
          requires:
            - start_j11_cqlsh_tests
            - j11_build
-     - j11_cqlsh-dtests-py38-no-vnodes:
 -    - j11_cqlsh_dtests_py38:
++    - j11_cqlsh_dtests_py38_vnode:
          requires:
            - start_j11_cqlsh_tests
            - j11_build
      # Java 11 repeated utest
-     - start_j11_repeated_utest:
+     - start_j11_repeated_ant_test:
          type: approval
-     - j11_repeated_utest:
+     - j11_repeated_ant_test:
          requires:
-           - start_j11_repeated_utest
+           - start_j11_repeated_ant_test
            - j11_build
 +    # Java 11 repeated dtest
-     - start_j11_repeated_dtest:
++    - start_j11_dtests_repeat:
 +        type: approval
-     - j11_repeated_dtest:
++    - j11_dtests_repeat:
 +        requires:
-           - start_j11_repeated_dtest
++          - start_j11_dtests_repeat
++          - j11_build
++    - start_j11_dtests_vnode_repeat:
++        type: approval
++    - j11_dtests_vnode_repeat:
++        requires:
++          - start_j11_dtests_vnode_repeat
 +          - j11_build
  
  j11_pre-commit_jobs: &j11_pre-commit_jobs
    jobs:
@@@ -618,49 -751,47 +779,44 @@@
      - j11_jvm_dtests:
          requires:
            - j11_build
+     - j11_jvm_dtests_repeat:
+         requires:
+           - j11_build
 -    - j11_cqlshlib_tests:
 +    - j11_jvm_dtests_vnode:
          requires:
            - j11_build
-     - j11_cqlshlib_tests:
 -    - j11_jvm_dtests:
++    - j11_jvm_dtests_vnode_repeat:
 +        requires:
 +          - j11_build
-     - j11_jvm_dtests:
++    - j11_cqlshlib_tests:
          requires:
            - j11_build
      - j11_cqlshlib_tests:
          requires:
            - j11_build
-     - j11_dtests-with-vnodes:
+     - j11_dtests:
          requires:
            - j11_build
-     - j11_dtests-no-vnodes:
+     - j11_dtests_repeat:
          requires:
            - j11_build
-     - j11_cqlsh-dtests-py3-with-vnodes:
+     - j11_dtests_vnode:
          requires:
            - j11_build
-     - j11_cqlsh-dtests-py38-with-vnodes:
+     - j11_dtests_vnode_repeat:
          requires:
            - j11_build
-     - j11_cqlsh-dtests-py3-no-vnodes:
 -    - j11_cqlsh-dtests-py2-with-vnodes:
++    - j11_cqlsh_dtests_py3:
          requires:
            - j11_build
-     - j11_cqlsh-dtests-py38-no-vnodes:
+     - j11_cqlsh_dtests_py3_vnode:
          requires:
            - j11_build
-     # Java 11 repeated utest (on request)
-     - start_j11_repeated_utest:
-         type: approval
-     - j11_repeated_utest:
 -    - j11_cqlsh_dtests_py38_vnode:
 -        requires:
 -          - j11_build
 -    - j11_cqlsh-dtests-py2-no-vnodes:
 -        requires:
 -          - j11_build
 -    - j11_cqlsh_dtests_py3:
++    - j11_cqlsh_dtests_py38:
          requires:
-           - start_j11_repeated_utest
            - j11_build
-     # Java 11 repeated dtest (on request)
-     - start_j11_repeated_dtest:
-         type: approval
-     - j11_repeated_dtest:
 -    - j11_cqlsh_dtests_py38:
++    - j11_cqlsh_dtests_py38_vnode:
          requires:
-           - start_j11_repeated_dtest
            - j11_build
  
  workflows:
@@@ -960,7 -1054,22 +1116,7 @@@ jobs
            file_tag: j8_upgradetests_without_vnodes
            pytest_extra_args: '--execute-upgrade-tests-only --upgrade-target-version-only --upgrade-version-selection all'
  
-   j8_cqlsh-dtests-py3-with-vnodes:
 -  j8_cqlsh-dtests-py2-with-vnodes:
 -    <<: *j8_par_executor
 -    steps:
 -      - attach_workspace:
 -          at: /home/cassandra
 -      - clone_dtest
 -      - create_venv
 -      - create_dtest_containers:
 -          file_tag: j8_with_vnodes
 -          run_dtests_extra_args: "--use-vnodes --skip-resource-intensive-tests --pytest-options '-k cql'"
 -      - run_dtests:
 -          file_tag: j8_with_vnodes
 -          pytest_extra_args: '--use-vnodes --num-tokens=16 --skip-resource-intensive-tests'
 -          extra_env_args: 'CQLSH_PYTHON=/usr/bin/python2.7'
 -
+   j8_cqlsh_dtests_py3_vnode:
      <<: *j8_par_executor
      steps:
        - attach_workspace:
@@@ -993,7 -1102,22 +1149,7 @@@
            extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.8'
            python_version: '3.8'
  
-   j8_cqlsh-dtests-py3-no-vnodes:
 -  j8_cqlsh-dtests-py2-no-vnodes:
 -    <<: *j8_par_executor
 -    steps:
 -      - attach_workspace:
 -          at: /home/cassandra
 -      - clone_dtest
 -      - create_venv
 -      - create_dtest_containers:
 -          file_tag: j8_without_vnodes
 -          run_dtests_extra_args: "--skip-resource-intensive-tests --pytest-options '-k cql'"
 -      - run_dtests:
 -          file_tag: j8_without_vnodes
 -          pytest_extra_args: '--skip-resource-intensive-tests'
 -          extra_env_args: 'CQLSH_PYTHON=/usr/bin/python2.7'
 -
+   j8_cqlsh_dtests_py3:
      <<: *j8_par_executor
      steps:
        - attach_workspace:
@@@ -1026,7 -1150,22 +1182,7 @@@
            extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.8'
            python_version: '3.8'
  
-   j11_cqlsh-dtests-py3-with-vnodes:
 -  j11_cqlsh-dtests-py2-with-vnodes:
 -    <<: *j11_par_executor
 -    steps:
 -      - attach_workspace:
 -          at: /home/cassandra
 -      - clone_dtest
 -      - create_venv
 -      - create_dtest_containers:
 -          file_tag: j11_with_vnodes
 -          run_dtests_extra_args: "--use-vnodes --skip-resource-intensive-tests --pytest-options '-k cql'"
 -      - run_dtests:
 -          file_tag: j11_with_vnodes
 -          pytest_extra_args: '--use-vnodes --num-tokens=16 --skip-resource-intensive-tests'
 -          extra_env_args: 'CQLSH_PYTHON=/usr/bin/python2.7'
 -
+   j11_cqlsh_dtests_py3_vnode:
      <<: *j11_par_executor
      steps:
        - attach_workspace:
@@@ -1059,7 -1198,22 +1215,7 @@@
            extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.8'
            python_version: '3.8'
  
-   j11_cqlsh-dtests-py3-no-vnodes:
 -  j11_cqlsh-dtests-py2-no-vnodes:
 -    <<: *j11_par_executor
 -    steps:
 -      - attach_workspace:
 -          at: /home/cassandra
 -      - clone_dtest
 -      - create_venv
 -      - create_dtest_containers:
 -          file_tag: j11_without_vnodes
 -          run_dtests_extra_args: "--skip-resource-intensive-tests --pytest-options '-k cql'"
 -      - run_dtests:
 -          file_tag: j11_without_vnodes
 -          pytest_extra_args: '--skip-resource-intensive-tests'
 -          extra_env_args: 'CQLSH_PYTHON=/usr/bin/python2.7'
 -
+   j11_cqlsh_dtests_py3:
      <<: *j11_par_executor
      steps:
        - attach_workspace:
@@@ -1092,35 -1246,127 +1248,153 @@@
            extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.8'
            python_version: '3.8'
  
-   j8_repeated_utest:
+   j8_unit_tests_repeat:
+     <<: *j8_repeated_utest_executor
+     steps:
+       - attach_workspace:
+           at: /home/cassandra
+       - log_environment
+       - run_unit_tests_repeat
+ 
+   utests_compression_repeat:
+     <<: *j8_repeated_utest_executor
+     steps:
+       - attach_workspace:
+           at: /home/cassandra
+       - log_environment
+       - run_utests_compression_repeat
+ 
+   utests_system_keyspace_directory_repeat:
+     <<: *j8_repeated_utest_executor
+     steps:
+       - attach_workspace:
+           at: /home/cassandra
+       - log_environment
+       - run_utests_system_keyspace_directory_repeat
+ 
+   utests_fqltool_repeat:
+     <<: *j8_repeated_utest_executor
+     steps:
+       - attach_workspace:
+           at: /home/cassandra
+       - log_environment
+       - run_utests_fqltool_repeat
+ 
+   utests_long_repeat:
+     <<: *j8_repeated_utest_executor
+     steps:
+       - attach_workspace:
+           at: /home/cassandra
+       - log_environment
+       - run_utests_long_repeat
+ 
+   utests_stress_repeat:
+     <<: *j8_repeated_utest_executor
+     steps:
+       - attach_workspace:
+           at: /home/cassandra
+       - log_environment
+       - run_utests_stress_repeat
+ 
+   j11_unit_tests_repeat:
+     <<: *j11_repeated_utest_executor
+     steps:
+       - attach_workspace:
+           at: /home/cassandra
+       - log_environment
+       - run_unit_tests_repeat
+ 
+   j8_jvm_dtests_repeat:
+     <<: *j8_repeated_utest_executor
+     steps:
+       - attach_workspace:
+           at: /home/cassandra
+       - log_environment
+       - run_jvm_dtests_repeat
+ 
++  j8_jvm_dtests_vnode_repeat:
++    <<: *j8_repeated_utest_executor
++    steps:
++      - attach_workspace:
++          at: /home/cassandra
++      - log_environment
++      - run_jvm_dtests_vnode_repeat
++
++  j8_simulator_dtests_repeat:
++    <<: *j8_repeated_utest_executor
++    steps:
++      - attach_workspace:
++          at: /home/cassandra
++      - log_environment
++      - run_simulator_dtests_repeat
++
+   j8_jvm_upgrade_dtests_repeat:
+     <<: *j8_repeated_jvm_upgrade_dtest_executor
+     steps:
+       - attach_workspace:
+           at: /home/cassandra
+       - log_environment
+       - run_jvm_upgrade_dtests_repeat
+ 
+   j11_jvm_dtests_repeat:
+     <<: *j11_repeated_utest_executor
+     steps:
+       - attach_workspace:
+           at: /home/cassandra
+       - log_environment
+       - run_jvm_dtests_repeat
+ 
++  j11_jvm_dtests_vnode_repeat:
++    <<: *j11_repeated_utest_executor
++    steps:
++      - attach_workspace:
++          at: /home/cassandra
++      - log_environment
++      - run_jvm_dtests_vnode_repeat
++
+   j8_repeated_ant_test:
      <<: *j8_repeated_utest_executor
      steps:
        - attach_workspace:
            at: /home/cassandra
        - log_environment
        - run_repeated_utest:
-           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}
- 
-   j11_repeated_utest:
+           target: ${REPEATED_ANT_TEST_TARGET}
+           class: ${REPEATED_ANT_TEST_CLASS}
+           methods: ${REPEATED_ANT_TEST_METHODS}
++          vnodes: ${REPEATED_ANT_TEST_VNODES}
+           count: ${REPEATED_ANT_TEST_COUNT}
+           stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
+ 
+   j11_repeated_ant_test:
      <<: *j11_repeated_utest_executor
      steps:
        - attach_workspace:
            at: /home/cassandra
        - log_environment
        - run_repeated_utest:
-           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}
- 
-   j8_repeated_dtest:
+           target: ${REPEATED_ANT_TEST_TARGET}
+           class: ${REPEATED_ANT_TEST_CLASS}
+           methods: ${REPEATED_ANT_TEST_METHODS}
++          vnodes: ${REPEATED_ANT_TEST_VNODES}
+           count: ${REPEATED_ANT_TEST_COUNT}
+           stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
+ 
+   j8_dtests_repeat:
+     <<: *j8_repeated_dtest_executor
+     steps:
+       - attach_workspace:
+           at: /home/cassandra
+       - clone_dtest
+       - create_venv
+       - run_repeated_dtest:
+           tests: ${REPEATED_DTESTS}
+           vnodes: "false"
+           upgrade: "false"
+           count: ${REPEATED_DTESTS_COUNT}
+           stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
+ 
+   j8_dtests_vnode_repeat:
      <<: *j8_repeated_dtest_executor
      steps:
        - attach_workspace:
@@@ -1328,33 -1575,6 +1603,33 @@@ commands
  
          no_output_timeout: 15m
  
 +  run_simulator_tests:
 +    parameters:
 +      no_output_timeout:
 +        type: string
 +        default: 30m
 +    steps:
 +    - run:
-         name: Run Simulator Tests 
++        name: Run Simulator Tests
 +        command: |
 +          set -x
 +          export PATH=$JAVA_HOME/bin:$PATH
 +          time mv ~/cassandra /tmp
 +          cd /tmp/cassandra
 +          if [ -d ~/dtest_jars ]; then
 +            cp ~/dtest_jars/dtest* /tmp/cassandra/build/
 +          fi
 +          ant test-simulator-dtest
 +        no_output_timeout: <<parameters.no_output_timeout>>
 +    - store_test_results:
 +        path: /tmp/cassandra/build/test/output/
 +    - store_artifacts:
 +        path: /tmp/cassandra/build/test/output
 +        destination: junitxml
 +    - store_artifacts:
 +        path: /tmp/cassandra/build/test/logs
 +        destination: logs
 +
    run_junit_tests:
      parameters:
        target:
@@@ -1552,6 -1769,190 +1827,220 @@@
            path: ~/cassandra-dtest/logs
            destination: dtest_<<parameters.file_tag>>_logs
  
+   run_unit_tests_repeat:
+     steps:
+       - run_repeated_utests:
+           target: testsome
+           tests: ${REPEATED_UTESTS}
+           count: ${REPEATED_UTESTS_COUNT}
+           stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
+ 
+   run_utests_compression_repeat:
+     steps:
+       - run_repeated_utests:
+           target: test-compression
+           tests: ${REPEATED_UTESTS}
+           count: ${REPEATED_UTESTS_COUNT}
+           stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
+ 
+   run_utests_system_keyspace_directory_repeat:
+     steps:
+       - run_repeated_utests:
+           target: test-system-keyspace-directory
+           tests: ${REPEATED_UTESTS}
+           count: ${REPEATED_UTESTS_COUNT}
+           stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
+ 
+   run_utests_long_repeat:
+     steps:
+       - run_repeated_utests:
+           target: long-testsome
+           tests: ${REPEATED_UTESTS_LONG}
+           count: ${REPEATED_UTESTS_LONG_COUNT}
+           stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
+ 
+   run_utests_fqltool_repeat:
+     steps:
+       - run_repeated_utests:
+           target: fqltool-test
+           tests: ${REPEATED_UTESTS_FQLTOOL}
+           count: ${REPEATED_UTESTS_FQLTOOL_COUNT}
+           stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
+ 
+   run_utests_stress_repeat:
+     steps:
+       - run_repeated_utests:
+           target: stress-test-some
+           tests: ${REPEATED_UTESTS_STRESS}
+           count: ${REPEATED_UTESTS_STRESS_COUNT}
+           stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
+ 
+   run_jvm_dtests_repeat:
+     steps:
+       - run_repeated_utests:
+           target: test-jvm-dtest-some
+           tests: ${REPEATED_JVM_DTESTS}
+           count: ${REPEATED_JVM_DTESTS_COUNT}
++          vnodes: false
++          stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
++
++  run_simulator_dtests_repeat:
++    steps:
++      - run_repeated_utests:
++          target: test-simulator-dtest
++          tests: ${REPEATED_SIMULATOR_DTESTS}
++          count: ${REPEATED_SIMULATOR_DTESTS_COUNT}
++          stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
++
++  run_jvm_dtests_vnode_repeat:
++    steps:
++      - run_repeated_utests:
++          target: test-jvm-dtest-some
++          tests: ${REPEATED_JVM_DTESTS}
++          count: ${REPEATED_JVM_DTESTS_COUNT}
++          vnodes: true
+           stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
+ 
+   run_jvm_upgrade_dtests_repeat:
+     steps:
+       - run_repeated_utests:
+           target: test-jvm-dtest-some
+           tests: ${REPEATED_JVM_UPGRADE_DTESTS}
+           count: ${REPEATED_JVM_UPGRADE_DTESTS_COUNT}
++          vnodes: false
+           stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
+ 
+   run_repeated_utests:
+     parameters:
+       target:
+         type: string
+       tests:
+         type: string
+       count:
+         type: string
++      vnodes:
++        type: boolean
++        default: false
+       stop_on_failure:
+         type: string
+     steps:
+       - run:
+           name: Repeatedly run new or modifed JUnit tests
+           no_output_timeout: 15m
+           command: |
+             set -x
+             export PATH=$JAVA_HOME/bin:$PATH
+             time mv ~/cassandra /tmp
+             cd /tmp/cassandra
+             if [ -d ~/dtest_jars ]; then
+               cp ~/dtest_jars/dtest* /tmp/cassandra/build/
+             fi
+             
+             # Calculate the number of test iterations to be run by the current parallel runner.
+             count=$((<<parameters.count>> / CIRCLE_NODE_TOTAL))
+             if (($CIRCLE_NODE_INDEX < (<<parameters.count>> % CIRCLE_NODE_TOTAL))); then
+               count=$((count+1))
+             fi
+             
+             # Put manually specified tests and automatically detected tests together, removing duplicates
+             tests=$(echo <<parameters.tests>> | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u)
+             echo "Tests to be repeated: ${tests}"
+             
++            # Prepare the JVM dtests vnodes argument, which is optional.
++            vnodes=<<parameters.vnodes>>
++            vnodes_args=""
++            if [ "$vnodes" = true ] ; then
++              vnodes_args="-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'"
++            fi
++            
+             # Run each test class as many times as requested.
+             exit_code="$?"
+             for test in $tests; do
+             
+                 # Split class and method names from the test name
+                 if [[ $test =~ "#" ]]; then
+                   class=${test%"#"*}
+                   method=${test#*"#"}
+                 else
+                   class=$test
+                   method=""
+                 fi
+             
+                 # Prepare the -Dtest.name argument.
+                 # It can be the fully qualified class name or the short class name, depending on the target.
+                 if [[ $target == "test" || \
+                       $target == "test-cdc" || \
+                       $target == "test-compression" || \
+                       $target == "test-system-keyspace-directory" || \
+                       $target == "fqltool-test" || \
+                       $target == "long-test" || \
 -                      $target == "stress-test" ]]; then
++                      $target == "stress-test" || \
++                      $target == "test-simulator-dtest" ]]; then
+                   name_arg="-Dtest.name=${class##*.}"
+                 else
+                   name_arg="-Dtest.name=$class"
+                 fi
+             
+                 # Prepare the -Dtest.methods argument, which is optional
+                 if [ $method == "" ]; then
+                   methods_arg=""
+                 else
+                   methods_arg="-Dtest.methods=$method"
+                 fi
+             
+                 for i in $(seq -w 1 $count); do
+                   echo "Running test $test, iteration $i of $count"
+ 
+                   # run the test
+                   status="passes"
+                   if !( set -o pipefail && \
 -                        ant <<parameters.target>> $name_arg $methods_arg -Dno-build-test=true | \
++                        ant <<parameters.target>> $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \
+                         tee stdout.txt \
+                       ); then
+                     status="fails"
+                     exit_code=1
+                   fi
+ 
+                   # move the stdout output file
+                   dest=/tmp/results/repeated_utests/stdout/${status}/${i}
+                   mkdir -p $dest
+                   mv stdout.txt $dest/${test}.txt
+ 
+                   # move the XML output files
+                   source=build/test/output
+                   dest=/tmp/results/repeated_utests/output/${status}/${i}
+                   mkdir -p $dest
+                   if [[ -d $source && -n "$(ls $source)" ]]; then
+                     mv $source/* $dest/
+                   fi
+ 
+                   # move the log files
+                   source=build/test/logs
+                   dest=/tmp/results/repeated_utests/logs/${status}/${i}
+                   mkdir -p $dest
+                   if [[ -d $source && -n "$(ls $source)" ]]; then
+                     mv $source/* $dest/
+                   fi
 -            
++                  
+                   # maybe stop iterations on test failure
+                   if [[ <<parameters.stop_on_failure>> = true ]] && (( $exit_code > 0 )); then
+                     break
+                   fi
+                 done
+             done
+             (exit ${exit_code})
+       - store_test_results:
+           path: /tmp/results/repeated_utests/output
+       - store_artifacts:
+           path: /tmp/results/repeated_utests/stdout
+           destination: stdout
+       - store_artifacts:
+           path: /tmp/results/repeated_utests/output
+           destination: junitxml
+       - store_artifacts:
+           path: /tmp/results/repeated_utests/logs
+           destination: logs
+ 
    run_repeated_utest:
      parameters:
        target:
@@@ -1608,7 -2007,10 +2097,11 @@@
                  if [[ $target == "test" || \
                        $target == "test-cdc" || \
                        $target == "test-compression" || \
-                       $target == "test-system-keyspace-directory" ]]; then
+                       $target == "test-system-keyspace-directory" || \
+                       $target == "fqltool-test" || \
+                       $target == "long-test" || \
 -                      $target == "stress-test" ]]; then
++                      $target == "stress-test" || \
++                      $target == "test-simulator-dtest" ]]; then
                    name="-Dtest.name=$class_name"
                  else
                    name="-Dtest.name=$class_path"
diff --cc .circleci/config-2_1.yml.high_res.patch
index 56e1ca2dbc,039203ddd2..8ec657fd83
--- a/.circleci/config-2_1.yml.high_res.patch
+++ b/.circleci/config-2_1.yml.high_res.patch
@@@ -1,6 -1,6 +1,6 @@@
- --- config-2_1.yml	2022-05-30 12:06:34.000000000 -0400
- +++ config-2_1.yml.HIGHRES	2022-05-30 12:06:59.000000000 -0400
- @@ -105,14 +105,14 @@
 ---- config-2_1.yml	2022-10-15 13:31:58.877152008 +0100
 -+++ config-2_1.yml.HIGHRES	2022-10-15 13:32:14.947560988 +0100
 -@@ -136,14 +136,14 @@
++--- config-2_1.yml	2022-10-15 12:44:53.878216263 +0100
+++++ config-2_1.yml.HIGHRES	2022-10-15 12:45:49.850511983 +0100
++@@ -148,14 +148,14 @@
   j8_par_executor: &j8_par_executor
     executor:
       name: java8-executor
@@@ -19,7 -19,7 +19,7 @@@
   
   j8_small_executor: &j8_small_executor
     executor:
- @@ -123,62 +123,68 @@
 -@@ -154,62 +154,68 @@
++@@ -166,62 +166,68 @@
   j8_medium_par_executor: &j8_medium_par_executor
     executor:
       name: java8-executor
diff --cc .circleci/config-2_1.yml.mid_res.patch
index 5a14e3454b,52e74e2ecb..a410c9b111
--- a/.circleci/config-2_1.yml.mid_res.patch
+++ b/.circleci/config-2_1.yml.mid_res.patch
@@@ -1,6 -1,6 +1,6 @@@
- --- config-2_1.yml	2022-05-30 12:06:34.000000000 -0400
- +++ config-2_1.yml.MIDRES	2022-05-30 12:06:52.000000000 -0400
- @@ -105,14 +105,14 @@
 ---- config-2_1.yml	2022-10-15 13:31:58.877152008 +0100
 -+++ config-2_1.yml.MIDRES	2022-10-15 13:32:14.940950632 +0100
 -@@ -136,14 +136,14 @@
++--- config-2_1.yml	2022-10-15 12:44:53.878216263 +0100
+++++ config-2_1.yml.MIDRES	2022-10-15 12:45:49.843904887 +0100
++@@ -148,14 +148,14 @@
   j8_par_executor: &j8_par_executor
     executor:
       name: java8-executor
@@@ -19,10 -19,15 +19,10 @@@
   
   j8_small_executor: &j8_small_executor
     executor:
- @@ -120,29 +120,41 @@
 -@@ -154,26 +154,38 @@
 - j8_medium_par_executor: &j8_medium_par_executor
 -   executor:
 -     name: java8-executor
 --    #exec_resource_class: xlarge
 --  parallelism: 1
 -+    exec_resource_class: large
 -+  parallelism: 4
 -+
++@@ -163,29 +163,41 @@
 +     exec_resource_class: medium
 +   parallelism: 1
 + 
  +j8_large_par_executor: &j8_large_par_executor
  +  executor:
  +    name: java8-executor
@@@ -68,7 -65,7 +68,7 @@@
   
   j11_small_executor: &j11_small_executor
     executor:
- @@ -150,35 +162,47 @@
 -@@ -181,35 +193,47 @@
++@@ -193,35 +205,47 @@
       #exec_resource_class: medium
     parallelism: 1
   
@@@ -120,120 -117,156 +120,120 @@@
  +    exec_resource_class: large
  +  parallelism: 25
   
-  j8_with_dtests_jobs: &j8_with_dtests_jobs
+  j8_separate_jobs: &j8_separate_jobs
     jobs:
- @@ -873,7 +897,7 @@
 -@@ -983,7 +1007,7 @@
++@@ -1045,7 +1069,7 @@
             target: testclasslist-system-keyspace-directory
   
-    j8_dtests-with-vnodes:
+    j8_dtests_vnode:
  -    <<: *j8_par_executor
  +    <<: *j8_large_par_executor
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -887,7 +911,7 @@
 -@@ -997,7 +1021,7 @@
++@@ -1059,7 +1083,7 @@
             pytest_extra_args: '--use-vnodes --num-tokens=16 --skip-resource-intensive-tests'
   
-    j11_dtests-with-vnodes:
+    j11_dtests_vnode:
  -    <<: *j11_par_executor
  +    <<: *j11_large_par_executor
       steps:
       - attach_workspace:
           at: /home/cassandra
- @@ -902,7 +926,7 @@
 -@@ -1012,7 +1036,7 @@
++@@ -1074,7 +1098,7 @@
           pytest_extra_args: '--use-vnodes --num-tokens=16 --skip-resource-intensive-tests'
   
-    j8_dtests-no-vnodes:
+    j8_dtests:
  -    <<: *j8_par_executor
  +    <<: *j8_large_par_executor
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -916,7 +940,7 @@
 -@@ -1026,7 +1050,7 @@
++@@ -1088,7 +1112,7 @@
             pytest_extra_args: '--skip-resource-intensive-tests'
   
-    j11_dtests-no-vnodes:
+    j11_dtests:
  -    <<: *j11_par_executor
  +    <<: *j11_large_par_executor
       steps:
       - attach_workspace:
           at: /home/cassandra
- @@ -931,7 +955,7 @@
 -@@ -1041,7 +1065,7 @@
++@@ -1103,7 +1127,7 @@
           pytest_extra_args: '--skip-resource-intensive-tests'
   
-    j8_upgradetests-no-vnodes:
+    j8_upgrade_dtests:
  -    <<: *j8_par_executor
  +    <<: *j8_very_large_par_executor
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -945,7 +969,7 @@
 -@@ -1055,7 +1079,7 @@
++@@ -1117,7 +1141,7 @@
             pytest_extra_args: '--execute-upgrade-tests-only --upgrade-target-version-only --upgrade-version-selection all'
   
-    j8_cqlsh-dtests-py3-with-vnodes:
 -   j8_cqlsh-dtests-py2-with-vnodes:
 --    <<: *j8_par_executor
 -+    <<: *j8_large_par_executor
 -     steps:
 -       - attach_workspace:
 -           at: /home/cassandra
 -@@ -1070,7 +1094,7 @@
 -           extra_env_args: 'CQLSH_PYTHON=/usr/bin/python2.7'
 - 
+    j8_cqlsh_dtests_py3_vnode:
  -    <<: *j8_par_executor
  +    <<: *j8_large_par_executor
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -960,7 +984,7 @@
 -@@ -1085,7 +1109,7 @@
++@@ -1132,7 +1156,7 @@
             extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
   
-    j8_cqlsh-dtests-py38-with-vnodes:
+    j8_cqlsh_dtests_py38_vnode:
  -    <<: *j8_par_executor
  +    <<: *j8_large_par_executor
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -978,7 +1002,7 @@
 -@@ -1103,7 +1127,7 @@
++@@ -1150,7 +1174,7 @@
             python_version: '3.8'
   
-    j8_cqlsh-dtests-py3-no-vnodes:
 -   j8_cqlsh-dtests-py2-no-vnodes:
 --    <<: *j8_par_executor
 -+    <<: *j8_large_par_executor
 -     steps:
 -       - attach_workspace:
 -           at: /home/cassandra
 -@@ -1118,7 +1142,7 @@
 -           extra_env_args: 'CQLSH_PYTHON=/usr/bin/python2.7'
 - 
+    j8_cqlsh_dtests_py3:
  -    <<: *j8_par_executor
  +    <<: *j8_large_par_executor
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -993,7 +1017,7 @@
 -@@ -1133,7 +1157,7 @@
++@@ -1165,7 +1189,7 @@
             extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
   
-    j8_cqlsh-dtests-py38-no-vnodes:
+    j8_cqlsh_dtests_py38:
  -    <<: *j8_par_executor
  +    <<: *j8_large_par_executor
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -1011,7 +1035,7 @@
 -@@ -1151,7 +1175,7 @@
++@@ -1183,7 +1207,7 @@
             python_version: '3.8'
   
-    j11_cqlsh-dtests-py3-with-vnodes:
 -   j11_cqlsh-dtests-py2-with-vnodes:
 --    <<: *j11_par_executor
 -+    <<: *j11_large_par_executor
 -     steps:
 -       - attach_workspace:
 -           at: /home/cassandra
 -@@ -1166,7 +1190,7 @@
 -           extra_env_args: 'CQLSH_PYTHON=/usr/bin/python2.7'
 - 
+    j11_cqlsh_dtests_py3_vnode:
  -    <<: *j11_par_executor
  +    <<: *j11_large_par_executor
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -1026,7 +1050,7 @@
 -@@ -1181,7 +1205,7 @@
++@@ -1198,7 +1222,7 @@
             extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
   
-    j11_cqlsh-dtests-py38-with-vnodes:
+    j11_cqlsh_dtests_py38_vnode:
  -    <<: *j11_par_executor
  +    <<: *j11_large_par_executor
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -1044,7 +1068,7 @@
 -@@ -1199,7 +1223,7 @@
++@@ -1216,7 +1240,7 @@
             python_version: '3.8'
   
-    j11_cqlsh-dtests-py3-no-vnodes:
 -   j11_cqlsh-dtests-py2-no-vnodes:
 --    <<: *j11_par_executor
 -+    <<: *j11_large_par_executor
 -     steps:
 -       - attach_workspace:
 -           at: /home/cassandra
 -@@ -1214,7 +1238,7 @@
 -           extra_env_args: 'CQLSH_PYTHON=/usr/bin/python2.7'
 - 
+    j11_cqlsh_dtests_py3:
  -    <<: *j11_par_executor
  +    <<: *j11_large_par_executor
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -1059,7 +1083,7 @@
 -@@ -1229,7 +1253,7 @@
++@@ -1231,7 +1255,7 @@
             extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
   
-    j11_cqlsh-dtests-py38-no-vnodes:
+    j11_cqlsh_dtests_py38:
  -    <<: *j11_par_executor
  +    <<: *j11_large_par_executor
       steps:
diff --cc .circleci/config.yml
index 07b8fb3437,afeb6e8288..f7fb72d98f
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@@ -109,26 -109,30 +109,33 @@@ jobs
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   repeated_jvm_upgrade_dtest:
+   utests_compression_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
@@@ -161,15 -165,310 +168,120 @@@
            which java
            java -version
      - run:
-         name: Run repeated JUnit test
+         name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
 -        command: |
 -          set -x
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          time mv ~/cassandra /tmp
 -          cd /tmp/cassandra
 -          if [ -d ~/dtest_jars ]; then
 -            cp ~/dtest_jars/dtest* /tmp/cassandra/build/
 -          fi
 -
 -          # Calculate the number of test iterations to be run by the current parallel runner.
 -          count=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))
 -          if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then
 -            count=$((count+1))
 -          fi
 -
 -          # Put manually specified tests and automatically detected tests together, removing duplicates
 -          tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u)
 -          echo "Tests to be repeated: ${tests}"
 -
 -          # Run each test class as many times as requested.
 -          exit_code="$?"
 -          for test in $tests; do
 -
 -              # Split class and method names from the test name
 -              if [[ $test =~ "#" ]]; then
 -                class=${test%"#"*}
 -                method=${test#*"#"}
 -              else
 -                class=$test
 -                method=""
 -              fi
 -
 -              # Prepare the -Dtest.name argument.
 -              # It can be the fully qualified class name or the short class name, depending on the target.
 -              if [[ $target == "test" || \
 -                    $target == "test-cdc" || \
 -                    $target == "test-compression" || \
 -                    $target == "test-system-keyspace-directory" || \
 -                    $target == "fqltool-test" || \
 -                    $target == "long-test" || \
 -                    $target == "stress-test" ]]; then
 -                name_arg="-Dtest.name=${class##*.}"
 -              else
 -                name_arg="-Dtest.name=$class"
 -              fi
 -
 -              # Prepare the -Dtest.methods argument, which is optional
 -              if [ $method == "" ]; then
 -                methods_arg=""
 -              else
 -                methods_arg="-Dtest.methods=$method"
 -              fi
 -
 -              for i in $(seq -w 1 $count); do
 -                echo "Running test $test, iteration $i of $count"
 -
 -                # run the test
 -                status="passes"
 -                if !( set -o pipefail && \
 -                      ant test-compression $name_arg $methods_arg -Dno-build-test=true | \
 -                      tee stdout.txt \
 -                    ); then
 -                  status="fails"
 -                  exit_code=1
 -                fi
 -
 -                # move the stdout output file
 -                dest=/tmp/results/repeated_utests/stdout/${status}/${i}
 -                mkdir -p $dest
 -                mv stdout.txt $dest/${test}.txt
 -
 -                # move the XML output files
 -                source=build/test/output
 -                dest=/tmp/results/repeated_utests/output/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # move the log files
 -                source=build/test/logs
 -                dest=/tmp/results/repeated_utests/logs/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # maybe stop iterations on test failure
 -                if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then
 -                  break
 -                fi
 -              done
 -          done
 -          (exit ${exit_code})
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
+     - store_test_results:
+         path: /tmp/results/repeated_utests/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
 -    - REPEATED_ANT_TEST_COUNT: 500
 -    - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 -    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 -  j8_cqlsh-dtests-py2-with-vnodes:
 -    docker:
 -    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
 -    resource_class: medium
 -    working_directory: ~/
 -    shell: /bin/bash -eo pipefail -l
 -    parallelism: 4
 -    steps:
 -    - attach_workspace:
 -        at: /home/cassandra
 -    - run:
 -        name: Clone Cassandra dtest Repository (via git)
 -        command: |
 -          git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
 -    - run:
 -        name: Configure virtualenv and python Dependencies
 -        command: |
 -          # note, this should be super quick as all dependencies should be pre-installed in the docker image
 -          # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
 -          # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
 -          # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
 -          source ~/env3.6/bin/activate
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
 -          pip3 uninstall -y cqlsh
 -          pip3 freeze
 -    - run:
 -        name: Determine Tests to Run (j8_with_vnodes)
 -        no_output_timeout: 5m
 -        command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j8_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip- [...]
 -    - run:
 -        name: Run dtests (j8_with_vnodes)
 -        no_output_timeout: 15m
 -        command: |
 -          echo "cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt"
 -          cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt
 -
 -          source ~/env3.6/bin/activate
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          if [ -n 'CQLSH_PYTHON=/usr/bin/python2.7' ]; then
 -            export CQLSH_PYTHON=/usr/bin/python2.7
 -          fi
 -
 -          java -version
 -          cd ~/cassandra-dtest
 -          mkdir -p /tmp/dtest
 -
 -          echo "env: $(env)"
 -          echo "** done env"
 -          mkdir -p /tmp/results/dtests
 -          # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
 -          export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt`
 -          set -o pipefail && cd ~/cassandra-dtest && pytest --use-vnodes --num-tokens=16 --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j8_with_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
 -    - store_test_results:
 -        path: /tmp/results
 -    - store_artifacts:
 -        path: /tmp/dtest
 -        destination: dtest_j8_with_vnodes
 -    - store_artifacts:
 -        path: ~/cassandra-dtest/logs
 -        destination: dtest_j8_with_vnodes_logs
 -    environment:
 -    - ANT_HOME: /usr/share/ant
 -    - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 -    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 -    - LANG: en_US.UTF-8
 -    - KEEP_TEST_DIR: true
 -    - DEFAULT_DIR: /home/cassandra/cassandra-dtest
 -    - PYTHONIOENCODING: utf-8
 -    - PYTHONUNBUFFERED: true
 -    - CASS_DRIVER_NO_EXTENSIONS: true
 -    - CASS_DRIVER_NO_CYTHON: true
 -    - CASSANDRA_SKIP_SYNC: true
 -    - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
 -    - DTEST_BRANCH: trunk
 -    - CCM_MAX_HEAP_SIZE: 1024M
 -    - CCM_HEAP_NEWSIZE: 256M
 -    - REPEATED_TESTS_STOP_ON_FAILURE: false
 -    - REPEATED_UTESTS: null
 -    - REPEATED_UTESTS_COUNT: 500
 -    - REPEATED_UTESTS_FQLTOOL: null
 -    - REPEATED_UTESTS_FQLTOOL_COUNT: 500
 -    - REPEATED_UTESTS_LONG: null
 -    - REPEATED_UTESTS_LONG_COUNT: 100
 -    - REPEATED_UTESTS_STRESS: null
 -    - REPEATED_UTESTS_STRESS_COUNT: 500
 -    - REPEATED_JVM_DTESTS: null
 -    - REPEATED_JVM_DTESTS_COUNT: 500
 -    - REPEATED_JVM_UPGRADE_DTESTS: null
 -    - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
 -    - REPEATED_DTESTS: null
 -    - REPEATED_DTESTS_COUNT: 500
 -    - REPEATED_UPGRADE_DTESTS: null
 -    - REPEATED_UPGRADE_DTESTS_COUNT: 25
 -    - REPEATED_ANT_TEST_TARGET: testsome
 -    - REPEATED_ANT_TEST_CLASS: null
 -    - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_dtests_vnode_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Log Environment Information
          command: |
-           if [ "${REPEATED_JVM_UPGRADE_DTEST_CLASS}" == "<nil>" ]; then
-             echo "Repeated utest class name hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_JVM_UPGRADE_DTEST_COUNT}" == "<nil>" ]; then
-             echo "Repeated utest count hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_JVM_UPGRADE_DTEST_COUNT}" -le 0 ]; then
-             echo "Repeated utest count is lesser or equals than zero, exiting without running any test"
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
+         name: Run repeated Python dtest
+         no_output_timeout: 15m
+         command: |
+           if [ "${REPEATED_DTESTS}" == "<nil>" ]; then
+             echo "Repeated dtest name hasn't been defined, exiting without running any test"
+           elif [ "${REPEATED_DTESTS_COUNT}" == "<nil>" ]; then
+             echo "Repeated dtest count hasn't been defined, exiting without running any test"
+           elif [ "${REPEATED_DTESTS_COUNT}" -le 0 ]; then
+             echo "Repeated dtest count is lesser or equals than zero, exiting without running any test"
            else
  
              # Calculate the number of test iterations to be run by the current parallel runner.
@@@ -265,15 -516,192 +329,102 @@@
              fi
            fi
      - store_test_results:
-         path: /tmp/results/repeated_utest/output
+         path: /tmp/results
      - store_artifacts:
-         path: /tmp/results/repeated_utest/stdout
+         path: /tmp/dtest
+         destination: dtest
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   utests_stress_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: |
 -          set -x
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          time mv ~/cassandra /tmp
 -          cd /tmp/cassandra
 -          if [ -d ~/dtest_jars ]; then
 -            cp ~/dtest_jars/dtest* /tmp/cassandra/build/
 -          fi
 -
 -          # Calculate the number of test iterations to be run by the current parallel runner.
 -          count=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))
 -          if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then
 -            count=$((count+1))
 -          fi
 -
 -          # Put manually specified tests and automatically detected tests together, removing duplicates
 -          tests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u)
 -          echo "Tests to be repeated: ${tests}"
 -
 -          # Run each test class as many times as requested.
 -          exit_code="$?"
 -          for test in $tests; do
 -
 -              # Split class and method names from the test name
 -              if [[ $test =~ "#" ]]; then
 -                class=${test%"#"*}
 -                method=${test#*"#"}
 -              else
 -                class=$test
 -                method=""
 -              fi
 -
 -              # Prepare the -Dtest.name argument.
 -              # It can be the fully qualified class name or the short class name, depending on the target.
 -              if [[ $target == "test" || \
 -                    $target == "test-cdc" || \
 -                    $target == "test-compression" || \
 -                    $target == "test-system-keyspace-directory" || \
 -                    $target == "fqltool-test" || \
 -                    $target == "long-test" || \
 -                    $target == "stress-test" ]]; then
 -                name_arg="-Dtest.name=${class##*.}"
 -              else
 -                name_arg="-Dtest.name=$class"
 -              fi
 -
 -              # Prepare the -Dtest.methods argument, which is optional
 -              if [ $method == "" ]; then
 -                methods_arg=""
 -              else
 -                methods_arg="-Dtest.methods=$method"
 -              fi
 -
 -              for i in $(seq -w 1 $count); do
 -                echo "Running test $test, iteration $i of $count"
 -
 -                # run the test
 -                status="passes"
 -                if !( set -o pipefail && \
 -                      ant stress-test-some $name_arg $methods_arg -Dno-build-test=true | \
 -                      tee stdout.txt \
 -                    ); then
 -                  status="fails"
 -                  exit_code=1
 -                fi
 -
 -                # move the stdout output file
 -                dest=/tmp/results/repeated_utests/stdout/${status}/${i}
 -                mkdir -p $dest
 -                mv stdout.txt $dest/${test}.txt
 -
 -                # move the XML output files
 -                source=build/test/output
 -                dest=/tmp/results/repeated_utests/output/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # move the log files
 -                source=build/test/logs
 -                dest=/tmp/results/repeated_utests/logs/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # maybe stop iterations on test failure
 -                if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then
 -                  break
 -                fi
 -              done
 -          done
 -          (exit ${exit_code})
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and a [...]
+     - store_test_results:
+         path: /tmp/results/repeated_utests/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/stdout
          destination: stdout
      - store_artifacts:
-         path: /tmp/results/repeated_utest/output
+         path: /tmp/results/repeated_utests/output
          destination: junitxml
      - store_artifacts:
-         path: /tmp/results/repeated_utest/logs
+         path: /tmp/results/repeated_utests/logs
          destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
@@@ -291,28 -719,32 +442,35 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 -  j11_unit_tests:
 +  j8_jvm_dtests_vnode:
      docker:
 -    - image: apache/cassandra-testing-ubuntu2004-java11:latest
 +    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
@@@ -401,28 -833,33 +559,35 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
 -    - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 -    - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 -    - CASSANDRA_USE_JDK11: true
 -  j8_cqlsh_dtests_py3:
 +    - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +  j11_unit_tests:
      docker:
 -    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
 +    - image: apache/cassandra-testing-ubuntu2004-java11:latest
      resource_class: medium
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
@@@ -431,130 -868,19 +596,137 @@@
      - attach_workspace:
          at: /home/cassandra
      - run:
 -        name: Clone Cassandra dtest Repository (via git)
 -        command: |
 -          git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
 -    - run:
 -        name: Configure virtualenv and python Dependencies
 +        name: Determine unit Tests to Run
          command: |
 -          # note, this should be super quick as all dependencies should be pre-installed in the docker image
 -          # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
 -          # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
 -          # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
 -          source ~/env3.6/bin/activate
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
 +          # reminder: this code (along with all the steps) is independently executed on every circle container
 +          # so the goal here is to get the circleci script to return the tests *this* container will run
 +          # which we do via the `circleci` cli tool.
 +
 +          rm -fr ~/cassandra-dtest/upgrade_tests
 +          echo "***java tests***"
 +
 +          # get all of our unit test filenames
 +          set -eo pipefail && circleci tests glob "$HOME/cassandra/test/unit/**/*.java" > /tmp/all_java_unit_tests.txt
 +
 +          # split up the unit tests into groups based on the number of containers we have
 +          set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt
 +          set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/unit/;;g" | grep "Test\.java$"  > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
 +          echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt"
 +          cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
 +        no_output_timeout: 15m
 +    - run:
 +        name: Log Environment Information
 +        command: |
 +          echo '*** id ***'
 +          id
 +          echo '*** cat /proc/cpuinfo ***'
 +          cat /proc/cpuinfo
 +          echo '*** free -m ***'
 +          free -m
 +          echo '*** df -m ***'
 +          df -m
 +          echo '*** ifconfig -a ***'
 +          ifconfig -a
 +          echo '*** uname -a ***'
 +          uname -a
 +          echo '*** mount ***'
 +          mount
 +          echo '*** env ***'
 +          env
 +          echo '*** java ***'
 +          which java
 +          java -version
 +    - run:
 +        name: Run Unit Tests (testclasslist)
 +        command: |
 +          set -x
 +          export PATH=$JAVA_HOME/bin:$PATH
 +          time mv ~/cassandra /tmp
 +          cd /tmp/cassandra
 +          if [ -d ~/dtest_jars ]; then
 +            cp ~/dtest_jars/dtest* /tmp/cassandra/build/
 +          fi
 +          test_timeout=$(grep 'name="test.unit.timeout"' build.xml | awk -F'"' '{print $4}' || true)
 +          if [ -z "$test_timeout" ]; then
 +            test_timeout=$(grep 'name="test.timeout"' build.xml | awk -F'"' '{print $4}')
 +          fi
 +          ant testclasslist   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
 +        no_output_timeout: 15m
 +    - store_test_results:
 +        path: /tmp/cassandra/build/test/output/
 +    - store_artifacts:
 +        path: /tmp/cassandra/build/test/output
 +        destination: junitxml
 +    - store_artifacts:
 +        path: /tmp/cassandra/build/test/logs
 +        destination: logs
 +    environment:
 +    - ANT_HOME: /usr/share/ant
 +    - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - LANG: en_US.UTF-8
 +    - KEEP_TEST_DIR: true
 +    - DEFAULT_DIR: /home/cassandra/cassandra-dtest
 +    - PYTHONIOENCODING: utf-8
 +    - PYTHONUNBUFFERED: true
 +    - CASS_DRIVER_NO_EXTENSIONS: true
 +    - CASS_DRIVER_NO_CYTHON: true
 +    - CASSANDRA_SKIP_SYNC: true
 +    - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
 +    - DTEST_BRANCH: trunk
 +    - CCM_MAX_HEAP_SIZE: 1024M
 +    - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
++    - REPEATED_TESTS_STOP_ON_FAILURE: false
++    - REPEATED_UTESTS: null
++    - REPEATED_UTESTS_COUNT: 500
++    - REPEATED_UTESTS_FQLTOOL: null
++    - REPEATED_UTESTS_FQLTOOL_COUNT: 500
++    - REPEATED_UTESTS_LONG: null
++    - REPEATED_UTESTS_LONG_COUNT: 100
++    - REPEATED_UTESTS_STRESS: null
++    - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
++    - REPEATED_JVM_DTESTS: null
++    - REPEATED_JVM_DTESTS_COUNT: 500
++    - REPEATED_JVM_UPGRADE_DTESTS: null
++    - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
++    - REPEATED_DTESTS: null
++    - REPEATED_DTESTS_COUNT: 500
++    - REPEATED_UPGRADE_DTESTS: null
++    - REPEATED_UPGRADE_DTESTS_COUNT: 25
++    - REPEATED_ANT_TEST_TARGET: testsome
++    - REPEATED_ANT_TEST_CLASS: null
++    - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
++    - REPEATED_ANT_TEST_COUNT: 500
 +    - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - CASSANDRA_USE_JDK11: true
-   repeated_upgrade_dtest:
++  j8_cqlsh_dtests_py3:
 +    docker:
 +    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
 +    resource_class: medium
 +    working_directory: ~/
 +    shell: /bin/bash -eo pipefail -l
 +    parallelism: 4
 +    steps:
 +    - attach_workspace:
 +        at: /home/cassandra
 +    - run:
 +        name: Clone Cassandra dtest Repository (via git)
 +        command: |
 +          git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
 +    - run:
 +        name: Configure virtualenv and python Dependencies
 +        command: |
 +          # note, this should be super quick as all dependencies should be pre-installed in the docker image
 +          # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
 +          # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
 +          # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
 +          source ~/env3.6/bin/activate
 +          export PATH=$JAVA_HOME/bin:$PATH
 +          pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
            pip3 uninstall -y cqlsh
            pip3 freeze
      - run:
@@@ -635,28 -934,32 +780,35 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_cqlsh-dtests-py38-no-vnodes:
+   j11_cqlsh_dtests_py38:
      docker:
-     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
      resource_class: medium
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
@@@ -731,26 -1034,31 +883,34 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j11_cqlsh-dtests-py3-with-vnodes:
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j11_repeated_ant_test:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11:latest
      resource_class: medium
@@@ -758,6 -1066,190 +918,200 @@@
      shell: /bin/bash -eo pipefail -l
      parallelism: 4
      steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Run repeated JUnit test
+         no_output_timeout: 15m
+         command: |
+           if [ "${REPEATED_ANT_TEST_CLASS}" == "<nil>" ]; then
+             echo "Repeated utest class name hasn't been defined, exiting without running any test"
+           elif [ "${REPEATED_ANT_TEST_COUNT}" == "<nil>" ]; then
+             echo "Repeated utest count hasn't been defined, exiting without running any test"
+           elif [ "${REPEATED_ANT_TEST_COUNT}" -le 0 ]; then
+             echo "Repeated utest count is lesser or equals than zero, exiting without running any test"
+           else
+ 
+             # Calculate the number of test iterations to be run by the current parallel runner.
+             # Since we are running the same test multiple times there is no need to use `circleci tests split`.
+             count=$((${REPEATED_ANT_TEST_COUNT} / CIRCLE_NODE_TOTAL))
+             if (($CIRCLE_NODE_INDEX < (${REPEATED_ANT_TEST_COUNT} % CIRCLE_NODE_TOTAL))); then
+               count=$((count+1))
+             fi
+ 
+             if (($count <= 0)); then
+               echo "No tests to run in this runner"
+             else
+               echo "Running ${REPEATED_ANT_TEST_TARGET} ${REPEATED_ANT_TEST_CLASS} ${REPEATED_ANT_TEST_METHODS} ${REPEATED_ANT_TEST_COUNT} times"
+ 
+               set -x
+               export PATH=$JAVA_HOME/bin:$PATH
+               time mv ~/cassandra /tmp
+               cd /tmp/cassandra
+               if [ -d ~/dtest_jars ]; then
+                 cp ~/dtest_jars/dtest* /tmp/cassandra/build/
+               fi
+ 
+               target=${REPEATED_ANT_TEST_TARGET}
+               class_path=${REPEATED_ANT_TEST_CLASS}
+               class_name="${class_path##*.}"
+ 
+               # Prepare the -Dtest.name argument.
+               # It can be the fully qualified class name or the short class name, depending on the target.
+               if [[ $target == "test" || \
+                     $target == "test-cdc" || \
+                     $target == "test-compression" || \
+                     $target == "test-system-keyspace-directory" || \
+                     $target == "fqltool-test" || \
+                     $target == "long-test" || \
 -                    $target == "stress-test" ]]; then
++                    $target == "stress-test" || \
++                    $target == "test-simulator-dtest" ]]; then
+                 name="-Dtest.name=$class_name"
+               else
+                 name="-Dtest.name=$class_path"
+               fi
+ 
+               # Prepare the -Dtest.methods argument, which is optional
+               if [ "${REPEATED_ANT_TEST_METHODS}" == "<nil>" ]; then
+                 methods=""
+               else
+                 methods="-Dtest.methods=${REPEATED_ANT_TEST_METHODS}"
+               fi
+ 
++              # Prepare the JVM dtests vnodes argument, which is optional
++              vnodes_args=""
++              if ${REPEATED_ANT_TEST_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="$?"
+               for i in $(seq -w 1 $count); do
+ 
+                 echo "Running test iteration $i of $count"
+ 
+                 # 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
+ 
+                 # move the stdout output file
+                 dest=/tmp/results/repeated_utest/stdout/${status}/${i}
+                 mkdir -p $dest
+                 mv stdout.txt $dest/${REPEATED_ANT_TEST_TARGET}-${REPEATED_ANT_TEST_CLASS}.txt
+ 
+                 # move the XML output files
+                 source=build/test/output
+                 dest=/tmp/results/repeated_utest/output/${status}/${i}
+                 mkdir -p $dest
+                 if [[ -d $source && -n "$(ls $source)" ]]; then
+                   mv $source/* $dest/
+                 fi
+ 
+                 # move the log files
+                 source=build/test/logs
+                 dest=/tmp/results/repeated_utest/logs/${status}/${i}
+                 mkdir -p $dest
+                 if [[ -d $source && -n "$(ls $source)" ]]; then
+                   mv $source/* $dest/
+                 fi
+ 
+                 # maybe stop iterations on test failure
+                 if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then
+                   break
+                 fi
+               done
+ 
+               (exit ${exit_code})
+             fi
+           fi
+     - store_test_results:
+         path: /tmp/results/repeated_utest/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utest/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utest/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utest/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j8_cqlsh_dtests_py3_vnode:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
      - attach_workspace:
          at: /home/cassandra
      - run:
@@@ -827,27 -1319,30 +1181,33 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - CASSANDRA_USE_JDK11: true
-   j11_cqlsh-dtests-py3-no-vnodes:
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_cqlsh_dtests_py3:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11:latest
      resource_class: medium
@@@ -924,154 -1419,42 +1284,64 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
      - CASSANDRA_USE_JDK11: true
-   j11_cqlsh-dtests-py38-with-vnodes:
 -  utests_long_repeat:
++  j11_jvm_dtests_vnode:
      docker:
 -    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
 +    - image: apache/cassandra-testing-ubuntu2004-java11:latest
      resource_class: medium
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
--    parallelism: 4
++    parallelism: 1
      steps:
      - attach_workspace:
          at: /home/cassandra
 +    - run:
-         name: Clone Cassandra dtest Repository (via git)
++        name: Determine distributed Tests to Run
 +        command: |
-           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
++          # reminder: this code (along with all the steps) is independently executed on every circle container
++          # so the goal here is to get the circleci script to return the tests *this* container will run
++          # which we do via the `circleci` cli tool.
++
++          rm -fr ~/cassandra-dtest/upgrade_tests
++          echo "***java tests***"
++
++          # get all of our unit test filenames
++          set -eo pipefail && circleci tests glob "$HOME/cassandra/test/distributed/**/*.java" > /tmp/all_java_unit_tests.txt
++
++          # split up the unit tests into groups based on the number of containers we have
++          set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt
++          set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/distributed/;;g" | grep "Test\.java$" | grep -v upgrade > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
++          echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt"
++          cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
++        no_output_timeout: 15m
      - run:
-         name: Configure virtualenv and python Dependencies
-         command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.8/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
-         name: Determine Tests to Run (j11_with_vnodes)
-         no_output_timeout: 5m
-         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.8/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j11_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip [...]
-     - run:
-         name: Run dtests (j11_with_vnodes)
-         no_output_timeout: 15m
-         command: |
-           echo "cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt"
-           cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt
- 
-           source ~/env3.8/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.8' ]; then
-             export CQLSH_PYTHON=/usr/bin/python3.8
-           fi
- 
-           java -version
-           cd ~/cassandra-dtest
-           mkdir -p /tmp/dtest
- 
-           echo "env: $(env)"
-           echo "** done env"
-           mkdir -p /tmp/results/dtests
-           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt`
-           set -o pipefail && cd ~/cassandra-dtest && pytest --use-vnodes --num-tokens=16 --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_with_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
-     - store_test_results:
-         path: /tmp/results
-     - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest_j11_with_vnodes
-     - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_j11_with_vnodes_logs
-     environment:
-     - ANT_HOME: /usr/share/ant
-     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-     - LANG: en_US.UTF-8
-     - KEEP_TEST_DIR: true
-     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
-     - PYTHONIOENCODING: utf-8
-     - PYTHONUNBUFFERED: true
-     - CASS_DRIVER_NO_EXTENSIONS: true
-     - CASS_DRIVER_NO_CYTHON: true
-     - CASSANDRA_SKIP_SYNC: true
-     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
-     - DTEST_BRANCH: trunk
-     - CCM_MAX_HEAP_SIZE: 1024M
-     - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - CASSANDRA_USE_JDK11: true
-   j11_jvm_dtests_vnode:
-     docker:
-     - image: apache/cassandra-testing-ubuntu2004-java11:latest
-     resource_class: medium
-     working_directory: ~/
-     shell: /bin/bash -eo pipefail -l
-     parallelism: 1
-     steps:
-     - attach_workspace:
-         at: /home/cassandra
-     - run:
-         name: Determine distributed Tests to Run
-         command: |
-           # reminder: this code (along with all the steps) is independently executed on every circle container
-           # so the goal here is to get the circleci script to return the tests *this* container will run
-           # which we do via the `circleci` cli tool.
- 
-           rm -fr ~/cassandra-dtest/upgrade_tests
-           echo "***java tests***"
- 
-           # get all of our unit test filenames
-           set -eo pipefail && circleci tests glob "$HOME/cassandra/test/distributed/**/*.java" > /tmp/all_java_unit_tests.txt
- 
-           # split up the unit tests into groups based on the number of containers we have
-           set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt
-           set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/distributed/;;g" | grep "Test\.java$" | grep -v upgrade > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
-           echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt"
-           cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
-         no_output_timeout: 15m
-     - run:
-         name: Log Environment Information
+         name: Log Environment Information
          command: |
            echo '*** id ***'
            id
@@@ -1132,27 -1599,30 +1402,34 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
 -    - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 -    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 -  j8_unit_tests_repeat:
 +    - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - CASSANDRA_USE_JDK11: true
 +  j8_simulator_dtests:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
@@@ -1213,112 -1665,103 +1490,105 @@@
            if [ -d ~/dtest_jars ]; then
              cp ~/dtest_jars/dtest* /tmp/cassandra/build/
            fi
 -
 -          # Calculate the number of test iterations to be run by the current parallel runner.
 -          count=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))
 -          if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then
 -            count=$((count+1))
 -          fi
 -
 -          # Put manually specified tests and automatically detected tests together, removing duplicates
 -          tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u)
 -          echo "Tests to be repeated: ${tests}"
 -
 -          # Run each test class as many times as requested.
 -          exit_code="$?"
 -          for test in $tests; do
 -
 -              # Split class and method names from the test name
 -              if [[ $test =~ "#" ]]; then
 -                class=${test%"#"*}
 -                method=${test#*"#"}
 -              else
 -                class=$test
 -                method=""
 -              fi
 -
 -              # Prepare the -Dtest.name argument.
 -              # It can be the fully qualified class name or the short class name, depending on the target.
 -              if [[ $target == "test" || \
 -                    $target == "test-cdc" || \
 -                    $target == "test-compression" || \
 -                    $target == "test-system-keyspace-directory" || \
 -                    $target == "fqltool-test" || \
 -                    $target == "long-test" || \
 -                    $target == "stress-test" ]]; then
 -                name_arg="-Dtest.name=${class##*.}"
 -              else
 -                name_arg="-Dtest.name=$class"
 -              fi
 -
 -              # Prepare the -Dtest.methods argument, which is optional
 -              if [ $method == "" ]; then
 -                methods_arg=""
 -              else
 -                methods_arg="-Dtest.methods=$method"
 -              fi
 -
 -              for i in $(seq -w 1 $count); do
 -                echo "Running test $test, iteration $i of $count"
 -
 -                # run the test
 -                status="passes"
 -                if !( set -o pipefail && \
 -                      ant testsome $name_arg $methods_arg -Dno-build-test=true | \
 -                      tee stdout.txt \
 -                    ); then
 -                  status="fails"
 -                  exit_code=1
 -                fi
 -
 -                # move the stdout output file
 -                dest=/tmp/results/repeated_utests/stdout/${status}/${i}
 -                mkdir -p $dest
 -                mv stdout.txt $dest/${test}.txt
 -
 -                # move the XML output files
 -                source=build/test/output
 -                dest=/tmp/results/repeated_utests/output/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # move the log files
 -                source=build/test/logs
 -                dest=/tmp/results/repeated_utests/logs/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # maybe stop iterations on test failure
 -                if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then
 -                  break
 -                fi
 -              done
 -          done
 -          (exit ${exit_code})
 +          ant test-simulator-dtest
 +        no_output_timeout: 30m
 +    - store_test_results:
 +        path: /tmp/cassandra/build/test/output/
 +    - store_artifacts:
 +        path: /tmp/cassandra/build/test/output
 +        destination: junitxml
 +    - store_artifacts:
 +        path: /tmp/cassandra/build/test/logs
 +        destination: logs
 +    environment:
 +    - ANT_HOME: /usr/share/ant
 +    - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - LANG: en_US.UTF-8
 +    - KEEP_TEST_DIR: true
 +    - DEFAULT_DIR: /home/cassandra/cassandra-dtest
 +    - PYTHONIOENCODING: utf-8
 +    - PYTHONUNBUFFERED: true
 +    - CASS_DRIVER_NO_EXTENSIONS: true
 +    - CASS_DRIVER_NO_CYTHON: true
 +    - CASSANDRA_SKIP_SYNC: true
 +    - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
 +    - DTEST_BRANCH: trunk
 +    - CCM_MAX_HEAP_SIZE: 1024M
 +    - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
++    - REPEATED_TESTS_STOP_ON_FAILURE: false
++    - REPEATED_UTESTS: null
++    - REPEATED_UTESTS_COUNT: 500
++    - REPEATED_UTESTS_FQLTOOL: null
++    - REPEATED_UTESTS_FQLTOOL_COUNT: 500
++    - REPEATED_UTESTS_LONG: null
++    - REPEATED_UTESTS_LONG_COUNT: 100
++    - REPEATED_UTESTS_STRESS: null
++    - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
++    - REPEATED_JVM_DTESTS: null
++    - REPEATED_JVM_DTESTS_COUNT: 500
++    - REPEATED_JVM_UPGRADE_DTESTS: null
++    - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
++    - REPEATED_DTESTS: null
++    - REPEATED_DTESTS_COUNT: 500
++    - REPEATED_UPGRADE_DTESTS: null
++    - REPEATED_UPGRADE_DTESTS_COUNT: 25
++    - REPEATED_ANT_TEST_TARGET: testsome
++    - REPEATED_ANT_TEST_CLASS: null
++    - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
++    - REPEATED_ANT_TEST_COUNT: 500
 +    - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_cqlsh-dtests-py3-with-vnodes:
++  utests_long_repeat:
 +    docker:
 +    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
 +    resource_class: medium
 +    working_directory: ~/
 +    shell: /bin/bash -eo pipefail -l
 +    parallelism: 4
 +    steps:
 +    - attach_workspace:
 +        at: /home/cassandra
 +    - run:
-         name: Clone Cassandra dtest Repository (via git)
-         command: |
-           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
-     - run:
-         name: Configure virtualenv and python Dependencies
++        name: Log Environment Information
 +        command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
-         name: Determine Tests to Run (j8_with_vnodes)
-         no_output_timeout: 5m
-         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j8_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip- [...]
++          echo '*** id ***'
++          id
++          echo '*** cat /proc/cpuinfo ***'
++          cat /proc/cpuinfo
++          echo '*** free -m ***'
++          free -m
++          echo '*** df -m ***'
++          df -m
++          echo '*** ifconfig -a ***'
++          ifconfig -a
++          echo '*** uname -a ***'
++          uname -a
++          echo '*** mount ***'
++          mount
++          echo '*** env ***'
++          env
++          echo '*** java ***'
++          which java
++          java -version
 +    - run:
-         name: Run dtests (j8_with_vnodes)
++        name: Repeatedly run new or modifed JUnit tests
 +        no_output_timeout: 15m
-         command: |
-           echo "cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt"
-           cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt
- 
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.6' ]; then
-             export CQLSH_PYTHON=/usr/bin/python3.6
-           fi
- 
-           java -version
-           cd ~/cassandra-dtest
-           mkdir -p /tmp/dtest
- 
-           echo "env: $(env)"
-           echo "** done env"
-           mkdir -p /tmp/results/dtests
-           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt`
-           set -o pipefail && cd ~/cassandra-dtest && pytest --use-vnodes --num-tokens=16 --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j8_with_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and autom [...]
      - store_test_results:
-         path: /tmp/results
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest_j8_with_vnodes
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
      - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_j8_with_vnodes_logs
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
      - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
@@@ -1335,28 -1778,32 +1605,35 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j11_repeated_dtest:
 -  j8_cqlsh-dtests-py2-no-vnodes:
++  j8_unit_tests_repeat:
      docker:
-     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
@@@ -1365,105 -1812,56 +1642,42 @@@
      - attach_workspace:
          at: /home/cassandra
      - run:
 -        name: Clone Cassandra dtest Repository (via git)
 -        command: |
 -          git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
 -    - run:
 -        name: Configure virtualenv and python Dependencies
 +        name: Log Environment Information
          command: |
 -          # note, this should be super quick as all dependencies should be pre-installed in the docker image
 -          # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
 -          # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
 -          # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
 -          source ~/env3.6/bin/activate
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
 -          pip3 uninstall -y cqlsh
 -          pip3 freeze
 -    - run:
 -        name: Determine Tests to Run (j8_without_vnodes)
 -        no_output_timeout: 5m
 -        command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j8_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --skip-resource-i [...]
 +          echo '*** id ***'
 +          id
 +          echo '*** cat /proc/cpuinfo ***'
 +          cat /proc/cpuinfo
 +          echo '*** free -m ***'
 +          free -m
 +          echo '*** df -m ***'
 +          df -m
 +          echo '*** ifconfig -a ***'
 +          ifconfig -a
 +          echo '*** uname -a ***'
 +          uname -a
 +          echo '*** mount ***'
 +          mount
 +          echo '*** env ***'
 +          env
 +          echo '*** java ***'
 +          which java
 +          java -version
      - run:
-         name: Clone Cassandra dtest Repository (via git)
-         command: |
-           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
-     - run:
-         name: Configure virtualenv and python Dependencies
-         command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
-         name: Run repeated Python dtest
 -        name: Run dtests (j8_without_vnodes)
++        name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
--        command: |
-           if [ "${REPEATED_DTEST_NAME}" == "<nil>" ]; then
-             echo "Repeated dtest name hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_DTEST_COUNT}" == "<nil>" ]; then
-             echo "Repeated dtest count hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_DTEST_COUNT}" -le 0 ]; then
-             echo "Repeated dtest count is lesser or equals than zero, exiting without running any test"
-           else
- 
-             # Calculate the number of test iterations to be run by the current parallel runner.
-             # Since we are running the same test multiple times there is no need to use `circleci tests split`.
-             count=$((${REPEATED_DTEST_COUNT} / CIRCLE_NODE_TOTAL))
-             if (($CIRCLE_NODE_INDEX < (${REPEATED_DTEST_COUNT} % CIRCLE_NODE_TOTAL))); then
-               count=$((count+1))
-             fi
- 
-             if (($count <= 0)); then
-               echo "No tests to run in this runner"
-             else
-               echo "Running ${REPEATED_DTEST_NAME} $count times"
- 
-               source ~/env3.6/bin/activate
-               export PATH=$JAVA_HOME/bin:$PATH
- 
-               java -version
-               cd ~/cassandra-dtest
-               mkdir -p /tmp/dtest
- 
-               echo "env: $(env)"
-               echo "** done env"
-               mkdir -p /tmp/results/dtests
- 
-               stop_on_failure_arg=""
-               if ${REPEATED_DTEST_STOP_ON_FAILURE}; then
-                 stop_on_failure_arg="-x"
-               fi
 -          echo "cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt"
 -          cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt
--
-               vnodes_args=""
-               if ${REPEATED_DTEST_VNODES}; then
-                 vnodes_args="--use-vnodes --num-tokens=16"
-               fi
 -          source ~/env3.6/bin/activate
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          if [ -n 'CQLSH_PYTHON=/usr/bin/python2.7' ]; then
 -            export CQLSH_PYTHON=/usr/bin/python2.7
 -          fi
--
-               upgrade_arg=""
-               if false; then
-                 upgrade_arg="--execute-upgrade-tests"
-               fi
 -          java -version
 -          cd ~/cassandra-dtest
 -          mkdir -p /tmp/dtest
--
-               # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-               set -o pipefail && cd ~/cassandra-dtest && pytest $vnodes_args --count=$count $stop_on_failure_arg $upgrade_arg --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir ${REPEATED_DTEST_NAME} | tee /tmp/dtest/stdout.txt
-             fi
-           fi
 -          echo "env: $(env)"
 -          echo "** done env"
 -          mkdir -p /tmp/results/dtests
 -          # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
 -          export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt`
 -          set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j8_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
      - store_test_results:
--        path: /tmp/results
++        path: /tmp/results/repeated_utests/output
      - store_artifacts:
--        path: /tmp/dtest
-         destination: dtest
 -        destination: dtest_j8_without_vnodes
++        path: /tmp/results/repeated_utests/stdout
++        destination: stdout
      - store_artifacts:
--        path: ~/cassandra-dtest/logs
-         destination: dtest_logs
 -        destination: dtest_j8_without_vnodes_logs
++        path: /tmp/results/repeated_utests/output
++        destination: junitxml
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/logs
++        destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
      - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
@@@ -1480,27 -1878,30 +1694,33 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - CASSANDRA_USE_JDK11: true
-   j8_repeated_dtest:
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_upgrade_dtests_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
@@@ -1604,28 -2007,133 +1826,35 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j11_dtests-with-vnodes:
 -  j11_cqlsh-dtests-py2-with-vnodes:
 -    docker:
 -    - image: apache/cassandra-testing-ubuntu2004-java11:latest
 -    resource_class: medium
 -    working_directory: ~/
 -    shell: /bin/bash -eo pipefail -l
 -    parallelism: 4
 -    steps:
 -    - attach_workspace:
 -        at: /home/cassandra
 -    - run:
 -        name: Clone Cassandra dtest Repository (via git)
 -        command: |
 -          git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
 -    - run:
 -        name: Configure virtualenv and python Dependencies
 -        command: |
 -          # note, this should be super quick as all dependencies should be pre-installed in the docker image
 -          # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
 -          # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
 -          # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
 -          source ~/env3.6/bin/activate
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
 -          pip3 uninstall -y cqlsh
 -          pip3 freeze
 -    - run:
 -        name: Determine Tests to Run (j11_with_vnodes)
 -        no_output_timeout: 5m
 -        command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j11_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip [...]
 -    - run:
 -        name: Run dtests (j11_with_vnodes)
 -        no_output_timeout: 15m
 -        command: |
 -          echo "cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt"
 -          cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt
 -
 -          source ~/env3.6/bin/activate
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          if [ -n 'CQLSH_PYTHON=/usr/bin/python2.7' ]; then
 -            export CQLSH_PYTHON=/usr/bin/python2.7
 -          fi
 -
 -          java -version
 -          cd ~/cassandra-dtest
 -          mkdir -p /tmp/dtest
 -
 -          echo "env: $(env)"
 -          echo "** done env"
 -          mkdir -p /tmp/results/dtests
 -          # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
 -          export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt`
 -          set -o pipefail && cd ~/cassandra-dtest && pytest --use-vnodes --num-tokens=16 --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_with_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
 -    - store_test_results:
 -        path: /tmp/results
 -    - store_artifacts:
 -        path: /tmp/dtest
 -        destination: dtest_j11_with_vnodes
 -    - store_artifacts:
 -        path: ~/cassandra-dtest/logs
 -        destination: dtest_j11_with_vnodes_logs
 -    environment:
 -    - ANT_HOME: /usr/share/ant
 -    - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 -    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 -    - LANG: en_US.UTF-8
 -    - KEEP_TEST_DIR: true
 -    - DEFAULT_DIR: /home/cassandra/cassandra-dtest
 -    - PYTHONIOENCODING: utf-8
 -    - PYTHONUNBUFFERED: true
 -    - CASS_DRIVER_NO_EXTENSIONS: true
 -    - CASS_DRIVER_NO_CYTHON: true
 -    - CASSANDRA_SKIP_SYNC: true
 -    - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
 -    - DTEST_BRANCH: trunk
 -    - CCM_MAX_HEAP_SIZE: 1024M
 -    - CCM_HEAP_NEWSIZE: 256M
 -    - REPEATED_TESTS_STOP_ON_FAILURE: false
 -    - REPEATED_UTESTS: null
 -    - REPEATED_UTESTS_COUNT: 500
 -    - REPEATED_UTESTS_FQLTOOL: null
 -    - REPEATED_UTESTS_FQLTOOL_COUNT: 500
 -    - REPEATED_UTESTS_LONG: null
 -    - REPEATED_UTESTS_LONG_COUNT: 100
 -    - REPEATED_UTESTS_STRESS: null
 -    - REPEATED_UTESTS_STRESS_COUNT: 500
 -    - REPEATED_JVM_DTESTS: null
 -    - REPEATED_JVM_DTESTS_COUNT: 500
 -    - REPEATED_JVM_UPGRADE_DTESTS: null
 -    - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
 -    - REPEATED_DTESTS: null
 -    - REPEATED_DTESTS_COUNT: 500
 -    - REPEATED_UPGRADE_DTESTS: null
 -    - REPEATED_UPGRADE_DTESTS_COUNT: 25
 -    - REPEATED_ANT_TEST_TARGET: testsome
 -    - REPEATED_ANT_TEST_CLASS: null
 -    - REPEATED_ANT_TEST_METHODS: null
 -    - REPEATED_ANT_TEST_COUNT: 500
 -    - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 -    - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 -    - CASSANDRA_USE_JDK11: true
+   utests_system_keyspace_directory_repeat:
      docker:
-     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
@@@ -1636,57 -2144,1817 +1865,1670 @@@
      - run:
          name: Log Environment Information
          command: |
 -          echo '*** id ***'
 -          id
 -          echo '*** cat /proc/cpuinfo ***'
 -          cat /proc/cpuinfo
 -          echo '*** free -m ***'
 -          free -m
 -          echo '*** df -m ***'
 -          df -m
 -          echo '*** ifconfig -a ***'
 -          ifconfig -a
 -          echo '*** uname -a ***'
 -          uname -a
 -          echo '*** mount ***'
 -          mount
 -          echo '*** env ***'
 -          env
 -          echo '*** java ***'
 -          which java
 -          java -version
 -    - run:
 -        name: Repeatedly run new or modifed JUnit tests
 -        no_output_timeout: 15m
 -        command: |
 -          set -x
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          time mv ~/cassandra /tmp
 -          cd /tmp/cassandra
 -          if [ -d ~/dtest_jars ]; then
 -            cp ~/dtest_jars/dtest* /tmp/cassandra/build/
 -          fi
 -
 -          # Calculate the number of test iterations to be run by the current parallel runner.
 -          count=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))
 -          if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then
 -            count=$((count+1))
 -          fi
 -
 -          # Put manually specified tests and automatically detected tests together, removing duplicates
 -          tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u)
 -          echo "Tests to be repeated: ${tests}"
 -
 -          # Run each test class as many times as requested.
 -          exit_code="$?"
 -          for test in $tests; do
 -
 -              # Split class and method names from the test name
 -              if [[ $test =~ "#" ]]; then
 -                class=${test%"#"*}
 -                method=${test#*"#"}
 -              else
 -                class=$test
 -                method=""
 -              fi
 -
 -              # Prepare the -Dtest.name argument.
 -              # It can be the fully qualified class name or the short class name, depending on the target.
 -              if [[ $target == "test" || \
 -                    $target == "test-cdc" || \
 -                    $target == "test-compression" || \
 -                    $target == "test-system-keyspace-directory" || \
 -                    $target == "fqltool-test" || \
 -                    $target == "long-test" || \
 -                    $target == "stress-test" ]]; then
 -                name_arg="-Dtest.name=${class##*.}"
 -              else
 -                name_arg="-Dtest.name=$class"
 -              fi
 -
 -              # Prepare the -Dtest.methods argument, which is optional
 -              if [ $method == "" ]; then
 -                methods_arg=""
 -              else
 -                methods_arg="-Dtest.methods=$method"
 -              fi
 -
 -              for i in $(seq -w 1 $count); do
 -                echo "Running test $test, iteration $i of $count"
 -
 -                # run the test
 -                status="passes"
 -                if !( set -o pipefail && \
 -                      ant test-system-keyspace-directory $name_arg $methods_arg -Dno-build-test=true | \
 -                      tee stdout.txt \
 -                    ); then
 -                  status="fails"
 -                  exit_code=1
 -                fi
 -
 -                # move the stdout output file
 -                dest=/tmp/results/repeated_utests/stdout/${status}/${i}
 -                mkdir -p $dest
 -                mv stdout.txt $dest/${test}.txt
 -
 -                # move the XML output files
 -                source=build/test/output
 -                dest=/tmp/results/repeated_utests/output/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # move the log files
 -                source=build/test/logs
 -                dest=/tmp/results/repeated_utests/logs/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # maybe stop iterations on test failure
 -                if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then
 -                  break
 -                fi
 -              done
 -          done
 -          (exit ${exit_code})
 +          echo '*** id ***'
 +          id
 +          echo '*** cat /proc/cpuinfo ***'
 +          cat /proc/cpuinfo
 +          echo '*** free -m ***'
 +          free -m
 +          echo '*** df -m ***'
 +          df -m
 +          echo '*** ifconfig -a ***'
 +          ifconfig -a
 +          echo '*** uname -a ***'
 +          uname -a
 +          echo '*** mount ***'
 +          mount
 +          echo '*** env ***'
 +          env
 +          echo '*** java ***'
 +          which java
 +          java -version
 +    - run:
-         name: Clone Cassandra dtest Repository (via git)
-         command: |
-           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
-     - run:
-         name: Configure virtualenv and python Dependencies
-         command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
++        name: Repeatedly run new or modifed JUnit tests
++        no_output_timeout: 15m
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
+     - store_test_results:
+         path: /tmp/results/repeated_utests/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_dtests_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
      - run:
-         name: Determine Tests to Run (j11_with_vnodes)
-         no_output_timeout: 5m
-         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j11_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip [...]
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
      - run:
-         name: Run dtests (j11_with_vnodes)
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
+         name: Run repeated Python dtest
          no_output_timeout: 15m
-         command: "echo \"cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt\"\ncat /tmp/split_dtest_tests_j11_with_vnodes_final.txt\n\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\nif [ -n '' ]; then\n  export \nfi\n\njava -version\ncd ~/cassandra-dtest\nmkdir -p /tmp/dtest\n\necho \"env: $(env)\"\necho \"** done env\"\nmkdir -p /tmp/results/dtests\n# we need the \"set -o pipefail\" here so that the exit code that circleci will actually use is from pytest and not the [...]
+         command: |
+           if [ "${REPEATED_DTESTS}" == "<nil>" ]; then
+             echo "Repeated dtest name hasn't been defined, exiting without running any test"
+           elif [ "${REPEATED_DTESTS_COUNT}" == "<nil>" ]; then
+             echo "Repeated dtest count hasn't been defined, exiting without running any test"
+           elif [ "${REPEATED_DTESTS_COUNT}" -le 0 ]; then
+             echo "Repeated dtest count is lesser or equals than zero, exiting without running any test"
+           else
+ 
+             # Calculate the number of test iterations to be run by the current parallel runner.
+             # Since we are running the same test multiple times there is no need to use `circleci tests split`.
+             count=$((${REPEATED_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))
+             if (($CIRCLE_NODE_INDEX < (${REPEATED_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then
+               count=$((count+1))
+             fi
+ 
+             if (($count <= 0)); then
+               echo "No tests to run in this runner"
+             else
+               echo "Running ${REPEATED_DTESTS} $count times"
+ 
+               source ~/env3.6/bin/activate
+               export PATH=$JAVA_HOME/bin:$PATH
+ 
+               java -version
+               cd ~/cassandra-dtest
+               mkdir -p /tmp/dtest
+ 
+               echo "env: $(env)"
+               echo "** done env"
+               mkdir -p /tmp/results/dtests
+ 
+               tests_arg=$(echo ${REPEATED_DTESTS} | sed -e "s/,/ /g")
+ 
+               stop_on_failure_arg=""
+               if ${REPEATED_TESTS_STOP_ON_FAILURE}; then
+                 stop_on_failure_arg="-x"
+               fi
+ 
+               vnodes_args=""
+               if false; then
+                 vnodes_args="--use-vnodes --num-tokens=16"
+               fi
+ 
+               upgrade_arg=""
+               if false; then
+                 upgrade_arg="--execute-upgrade-tests --upgrade-target-version-only --upgrade-version-selection all"
+               fi
+ 
+               # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
+               set -o pipefail && cd ~/cassandra-dtest && pytest $vnodes_args --count=$count $stop_on_failure_arg $upgrade_arg --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $tests_arg | tee /tmp/dtest/stdout.txt
+             fi
+           fi
      - store_test_results:
          path: /tmp/results
      - store_artifacts:
          path: /tmp/dtest
-         destination: dtest_j11_with_vnodes
+         destination: dtest
      - store_artifacts:
          path: ~/cassandra-dtest/logs
-         destination: dtest_j11_with_vnodes_logs
+         destination: dtest_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
++  j8_jvm_dtests_vnode_repeat:
++    docker:
++    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
++    resource_class: medium
++    working_directory: ~/
++    shell: /bin/bash -eo pipefail -l
++    parallelism: 4
++    steps:
++    - attach_workspace:
++        at: /home/cassandra
++    - run:
++        name: Log Environment Information
++        command: |
++          echo '*** id ***'
++          id
++          echo '*** cat /proc/cpuinfo ***'
++          cat /proc/cpuinfo
++          echo '*** free -m ***'
++          free -m
++          echo '*** df -m ***'
++          df -m
++          echo '*** ifconfig -a ***'
++          ifconfig -a
++          echo '*** uname -a ***'
++          uname -a
++          echo '*** mount ***'
++          mount
++          echo '*** env ***'
++          env
++          echo '*** java ***'
++          which java
++          java -version
++    - run:
++        name: Repeatedly run new or modifed JUnit tests
++        no_output_timeout: 15m
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
++    - store_test_results:
++        path: /tmp/results/repeated_utests/output
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/stdout
++        destination: stdout
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/output
++        destination: junitxml
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/logs
++        destination: logs
++    environment:
++    - ANT_HOME: /usr/share/ant
++    - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
++    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
++    - LANG: en_US.UTF-8
++    - KEEP_TEST_DIR: true
++    - DEFAULT_DIR: /home/cassandra/cassandra-dtest
++    - PYTHONIOENCODING: utf-8
++    - PYTHONUNBUFFERED: true
++    - CASS_DRIVER_NO_EXTENSIONS: true
++    - CASS_DRIVER_NO_CYTHON: true
++    - CASSANDRA_SKIP_SYNC: true
++    - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
++    - DTEST_BRANCH: trunk
++    - CCM_MAX_HEAP_SIZE: 1024M
++    - CCM_HEAP_NEWSIZE: 256M
++    - REPEATED_TESTS_STOP_ON_FAILURE: false
++    - REPEATED_UTESTS: null
++    - REPEATED_UTESTS_COUNT: 500
++    - REPEATED_UTESTS_FQLTOOL: null
++    - REPEATED_UTESTS_FQLTOOL_COUNT: 500
++    - REPEATED_UTESTS_LONG: null
++    - REPEATED_UTESTS_LONG_COUNT: 100
++    - REPEATED_UTESTS_STRESS: null
++    - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
++    - REPEATED_JVM_DTESTS: null
++    - REPEATED_JVM_DTESTS_COUNT: 500
++    - REPEATED_JVM_UPGRADE_DTESTS: null
++    - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
++    - REPEATED_DTESTS: null
++    - REPEATED_DTESTS_COUNT: 500
++    - REPEATED_UPGRADE_DTESTS: null
++    - REPEATED_UPGRADE_DTESTS_COUNT: 25
++    - REPEATED_ANT_TEST_TARGET: testsome
++    - REPEATED_ANT_TEST_CLASS: null
++    - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
++    - REPEATED_ANT_TEST_COUNT: 500
++    - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
++    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_cqlsh_dtests_py38:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.8/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
+         name: Determine Tests to Run (j8_without_vnodes)
+         no_output_timeout: 5m
+         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.8/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j8_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --skip-resource-i [...]
+     - run:
+         name: Run dtests (j8_without_vnodes)
+         no_output_timeout: 15m
+         command: |
+           echo "cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt"
+           cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt
+ 
+           source ~/env3.8/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.8' ]; then
+             export CQLSH_PYTHON=/usr/bin/python3.8
+           fi
+ 
+           java -version
+           cd ~/cassandra-dtest
+           mkdir -p /tmp/dtest
+ 
+           echo "env: $(env)"
+           echo "** done env"
+           mkdir -p /tmp/results/dtests
+           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
+           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt`
+           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j8_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+     - store_test_results:
+         path: /tmp/results
+     - store_artifacts:
+         path: /tmp/dtest
+         destination: dtest_j8_without_vnodes
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_j8_without_vnodes_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
++    - REPEATED_JVM_DTESTS: null
++    - REPEATED_JVM_DTESTS_COUNT: 500
++    - REPEATED_JVM_UPGRADE_DTESTS: null
++    - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
++    - REPEATED_DTESTS: null
++    - REPEATED_DTESTS_COUNT: 500
++    - REPEATED_UPGRADE_DTESTS: null
++    - REPEATED_UPGRADE_DTESTS_COUNT: 25
++    - REPEATED_ANT_TEST_TARGET: testsome
++    - REPEATED_ANT_TEST_CLASS: null
++    - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
++    - REPEATED_ANT_TEST_COUNT: 500
++    - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
++    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
++  j8_simulator_dtests_repeat:
++    docker:
++    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
++    resource_class: medium
++    working_directory: ~/
++    shell: /bin/bash -eo pipefail -l
++    parallelism: 4
++    steps:
++    - attach_workspace:
++        at: /home/cassandra
++    - run:
++        name: Log Environment Information
++        command: |
++          echo '*** id ***'
++          id
++          echo '*** cat /proc/cpuinfo ***'
++          cat /proc/cpuinfo
++          echo '*** free -m ***'
++          free -m
++          echo '*** df -m ***'
++          df -m
++          echo '*** ifconfig -a ***'
++          ifconfig -a
++          echo '*** uname -a ***'
++          uname -a
++          echo '*** mount ***'
++          mount
++          echo '*** env ***'
++          env
++          echo '*** java ***'
++          which java
++          java -version
++    - run:
++        name: Repeatedly run new or modifed JUnit tests
++        no_output_timeout: 15m
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests [...]
++    - store_test_results:
++        path: /tmp/results/repeated_utests/output
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/stdout
++        destination: stdout
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/output
++        destination: junitxml
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/logs
++        destination: logs
++    environment:
++    - ANT_HOME: /usr/share/ant
++    - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
++    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
++    - LANG: en_US.UTF-8
++    - KEEP_TEST_DIR: true
++    - DEFAULT_DIR: /home/cassandra/cassandra-dtest
++    - PYTHONIOENCODING: utf-8
++    - PYTHONUNBUFFERED: true
++    - CASS_DRIVER_NO_EXTENSIONS: true
++    - CASS_DRIVER_NO_CYTHON: true
++    - CASSANDRA_SKIP_SYNC: true
++    - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
++    - DTEST_BRANCH: trunk
++    - CCM_MAX_HEAP_SIZE: 1024M
++    - CCM_HEAP_NEWSIZE: 256M
++    - REPEATED_TESTS_STOP_ON_FAILURE: false
++    - REPEATED_UTESTS: null
++    - REPEATED_UTESTS_COUNT: 500
++    - REPEATED_UTESTS_FQLTOOL: null
++    - REPEATED_UTESTS_FQLTOOL_COUNT: 500
++    - REPEATED_UTESTS_LONG: null
++    - REPEATED_UTESTS_LONG_COUNT: 100
++    - REPEATED_UTESTS_STRESS: null
++    - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_dtests_vnode_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
+         name: Run repeated Python dtest
+         no_output_timeout: 15m
+         command: |
+           if [ "${REPEATED_DTESTS}" == "<nil>" ]; then
+             echo "Repeated dtest name hasn't been defined, exiting without running any test"
+           elif [ "${REPEATED_DTESTS_COUNT}" == "<nil>" ]; then
+             echo "Repeated dtest count hasn't been defined, exiting without running any test"
+           elif [ "${REPEATED_DTESTS_COUNT}" -le 0 ]; then
+             echo "Repeated dtest count is lesser or equals than zero, exiting without running any test"
+           else
+ 
+             # Calculate the number of test iterations to be run by the current parallel runner.
+             # Since we are running the same test multiple times there is no need to use `circleci tests split`.
+             count=$((${REPEATED_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))
+             if (($CIRCLE_NODE_INDEX < (${REPEATED_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then
+               count=$((count+1))
+             fi
+ 
+             if (($count <= 0)); then
+               echo "No tests to run in this runner"
+             else
+               echo "Running ${REPEATED_DTESTS} $count times"
+ 
+               source ~/env3.6/bin/activate
+               export PATH=$JAVA_HOME/bin:$PATH
+ 
+               java -version
+               cd ~/cassandra-dtest
+               mkdir -p /tmp/dtest
+ 
+               echo "env: $(env)"
+               echo "** done env"
+               mkdir -p /tmp/results/dtests
+ 
+               tests_arg=$(echo ${REPEATED_DTESTS} | sed -e "s/,/ /g")
+ 
+               stop_on_failure_arg=""
+               if ${REPEATED_TESTS_STOP_ON_FAILURE}; then
+                 stop_on_failure_arg="-x"
+               fi
+ 
+               vnodes_args=""
+               if true; then
+                 vnodes_args="--use-vnodes --num-tokens=16"
+               fi
+ 
+               upgrade_arg=""
+               if false; then
+                 upgrade_arg="--execute-upgrade-tests --upgrade-target-version-only --upgrade-version-selection all"
+               fi
+ 
+               # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
+               set -o pipefail && cd ~/cassandra-dtest && pytest $vnodes_args --count=$count $stop_on_failure_arg $upgrade_arg --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $tests_arg | tee /tmp/dtest/stdout.txt
+             fi
+           fi
+     - store_test_results:
+         path: /tmp/results
+     - store_artifacts:
+         path: /tmp/dtest
+         destination: dtest
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_cqlsh_dtests_py3_vnode:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
+         name: Determine Tests to Run (j11_with_vnodes)
+         no_output_timeout: 5m
+         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j11_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip [...]
+     - run:
+         name: Run dtests (j11_with_vnodes)
+         no_output_timeout: 15m
+         command: |
+           echo "cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt"
+           cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt
+ 
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.6' ]; then
+             export CQLSH_PYTHON=/usr/bin/python3.6
+           fi
+ 
+           java -version
+           cd ~/cassandra-dtest
+           mkdir -p /tmp/dtest
+ 
+           echo "env: $(env)"
+           echo "** done env"
+           mkdir -p /tmp/results/dtests
+           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
+           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt`
+           set -o pipefail && cd ~/cassandra-dtest && pytest --use-vnodes --num-tokens=16 --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_with_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+     - store_test_results:
+         path: /tmp/results
+     - store_artifacts:
+         path: /tmp/dtest
+         destination: dtest_j11_with_vnodes
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_j11_with_vnodes_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   utests_fqltool_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
 -          java -version
 -    - run:
 -        name: Repeatedly run new or modifed JUnit tests
 -        no_output_timeout: 15m
 -        command: |
 -          set -x
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          time mv ~/cassandra /tmp
 -          cd /tmp/cassandra
 -          if [ -d ~/dtest_jars ]; then
 -            cp ~/dtest_jars/dtest* /tmp/cassandra/build/
 -          fi
 -
 -          # Calculate the number of test iterations to be run by the current parallel runner.
 -          count=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))
 -          if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then
 -            count=$((count+1))
 -          fi
 -
 -          # Put manually specified tests and automatically detected tests together, removing duplicates
 -          tests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u)
 -          echo "Tests to be repeated: ${tests}"
 -
 -          # Run each test class as many times as requested.
 -          exit_code="$?"
 -          for test in $tests; do
 -
 -              # Split class and method names from the test name
 -              if [[ $test =~ "#" ]]; then
 -                class=${test%"#"*}
 -                method=${test#*"#"}
 -              else
 -                class=$test
 -                method=""
 -              fi
 -
 -              # Prepare the -Dtest.name argument.
 -              # It can be the fully qualified class name or the short class name, depending on the target.
 -              if [[ $target == "test" || \
 -                    $target == "test-cdc" || \
 -                    $target == "test-compression" || \
 -                    $target == "test-system-keyspace-directory" || \
 -                    $target == "fqltool-test" || \
 -                    $target == "long-test" || \
 -                    $target == "stress-test" ]]; then
 -                name_arg="-Dtest.name=${class##*.}"
 -              else
 -                name_arg="-Dtest.name=$class"
 -              fi
 -
 -              # Prepare the -Dtest.methods argument, which is optional
 -              if [ $method == "" ]; then
 -                methods_arg=""
 -              else
 -                methods_arg="-Dtest.methods=$method"
 -              fi
 -
 -              for i in $(seq -w 1 $count); do
 -                echo "Running test $test, iteration $i of $count"
 -
 -                # run the test
 -                status="passes"
 -                if !( set -o pipefail && \
 -                      ant fqltool-test $name_arg $methods_arg -Dno-build-test=true | \
 -                      tee stdout.txt \
 -                    ); then
 -                  status="fails"
 -                  exit_code=1
 -                fi
 -
 -                # move the stdout output file
 -                dest=/tmp/results/repeated_utests/stdout/${status}/${i}
 -                mkdir -p $dest
 -                mv stdout.txt $dest/${test}.txt
 -
 -                # move the XML output files
 -                source=build/test/output
 -                dest=/tmp/results/repeated_utests/output/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # move the log files
 -                source=build/test/logs
 -                dest=/tmp/results/repeated_utests/logs/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # maybe stop iterations on test failure
 -                if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then
 -                  break
 -                fi
 -              done
 -          done
 -          (exit ${exit_code})
++          java -version
++    - run:
++        name: Repeatedly run new or modifed JUnit tests
++        no_output_timeout: 15m
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and [...]
+     - store_test_results:
+         path: /tmp/results/repeated_utests/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_upgrade_dtests:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
+         name: Determine Tests to Run (j8_upgradetests_without_vnodes)
+         no_output_timeout: 5m
+         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j8_upgradetests_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --ex [...]
+     - run:
+         name: Run dtests (j8_upgradetests_without_vnodes)
+         no_output_timeout: 15m
+         command: "echo \"cat /tmp/split_dtest_tests_j8_upgradetests_without_vnodes_final.txt\"\ncat /tmp/split_dtest_tests_j8_upgradetests_without_vnodes_final.txt\n\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\nif [ -n '' ]; then\n  export \nfi\n\njava -version\ncd ~/cassandra-dtest\nmkdir -p /tmp/dtest\n\necho \"env: $(env)\"\necho \"** done env\"\nmkdir -p /tmp/results/dtests\n# we need the \"set -o pipefail\" here so that the exit code that circleci will actually  [...]
+     - store_test_results:
+         path: /tmp/results
+     - store_artifacts:
+         path: /tmp/dtest
+         destination: dtest_j8_upgradetests_without_vnodes
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_j8_upgradetests_without_vnodes_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_jvm_upgrade_dtests_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: |
 -          set -x
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          time mv ~/cassandra /tmp
 -          cd /tmp/cassandra
 -          if [ -d ~/dtest_jars ]; then
 -            cp ~/dtest_jars/dtest* /tmp/cassandra/build/
 -          fi
 -
 -          # Calculate the number of test iterations to be run by the current parallel runner.
 -          count=$((${REPEATED_JVM_UPGRADE_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))
 -          if (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_UPGRADE_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then
 -            count=$((count+1))
 -          fi
 -
 -          # Put manually specified tests and automatically detected tests together, removing duplicates
 -          tests=$(echo ${REPEATED_JVM_UPGRADE_DTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u)
 -          echo "Tests to be repeated: ${tests}"
 -
 -          # Run each test class as many times as requested.
 -          exit_code="$?"
 -          for test in $tests; do
 -
 -              # Split class and method names from the test name
 -              if [[ $test =~ "#" ]]; then
 -                class=${test%"#"*}
 -                method=${test#*"#"}
 -              else
 -                class=$test
 -                method=""
 -              fi
 -
 -              # Prepare the -Dtest.name argument.
 -              # It can be the fully qualified class name or the short class name, depending on the target.
 -              if [[ $target == "test" || \
 -                    $target == "test-cdc" || \
 -                    $target == "test-compression" || \
 -                    $target == "test-system-keyspace-directory" || \
 -                    $target == "fqltool-test" || \
 -                    $target == "long-test" || \
 -                    $target == "stress-test" ]]; then
 -                name_arg="-Dtest.name=${class##*.}"
 -              else
 -                name_arg="-Dtest.name=$class"
 -              fi
 -
 -              # Prepare the -Dtest.methods argument, which is optional
 -              if [ $method == "" ]; then
 -                methods_arg=""
 -              else
 -                methods_arg="-Dtest.methods=$method"
 -              fi
 -
 -              for i in $(seq -w 1 $count); do
 -                echo "Running test $test, iteration $i of $count"
 -
 -                # run the test
 -                status="passes"
 -                if !( set -o pipefail && \
 -                      ant test-jvm-dtest-some $name_arg $methods_arg -Dno-build-test=true | \
 -                      tee stdout.txt \
 -                    ); then
 -                  status="fails"
 -                  exit_code=1
 -                fi
 -
 -                # move the stdout output file
 -                dest=/tmp/results/repeated_utests/stdout/${status}/${i}
 -                mkdir -p $dest
 -                mv stdout.txt $dest/${test}.txt
 -
 -                # move the XML output files
 -                source=build/test/output
 -                dest=/tmp/results/repeated_utests/output/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # move the log files
 -                source=build/test/logs
 -                dest=/tmp/results/repeated_utests/logs/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # maybe stop iterations on test failure
 -                if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then
 -                  break
 -                fi
 -              done
 -          done
 -          (exit ${exit_code})
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_UPGRADE_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_UPGRADE_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified t [...]
+     - store_test_results:
+         path: /tmp/results/repeated_utests/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_cqlsh_dtests_py38_vnode:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.8/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
+         name: Determine Tests to Run (j11_with_vnodes)
+         no_output_timeout: 5m
+         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.8/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j11_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip [...]
+     - run:
+         name: Run dtests (j11_with_vnodes)
+         no_output_timeout: 15m
+         command: |
+           echo "cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt"
+           cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt
+ 
+           source ~/env3.8/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.8' ]; then
+             export CQLSH_PYTHON=/usr/bin/python3.8
+           fi
+ 
+           java -version
+           cd ~/cassandra-dtest
+           mkdir -p /tmp/dtest
+ 
+           echo "env: $(env)"
+           echo "** done env"
+           mkdir -p /tmp/results/dtests
+           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
+           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt`
+           set -o pipefail && cd ~/cassandra-dtest && pytest --use-vnodes --num-tokens=16 --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_with_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+     - store_test_results:
+         path: /tmp/results
+     - store_artifacts:
+         path: /tmp/dtest
+         destination: dtest_j11_with_vnodes
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_j11_with_vnodes_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j11_jvm_dtests_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: |
 -          set -x
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          time mv ~/cassandra /tmp
 -          cd /tmp/cassandra
 -          if [ -d ~/dtest_jars ]; then
 -            cp ~/dtest_jars/dtest* /tmp/cassandra/build/
 -          fi
 -
 -          # Calculate the number of test iterations to be run by the current parallel runner.
 -          count=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))
 -          if (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then
 -            count=$((count+1))
 -          fi
 -
 -          # Put manually specified tests and automatically detected tests together, removing duplicates
 -          tests=$(echo ${REPEATED_JVM_DTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u)
 -          echo "Tests to be repeated: ${tests}"
 -
 -          # Run each test class as many times as requested.
 -          exit_code="$?"
 -          for test in $tests; do
 -
 -              # Split class and method names from the test name
 -              if [[ $test =~ "#" ]]; then
 -                class=${test%"#"*}
 -                method=${test#*"#"}
 -              else
 -                class=$test
 -                method=""
 -              fi
 -
 -              # Prepare the -Dtest.name argument.
 -              # It can be the fully qualified class name or the short class name, depending on the target.
 -              if [[ $target == "test" || \
 -                    $target == "test-cdc" || \
 -                    $target == "test-compression" || \
 -                    $target == "test-system-keyspace-directory" || \
 -                    $target == "fqltool-test" || \
 -                    $target == "long-test" || \
 -                    $target == "stress-test" ]]; then
 -                name_arg="-Dtest.name=${class##*.}"
 -              else
 -                name_arg="-Dtest.name=$class"
 -              fi
 -
 -              # Prepare the -Dtest.methods argument, which is optional
 -              if [ $method == "" ]; then
 -                methods_arg=""
 -              else
 -                methods_arg="-Dtest.methods=$method"
 -              fi
 -
 -              for i in $(seq -w 1 $count); do
 -                echo "Running test $test, iteration $i of $count"
 -
 -                # run the test
 -                status="passes"
 -                if !( set -o pipefail && \
 -                      ant test-jvm-dtest-some $name_arg $methods_arg -Dno-build-test=true | \
 -                      tee stdout.txt \
 -                    ); then
 -                  status="fails"
 -                  exit_code=1
 -                fi
 -
 -                # move the stdout output file
 -                dest=/tmp/results/repeated_utests/stdout/${status}/${i}
 -                mkdir -p $dest
 -                mv stdout.txt $dest/${test}.txt
 -
 -                # move the XML output files
 -                source=build/test/output
 -                dest=/tmp/results/repeated_utests/output/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # move the log files
 -                source=build/test/logs
 -                dest=/tmp/results/repeated_utests/logs/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # maybe stop iterations on test failure
 -                if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then
 -                  break
 -                fi
 -              done
 -          done
 -          (exit ${exit_code})
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
+     - store_test_results:
+         path: /tmp/results/repeated_utests/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   utests_stress:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 1
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Run Unit Tests (stress-test)
+         command: |
+           export PATH=$JAVA_HOME/bin:$PATH
+           time mv ~/cassandra /tmp
+           cd /tmp/cassandra
+           if [ -d ~/dtest_jars ]; then
+             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
+           fi
+           ant stress-test
+         no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_unit_tests:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Determine unit Tests to Run
+         command: |
+           # reminder: this code (along with all the steps) is independently executed on every circle container
+           # so the goal here is to get the circleci script to return the tests *this* container will run
+           # which we do via the `circleci` cli tool.
+ 
+           rm -fr ~/cassandra-dtest/upgrade_tests
+           echo "***java tests***"
+ 
+           # get all of our unit test filenames
+           set -eo pipefail && circleci tests glob "$HOME/cassandra/test/unit/**/*.java" > /tmp/all_java_unit_tests.txt
+ 
+           # split up the unit tests into groups based on the number of containers we have
+           set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt
+           set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/unit/;;g" | grep "Test\.java$"  > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
+           echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt"
+           cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
+         no_output_timeout: 15m
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Run Unit Tests (testclasslist)
+         command: |
+           set -x
+           export PATH=$JAVA_HOME/bin:$PATH
+           time mv ~/cassandra /tmp
+           cd /tmp/cassandra
+           if [ -d ~/dtest_jars ]; then
+             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
+           fi
+           test_timeout=$(grep 'name="test.unit.timeout"' build.xml | awk -F'"' '{print $4}' || true)
+           if [ -z "$test_timeout" ]; then
+             test_timeout=$(grep 'name="test.timeout"' build.xml | awk -F'"' '{print $4}')
+           fi
 -          ant testclasslist -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
++          ant testclasslist   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
+         no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_jvm_dtests:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 1
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Determine distributed Tests to Run
+         command: |
+           # reminder: this code (along with all the steps) is independently executed on every circle container
+           # so the goal here is to get the circleci script to return the tests *this* container will run
+           # which we do via the `circleci` cli tool.
+ 
+           rm -fr ~/cassandra-dtest/upgrade_tests
+           echo "***java tests***"
+ 
+           # get all of our unit test filenames
+           set -eo pipefail && circleci tests glob "$HOME/cassandra/test/distributed/**/*.java" > /tmp/all_java_unit_tests.txt
+ 
+           # split up the unit tests into groups based on the number of containers we have
+           set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt
+           set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/distributed/;;g" | grep "Test\.java$" | grep -v upgrade > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
+           echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt"
+           cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
+         no_output_timeout: 15m
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Run Unit Tests (testclasslist)
+         command: |
+           set -x
+           export PATH=$JAVA_HOME/bin:$PATH
+           time mv ~/cassandra /tmp
+           cd /tmp/cassandra
+           if [ -d ~/dtest_jars ]; then
+             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
+           fi
+           test_timeout=$(grep 'name="test.distributed.timeout"' build.xml | awk -F'"' '{print $4}' || true)
+           if [ -z "$test_timeout" ]; then
+             test_timeout=$(grep 'name="test.timeout"' build.xml | awk -F'"' '{print $4}')
+           fi
 -          ant testclasslist -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=distributed
++          ant testclasslist   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=distributed
+         no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
 -  j11_build:
++  j11_jvm_dtests_vnode_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
 -    parallelism: 1
++    parallelism: 4
+     steps:
++    - attach_workspace:
++        at: /home/cassandra
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
 -        name: Clone Cassandra Repository (via git)
 -        command: |
 -          git clone --single-branch --depth 1 --branch $CIRCLE_BRANCH https://github.com/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME.git ~/cassandra
 -    - run:
 -        name: Build Cassandra
 -        command: |
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          cd ~/cassandra
 -          # Loop to prevent failure due to maven-ant-tasks not downloading a jar..
 -          for x in $(seq 1 3); do
 -              ${ANT_HOME}/bin/ant clean realclean jar
 -              RETURN="$?"
 -              if [ "${RETURN}" -eq "0" ]; then
 -                  break
 -              fi
 -          done
 -          # Exit, if we didn't build successfully
 -          if [ "${RETURN}" -ne "0" ]; then
 -              echo "Build failed with exit code: ${RETURN}"
 -              exit ${RETURN}
 -          fi
++        name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -    - run:
 -        name: Run eclipse-warnings
 -        command: |
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          cd ~/cassandra
 -          ant eclipse-warnings
 -    - persist_to_workspace:
 -        root: /home/cassandra
 -        paths:
 -        - cassandra
 -        - .m2
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
++    - store_test_results:
++        path: /tmp/results/repeated_utests/output
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/stdout
++        destination: stdout
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/output
++        destination: junitxml
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/logs
++        destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
 -  j8_dtests:
++  j11_build:
+     docker:
 -    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
++    - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
 -    parallelism: 4
++    parallelism: 1
+     steps:
 -    - attach_workspace:
 -        at: /home/cassandra
+     - run:
 -        name: Clone Cassandra dtest Repository (via git)
++        name: Log Environment Information
+         command: |
 -          git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
++          echo '*** id ***'
++          id
++          echo '*** cat /proc/cpuinfo ***'
++          cat /proc/cpuinfo
++          echo '*** free -m ***'
++          free -m
++          echo '*** df -m ***'
++          df -m
++          echo '*** ifconfig -a ***'
++          ifconfig -a
++          echo '*** uname -a ***'
++          uname -a
++          echo '*** mount ***'
++          mount
++          echo '*** env ***'
++          env
++          echo '*** java ***'
++          which java
++          java -version
+     - run:
 -        name: Configure virtualenv and python Dependencies
++        name: Clone Cassandra Repository (via git)
+         command: |
 -          # note, this should be super quick as all dependencies should be pre-installed in the docker image
 -          # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
 -          # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
 -          # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
 -          source ~/env3.6/bin/activate
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
 -          pip3 uninstall -y cqlsh
 -          pip3 freeze
 -    - run:
 -        name: Determine Tests to Run (j8_without_vnodes)
 -        no_output_timeout: 5m
 -        command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j8_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --skip-resource-i [...]
++          git clone --single-branch --depth 1 --branch $CIRCLE_BRANCH https://github.com/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME.git ~/cassandra
+     - run:
 -        name: Run dtests (j8_without_vnodes)
++        name: Build Cassandra
++        command: |
++          export PATH=$JAVA_HOME/bin:$PATH
++          cd ~/cassandra
++          # Loop to prevent failure due to maven-ant-tasks not downloading a jar..
++          for x in $(seq 1 3); do
++              ${ANT_HOME}/bin/ant clean realclean jar
++              RETURN="$?"
++              if [ "${RETURN}" -eq "0" ]; then
++                  break
++              fi
++          done
++          # Exit, if we didn't build successfully
++          if [ "${RETURN}" -ne "0" ]; then
++              echo "Build failed with exit code: ${RETURN}"
++              exit ${RETURN}
++          fi
+         no_output_timeout: 15m
 -        command: "echo \"cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt\"\ncat /tmp/split_dtest_tests_j8_without_vnodes_final.txt\n\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\nif [ -n '' ]; then\n  export \nfi\n\njava -version\ncd ~/cassandra-dtest\nmkdir -p /tmp/dtest\n\necho \"env: $(env)\"\necho \"** done env\"\nmkdir -p /tmp/results/dtests\n# we need the \"set -o pipefail\" here so that the exit code that circleci will actually use is from pytest and not [...]
 -    - store_test_results:
 -        path: /tmp/results
 -    - store_artifacts:
 -        path: /tmp/dtest
 -        destination: dtest_j8_without_vnodes
 -    - store_artifacts:
 -        path: ~/cassandra-dtest/logs
 -        destination: dtest_j8_without_vnodes_logs
++    - run:
++        name: Run eclipse-warnings
++        command: |
++          export PATH=$JAVA_HOME/bin:$PATH
++          cd ~/cassandra
++          ant eclipse-warnings
++    - persist_to_workspace:
++        root: /home/cassandra
++        paths:
++        - cassandra
++        - .m2
      environment:
      - ANT_HOME: /usr/share/ant
      - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
@@@ -1703,29 -3971,32 +3545,36 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
 -    - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 -    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 -  j11_cqlsh-dtests-py2-no-vnodes:
 +    - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - CASSANDRA_USE_JDK11: true
-   j8_dtests-no-vnodes:
++  j8_dtests:
      docker:
 -    - image: apache/cassandra-testing-ubuntu2004-java11:latest
 +    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
@@@ -1781,26 -4071,31 +3630,33 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
 -    - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 -    - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 -    - CASSANDRA_USE_JDK11: true
 +    - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_upgradetests-no-vnodes:
+   j8_dtests_vnode:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
@@@ -1858,28 -4153,32 +3714,35 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   utests_stress:
+   j11_cqlshlib_tests:
      docker:
-     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
      resource_class: medium
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
@@@ -1922,26 -4212,31 +3776,34 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_unit_tests:
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j8_jvm_dtests_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
@@@ -1993,28 -4269,112 +3836,19 @@@
            which java
            java -version
      - run:
-         name: Run Unit Tests (testclasslist)
-         command: |
-           set -x
-           export PATH=$JAVA_HOME/bin:$PATH
-           time mv ~/cassandra /tmp
-           cd /tmp/cassandra
-           if [ -d ~/dtest_jars ]; then
-             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
-           fi
-           test_timeout=$(grep 'name="test.unit.timeout"' build.xml | awk -F'"' '{print $4}' || true)
-           if [ -z "$test_timeout" ]; then
-             test_timeout=$(grep 'name="test.timeout"' build.xml | awk -F'"' '{print $4}')
-           fi
-           ant testclasslist   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
+         name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
 -        command: |
 -          set -x
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          time mv ~/cassandra /tmp
 -          cd /tmp/cassandra
 -          if [ -d ~/dtest_jars ]; then
 -            cp ~/dtest_jars/dtest* /tmp/cassandra/build/
 -          fi
 -
 -          # Calculate the number of test iterations to be run by the current parallel runner.
 -          count=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))
 -          if (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then
 -            count=$((count+1))
 -          fi
 -
 -          # Put manually specified tests and automatically detected tests together, removing duplicates
 -          tests=$(echo ${REPEATED_JVM_DTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u)
 -          echo "Tests to be repeated: ${tests}"
 -
 -          # Run each test class as many times as requested.
 -          exit_code="$?"
 -          for test in $tests; do
 -
 -              # Split class and method names from the test name
 -              if [[ $test =~ "#" ]]; then
 -                class=${test%"#"*}
 -                method=${test#*"#"}
 -              else
 -                class=$test
 -                method=""
 -              fi
 -
 -              # Prepare the -Dtest.name argument.
 -              # It can be the fully qualified class name or the short class name, depending on the target.
 -              if [[ $target == "test" || \
 -                    $target == "test-cdc" || \
 -                    $target == "test-compression" || \
 -                    $target == "test-system-keyspace-directory" || \
 -                    $target == "fqltool-test" || \
 -                    $target == "long-test" || \
 -                    $target == "stress-test" ]]; then
 -                name_arg="-Dtest.name=${class##*.}"
 -              else
 -                name_arg="-Dtest.name=$class"
 -              fi
 -
 -              # Prepare the -Dtest.methods argument, which is optional
 -              if [ $method == "" ]; then
 -                methods_arg=""
 -              else
 -                methods_arg="-Dtest.methods=$method"
 -              fi
 -
 -              for i in $(seq -w 1 $count); do
 -                echo "Running test $test, iteration $i of $count"
 -
 -                # run the test
 -                status="passes"
 -                if !( set -o pipefail && \
 -                      ant test-jvm-dtest-some $name_arg $methods_arg -Dno-build-test=true | \
 -                      tee stdout.txt \
 -                    ); then
 -                  status="fails"
 -                  exit_code=1
 -                fi
 -
 -                # move the stdout output file
 -                dest=/tmp/results/repeated_utests/stdout/${status}/${i}
 -                mkdir -p $dest
 -                mv stdout.txt $dest/${test}.txt
 -
 -                # move the XML output files
 -                source=build/test/output
 -                dest=/tmp/results/repeated_utests/output/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # move the log files
 -                source=build/test/logs
 -                dest=/tmp/results/repeated_utests/logs/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # maybe stop iterations on test failure
 -                if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then
 -                  break
 -                fi
 -              done
 -          done
 -          (exit ${exit_code})
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
      - store_test_results:
-         path: /tmp/cassandra/build/test/output/
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/cassandra/build/test/output
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
          destination: junitxml
      - store_artifacts:
-         path: /tmp/cassandra/build/test/logs
+         path: /tmp/results/repeated_utests/logs
          destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
@@@ -2032,26 -4392,30 +3866,33 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j11_jvm_dtests:
+   j11_dtests:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11:latest
      resource_class: medium
@@@ -2298,23 -4495,27 +3972,30 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
      - CASSANDRA_USE_JDK11: true
@@@ -2391,25 -4592,22 +4072,29 @@@
                if [[ $target == "test" || \
                      $target == "test-cdc" || \
                      $target == "test-compression" || \
-                     $target == "test-system-keyspace-directory" ]]; then
+                     $target == "test-system-keyspace-directory" || \
+                     $target == "fqltool-test" || \
+                     $target == "long-test" || \
 -                    $target == "stress-test" ]]; then
++                    $target == "stress-test" || \
++                    $target == "test-simulator-dtest" ]]; then
                  name="-Dtest.name=$class_name"
                else
                  name="-Dtest.name=$class_path"
                fi
  
                # Prepare the -Dtest.methods argument, which is optional
-               if [ "${REPEATED_UTEST_METHODS}" == "<nil>" ]; then
+               if [ "${REPEATED_ANT_TEST_METHODS}" == "<nil>" ]; then
                  methods=""
                else
-                 methods="-Dtest.methods=${REPEATED_UTEST_METHODS}"
+                 methods="-Dtest.methods=${REPEATED_ANT_TEST_METHODS}"
                fi
  
 +              # Prepare the JVM dtests vnodes argument, which is optional
 +              vnodes_args=""
-               if ${REPEATED_UTEST_VNODES}; then
++              if ${REPEATED_ANT_TEST_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="$?"
@@@ -2481,106 -4679,32 +4166,35 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - CASSANDRA_USE_JDK11: true
-   j8_dtests-with-vnodes:
-     docker:
-     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
-     resource_class: medium
-     working_directory: ~/
-     shell: /bin/bash -eo pipefail -l
-     parallelism: 4
-     steps:
-     - attach_workspace:
-         at: /home/cassandra
-     - run:
-         name: Clone Cassandra dtest Repository (via git)
-         command: |
-           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
-     - run:
-         name: Configure virtualenv and python Dependencies
-         command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
-         name: Determine Tests to Run (j8_with_vnodes)
-         no_output_timeout: 5m
-         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j8_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip- [...]
-     - run:
-         name: Run dtests (j8_with_vnodes)
-         no_output_timeout: 15m
-         command: "echo \"cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt\"\ncat /tmp/split_dtest_tests_j8_with_vnodes_final.txt\n\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\nif [ -n '' ]; then\n  export \nfi\n\njava -version\ncd ~/cassandra-dtest\nmkdir -p /tmp/dtest\n\necho \"env: $(env)\"\necho \"** done env\"\nmkdir -p /tmp/results/dtests\n# we need the \"set -o pipefail\" here so that the exit code that circleci will actually use is from pytest and not the e [...]
-     - store_test_results:
-         path: /tmp/results
-     - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest_j8_with_vnodes
-     - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_j8_with_vnodes_logs
-     environment:
-     - ANT_HOME: /usr/share/ant
-     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-     - LANG: en_US.UTF-8
-     - KEEP_TEST_DIR: true
-     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
-     - PYTHONIOENCODING: utf-8
-     - PYTHONUNBUFFERED: true
-     - CASS_DRIVER_NO_EXTENSIONS: true
-     - CASS_DRIVER_NO_CYTHON: true
-     - CASSANDRA_SKIP_SYNC: true
-     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
-     - DTEST_BRANCH: trunk
-     - CCM_MAX_HEAP_SIZE: 1024M
-     - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j11_cqlsh-dtests-py38-no-vnodes:
+   j8_dtests_repeat:
      docker:
-     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
@@@ -2655,26 -4808,29 +4298,32 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - CASSANDRA_USE_JDK11: true
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    j8_jvm_dtests:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
@@@ -2766,23 -4922,27 +4415,30 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    j8_build:
@@@ -2865,26 -5025,30 +4521,33 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_cqlsh-dtests-py3-no-vnodes:
+   j8_cqlsh_dtests_py38_vnode:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
@@@ -2961,26 -5125,30 +4624,33 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_cqlsh-dtests-py38-with-vnodes:
+   utests_long:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
@@@ -3057,28 -5193,32 +4695,35 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   utests_long:
+   j11_unit_tests_repeat:
      docker:
-     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
      resource_class: medium
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
@@@ -3087,23 -5227,134 +4732,41 @@@
      - attach_workspace:
          at: /home/cassandra
      - run:
-         name: Run Unit Tests (long-test)
-         command: |
-           export PATH=$JAVA_HOME/bin:$PATH
-           time mv ~/cassandra /tmp
-           cd /tmp/cassandra
-           if [ -d ~/dtest_jars ]; then
-             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
-           fi
-           ant long-test
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
 -        command: |
 -          set -x
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          time mv ~/cassandra /tmp
 -          cd /tmp/cassandra
 -          if [ -d ~/dtest_jars ]; then
 -            cp ~/dtest_jars/dtest* /tmp/cassandra/build/
 -          fi
 -
 -          # Calculate the number of test iterations to be run by the current parallel runner.
 -          count=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))
 -          if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then
 -            count=$((count+1))
 -          fi
 -
 -          # Put manually specified tests and automatically detected tests together, removing duplicates
 -          tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u)
 -          echo "Tests to be repeated: ${tests}"
 -
 -          # Run each test class as many times as requested.
 -          exit_code="$?"
 -          for test in $tests; do
 -
 -              # Split class and method names from the test name
 -              if [[ $test =~ "#" ]]; then
 -                class=${test%"#"*}
 -                method=${test#*"#"}
 -              else
 -                class=$test
 -                method=""
 -              fi
 -
 -              # Prepare the -Dtest.name argument.
 -              # It can be the fully qualified class name or the short class name, depending on the target.
 -              if [[ $target == "test" || \
 -                    $target == "test-cdc" || \
 -                    $target == "test-compression" || \
 -                    $target == "test-system-keyspace-directory" || \
 -                    $target == "fqltool-test" || \
 -                    $target == "long-test" || \
 -                    $target == "stress-test" ]]; then
 -                name_arg="-Dtest.name=${class##*.}"
 -              else
 -                name_arg="-Dtest.name=$class"
 -              fi
 -
 -              # Prepare the -Dtest.methods argument, which is optional
 -              if [ $method == "" ]; then
 -                methods_arg=""
 -              else
 -                methods_arg="-Dtest.methods=$method"
 -              fi
 -
 -              for i in $(seq -w 1 $count); do
 -                echo "Running test $test, iteration $i of $count"
 -
 -                # run the test
 -                status="passes"
 -                if !( set -o pipefail && \
 -                      ant testsome $name_arg $methods_arg -Dno-build-test=true | \
 -                      tee stdout.txt \
 -                    ); then
 -                  status="fails"
 -                  exit_code=1
 -                fi
 -
 -                # move the stdout output file
 -                dest=/tmp/results/repeated_utests/stdout/${status}/${i}
 -                mkdir -p $dest
 -                mv stdout.txt $dest/${test}.txt
 -
 -                # move the XML output files
 -                source=build/test/output
 -                dest=/tmp/results/repeated_utests/output/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # move the log files
 -                source=build/test/logs
 -                dest=/tmp/results/repeated_utests/logs/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # maybe stop iterations on test failure
 -                if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then
 -                  break
 -                fi
 -              done
 -          done
 -          (exit ${exit_code})
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
      - store_test_results:
-         path: /tmp/cassandra/build/test/output/
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/cassandra/build/test/output
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
          destination: junitxml
      - store_artifacts:
-         path: /tmp/cassandra/build/test/logs
+         path: /tmp/results/repeated_utests/logs
          destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
@@@ -3121,25 -5372,30 +4784,33 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
    utests_system_keyspace_directory:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
@@@ -3231,23 -5487,27 +4902,30 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    j8_cqlshlib_tests:
@@@ -3286,23 -5546,27 +4964,30 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    utests_fqltool:
@@@ -3350,26 -5614,30 +5035,33 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j11_dtests-no-vnodes:
+   j11_dtests_vnode:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11:latest
      resource_class: medium
@@@ -3449,23 -5717,27 +5141,30 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
      - CASSANDRA_USE_JDK11: true
@@@ -3560,205 -5832,27 +5259,30 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_repeated_utest:
-     docker:
-     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
-     resource_class: medium
-     working_directory: ~/
-     shell: /bin/bash -eo pipefail -l
-     parallelism: 4
-     steps:
-     - attach_workspace:
-         at: /home/cassandra
-     - run:
-         name: Log Environment Information
-         command: |
-           echo '*** id ***'
-           id
-           echo '*** cat /proc/cpuinfo ***'
-           cat /proc/cpuinfo
-           echo '*** free -m ***'
-           free -m
-           echo '*** df -m ***'
-           df -m
-           echo '*** ifconfig -a ***'
-           ifconfig -a
-           echo '*** uname -a ***'
-           uname -a
-           echo '*** mount ***'
-           mount
-           echo '*** env ***'
-           env
-           echo '*** java ***'
-           which java
-           java -version
-     - run:
-         name: Run repeated JUnit test
-         no_output_timeout: 15m
-         command: |
-           if [ "${REPEATED_UTEST_CLASS}" == "<nil>" ]; then
-             echo "Repeated utest class name hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_UTEST_COUNT}" == "<nil>" ]; then
-             echo "Repeated utest count hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_UTEST_COUNT}" -le 0 ]; then
-             echo "Repeated utest count is lesser or equals than zero, exiting without running any test"
-           else
- 
-             # Calculate the number of test iterations to be run by the current parallel runner.
-             # Since we are running the same test multiple times there is no need to use `circleci tests split`.
-             count=$((${REPEATED_UTEST_COUNT} / CIRCLE_NODE_TOTAL))
-             if (($CIRCLE_NODE_INDEX < (${REPEATED_UTEST_COUNT} % CIRCLE_NODE_TOTAL))); then
-               count=$((count+1))
-             fi
- 
-             if (($count <= 0)); then
-               echo "No tests to run in this runner"
-             else
-               echo "Running ${REPEATED_UTEST_TARGET} ${REPEATED_UTEST_CLASS} ${REPEATED_UTEST_METHODS} ${REPEATED_UTEST_COUNT} times"
- 
-               set -x
-               export PATH=$JAVA_HOME/bin:$PATH
-               time mv ~/cassandra /tmp
-               cd /tmp/cassandra
-               if [ -d ~/dtest_jars ]; then
-                 cp ~/dtest_jars/dtest* /tmp/cassandra/build/
-               fi
- 
-               target=${REPEATED_UTEST_TARGET}
-               class_path=${REPEATED_UTEST_CLASS}
-               class_name="${class_path##*.}"
- 
-               # Prepare the -Dtest.name argument.
-               # It can be the fully qualified class name or the short class name, depending on the target.
-               if [[ $target == "test" || \
-                     $target == "test-cdc" || \
-                     $target == "test-compression" || \
-                     $target == "test-system-keyspace-directory" ]]; then
-                 name="-Dtest.name=$class_name"
-               else
-                 name="-Dtest.name=$class_path"
-               fi
- 
-               # Prepare the -Dtest.methods argument, which is optional
-               if [ "${REPEATED_UTEST_METHODS}" == "<nil>" ]; then
-                 methods=""
-               else
-                 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="$?"
-               for i in $(seq -w 1 $count); do
- 
-                 echo "Running test iteration $i of $count"
- 
-                 # run the test
-                 status="passes"
-                 if !( set -o pipefail && ant $target $name $methods $vnodes_args -Dno-build-test=true | tee stdout.txt ); then
-                   status="fails"
-                   exit_code=1
-                 fi
- 
-                 # move the stdout output file
-                 dest=/tmp/results/repeated_utest/stdout/${status}/${i}
-                 mkdir -p $dest
-                 mv stdout.txt $dest/${REPEATED_UTEST_TARGET}-${REPEATED_UTEST_CLASS}.txt
- 
-                 # move the XML output files
-                 source=build/test/output
-                 dest=/tmp/results/repeated_utest/output/${status}/${i}
-                 mkdir -p $dest
-                 if [[ -d $source && -n "$(ls $source)" ]]; then
-                   mv $source/* $dest/
-                 fi
- 
-                 # move the log files
-                 source=build/test/logs
-                 dest=/tmp/results/repeated_utest/logs/${status}/${i}
-                 mkdir -p $dest
-                 if [[ -d $source && -n "$(ls $source)" ]]; then
-                   mv $source/* $dest/
-                 fi
- 
-                 # maybe stop iterations on test failure
-                 if [[ ${REPEATED_UTEST_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then
-                   break
-                 fi
-               done
- 
-               (exit ${exit_code})
-             fi
-           fi
-     - store_test_results:
-         path: /tmp/results/repeated_utest/output
-     - store_artifacts:
-         path: /tmp/results/repeated_utest/stdout
-         destination: stdout
-     - store_artifacts:
-         path: /tmp/results/repeated_utest/output
-         destination: junitxml
-     - store_artifacts:
-         path: /tmp/results/repeated_utest/logs
-         destination: logs
-     environment:
-     - ANT_HOME: /usr/share/ant
-     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-     - LANG: en_US.UTF-8
-     - KEEP_TEST_DIR: true
-     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
-     - PYTHONIOENCODING: utf-8
-     - PYTHONUNBUFFERED: true
-     - CASS_DRIVER_NO_EXTENSIONS: true
-     - CASS_DRIVER_NO_CYTHON: true
-     - CASSANDRA_SKIP_SYNC: true
-     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
-     - DTEST_BRANCH: trunk
-     - CCM_MAX_HEAP_SIZE: 1024M
-     - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    j8_dtest_jars_build:
@@@ -3838,23 -5932,27 +5362,30 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
  workflows:
@@@ -3878,14 -5976,6 +5409,18 @@@
          requires:
          - start_j8_jvm_dtests
          - j8_build
-     - j8_simulator_dtests:
++    - start_j8_jvm_dtests_vnode:
++        type: approval
++    - j8_jvm_dtests_vnode:
 +        requires:
-         - start_j8_jvm_dtests
++        - start_j8_jvm_dtests_vnode
 +        - j8_build
-     - j8_jvm_dtests_vnode:
++    - start_j8_simulator_dtests:
++        type: approval
++    - j8_simulator_dtests:
 +        requires:
-         - start_j8_jvm_dtests
++        - start_j8_simulator_dtests
 +        - j8_build
      - start_j8_cqlshlib_tests:
          type: approval
      - j8_cqlshlib_tests:
@@@ -3956,19 -6048,21 +5493,21 @@@
          requires:
          - start_j11_dtests
          - j8_build
-     - j11_dtests-no-vnodes:
+     - start_j11_dtests_vnode:
+         type: approval
+     - j11_dtests_vnode:
          requires:
-         - start_j11_dtests
+         - start_j11_dtests_vnode
          - j8_build
--    - start_upgrade_tests:
++    - start_upgrade_dtests:
          type: approval
-     - j8_upgradetests-no-vnodes:
+     - j8_upgrade_dtests:
          requires:
--        - start_upgrade_tests
++        - start_upgrade_dtests
          - j8_build
      - start_j8_cqlsh_tests:
          type: approval
-     - j8_cqlsh-dtests-py3-with-vnodes:
 -    - j8_cqlsh-dtests-py2-with-vnodes:
++    - j8_cqlsh_dtests_py3:
          requires:
          - start_j8_cqlsh_tests
          - j8_build
@@@ -3976,17 -6070,25 +5515,17 @@@
          requires:
          - start_j8_cqlsh_tests
          - j8_build
-     - j8_cqlsh-dtests-py3-no-vnodes:
 -    - j8_cqlsh_dtests_py38_vnode:
 -        requires:
 -        - start_j8_cqlsh_tests
 -        - j8_build
 -    - j8_cqlsh-dtests-py2-no-vnodes:
 -        requires:
 -        - start_j8_cqlsh_tests
 -        - j8_build
 -    - j8_cqlsh_dtests_py3:
++    - j8_cqlsh_dtests_py38:
          requires:
          - start_j8_cqlsh_tests
          - j8_build
-     - j8_cqlsh-dtests-py38-no-vnodes:
 -    - j8_cqlsh_dtests_py38:
++    - j8_cqlsh_dtests_py38_vnode:
          requires:
          - start_j8_cqlsh_tests
          - j8_build
      - start_j11_cqlsh_tests:
          type: approval
-     - j11_cqlsh-dtests-py3-with-vnodes:
 -    - j11_cqlsh-dtests-py2-with-vnodes:
++    - j11_cqlsh_dtests_py3:
          requires:
          - start_j11_cqlsh_tests
          - j8_build
@@@ -3994,11 -6096,19 +5533,11 @@@
          requires:
          - start_j11_cqlsh_tests
          - j8_build
-     - j11_cqlsh-dtests-py3-no-vnodes:
 -    - j11_cqlsh_dtests_py38_vnode:
 -        requires:
 -        - start_j11_cqlsh_tests
 -        - j8_build
 -    - j11_cqlsh-dtests-py2-no-vnodes:
 -        requires:
 -        - start_j11_cqlsh_tests
 -        - j8_build
 -    - j11_cqlsh_dtests_py3:
++    - j11_cqlsh_dtests_py38:
          requires:
          - start_j11_cqlsh_tests
          - j8_build
-     - j11_cqlsh-dtests-py38-no-vnodes:
 -    - j11_cqlsh_dtests_py38:
++    - j11_cqlsh_dtests_py38_vnode:
          requires:
          - start_j11_cqlsh_tests
          - j8_build
@@@ -4095,91 -6163,64 +5598,52 @@@
      - j8_dtest_jars_build:
          requires:
          - j8_build
-         - start_j8_dtest_jars_build
-     - start_jvm_upgrade_dtest:
-         type: approval
+         - start_jvm_upgrade_dtests
      - j8_jvm_upgrade_dtests:
          requires:
-         - start_jvm_upgrade_dtest
          - j8_dtest_jars_build
-     - j8_dtests-with-vnodes:
+     - j8_dtests:
          requires:
          - j8_build
-     - j8_dtests-no-vnodes:
+     - j8_dtests_vnode:
          requires:
          - j8_build
-     - j11_dtests-with-vnodes:
+     - j11_dtests:
          requires:
          - j8_build
-     - j11_dtests-no-vnodes:
+     - j11_dtests_vnode:
          requires:
          - j8_build
--    - start_upgrade_tests:
++    - start_upgrade_dtests:
          type: approval
-     - j8_upgradetests-no-vnodes:
-         requires:
-         - j8_build
-         - start_upgrade_tests
-     - j8_cqlsh-dtests-py3-with-vnodes:
-         requires:
-         - j8_build
-     - j8_cqlsh-dtests-py38-with-vnodes:
-         requires:
-         - j8_build
-     - j8_cqlsh-dtests-py3-no-vnodes:
-         requires:
-         - j8_build
-     - j8_cqlsh-dtests-py38-no-vnodes:
-         requires:
-         - j8_build
-     - j11_cqlsh-dtests-py3-with-vnodes:
+     - j8_upgrade_dtests:
          requires:
          - j8_build
-     - j11_cqlsh-dtests-py38-with-vnodes:
 -        - start_upgrade_tests
 -    - j8_cqlsh-dtests-py2-with-vnodes:
++        - start_upgrade_dtests
++    - j8_cqlsh_dtests_py3:
          requires:
          - j8_build
-     - j11_cqlsh-dtests-py3-no-vnodes:
+     - j8_cqlsh_dtests_py3_vnode:
          requires:
          - j8_build
-     - j11_cqlsh-dtests-py38-no-vnodes:
 -    - j8_cqlsh_dtests_py38_vnode:
 -        requires:
 -        - j8_build
 -    - j8_cqlsh-dtests-py2-no-vnodes:
 -        requires:
 -        - j8_build
 -    - j8_cqlsh_dtests_py3:
 -        requires:
 -        - j8_build
+     - j8_cqlsh_dtests_py38:
          requires:
          - j8_build
-     - start_j8_repeated_utest:
-         type: approval
-     - j8_repeated_utest:
 -    - j11_cqlsh-dtests-py2-with-vnodes:
 -        requires:
 -        - j8_build
 -    - j11_cqlsh_dtests_py3_vnode:
++    - j8_cqlsh_dtests_py38_vnode:
          requires:
-         - start_j8_repeated_utest
          - j8_build
-     - start_j11_repeated_utest:
-         type: approval
-     - j11_repeated_utest:
 -    - j11_cqlsh_dtests_py38_vnode:
++    - j11_cqlsh_dtests_py3:
          requires:
-         - start_j11_repeated_utest
          - j8_build
-     - start_j8_repeated_dtest:
-         type: approval
-     - j8_repeated_dtest:
 -    - j11_cqlsh-dtests-py2-no-vnodes:
++    - j11_cqlsh_dtests_py3_vnode:
          requires:
-         - start_j8_repeated_dtest
          - j8_build
-     - start_j11_repeated_dtest:
-         type: approval
-     - j11_repeated_dtest:
 -    - j11_cqlsh_dtests_py3:
++    - j11_cqlsh_dtests_py38:
          requires:
-         - start_j11_repeated_dtest
          - j8_build
-     - start_repeated_upgrade_dtest:
-         type: approval
-     - repeated_upgrade_dtest:
 -    - j11_cqlsh_dtests_py38:
++    - j11_cqlsh_dtests_py38_vnode:
          requires:
-         - start_repeated_upgrade_dtest
          - j8_build
-     - start_repeated_jvm_upgrade_dtest:
-         type: approval
-     - repeated_jvm_upgrade_dtest:
-         requires:
-         - start_repeated_jvm_upgrade_dtest
-         - j8_dtest_jars_build
    java11_separate_tests:
      jobs:
      - start_j11_build:
@@@ -4199,10 -6240,6 +5663,12 @@@
          requires:
          - start_j11_jvm_dtests
          - j11_build
++    - start_j11_jvm_dtests_vnode:
++        type: approval
 +    - j11_jvm_dtests_vnode:
 +        requires:
-         - start_j11_jvm_dtests
++        - start_j11_jvm_dtests_vnode
 +        - j11_build
      - start_j11_cqlshlib_tests:
          type: approval
      - j11_cqlshlib_tests:
@@@ -4221,7 -6260,7 +5689,7 @@@
          - j11_build
      - start_j11_cqlsh_tests:
          type: approval
-     - j11_cqlsh-dtests-py3-with-vnodes:
 -    - j11_cqlsh-dtests-py2-with-vnodes:
++    - j11_cqlsh_dtests_py3:
          requires:
          - start_j11_cqlsh_tests
          - j11_build
@@@ -4229,11 -6268,19 +5697,11 @@@
          requires:
          - start_j11_cqlsh_tests
          - j11_build
-     - j11_cqlsh-dtests-py3-no-vnodes:
 -    - j11_cqlsh_dtests_py38_vnode:
 -        requires:
 -        - start_j11_cqlsh_tests
 -        - j11_build
 -    - j11_cqlsh-dtests-py2-no-vnodes:
 -        requires:
 -        - start_j11_cqlsh_tests
 -        - j11_build
 -    - j11_cqlsh_dtests_py3:
++    - j11_cqlsh_dtests_py38:
          requires:
          - start_j11_cqlsh_tests
          - j11_build
-     - j11_cqlsh-dtests-py38-no-vnodes:
 -    - j11_cqlsh_dtests_py38:
++    - j11_cqlsh_dtests_py38_vnode:
          requires:
          - start_j11_cqlsh_tests
          - j11_build
@@@ -4262,45 -6297,36 +5718,30 @@@
      - j11_jvm_dtests:
          requires:
          - j11_build
 -    - j11_cqlshlib_tests:
 +    - j11_jvm_dtests_vnode:
          requires:
          - j11_build
 -    - j11_jvm_dtests:
 +    - j11_cqlshlib_tests:
          requires:
          - j11_build
-     - j11_jvm_dtests:
-         requires:
-         - j11_build
      - j11_cqlshlib_tests:
          requires:
          - j11_build
-     - j11_dtests-with-vnodes:
-         requires:
-         - j11_build
-     - j11_dtests-no-vnodes:
+     - j11_dtests:
          requires:
          - j11_build
-     - j11_cqlsh-dtests-py3-with-vnodes:
+     - j11_dtests_vnode:
          requires:
          - j11_build
-     - j11_cqlsh-dtests-py38-with-vnodes:
 -    - j11_cqlsh-dtests-py2-with-vnodes:
++    - j11_cqlsh_dtests_py3:
          requires:
          - j11_build
-     - j11_cqlsh-dtests-py3-no-vnodes:
+     - j11_cqlsh_dtests_py3_vnode:
          requires:
          - j11_build
-     - j11_cqlsh-dtests-py38-no-vnodes:
 -    - j11_cqlsh_dtests_py38_vnode:
 -        requires:
 -        - j11_build
 -    - j11_cqlsh-dtests-py2-no-vnodes:
 -        requires:
 -        - j11_build
 -    - j11_cqlsh_dtests_py3:
++    - j11_cqlsh_dtests_py38:
          requires:
          - j11_build
-     - start_j11_repeated_utest:
-         type: approval
-     - j11_repeated_utest:
-         requires:
-         - start_j11_repeated_utest
-         - j11_build
-     - start_j11_repeated_dtest:
-         type: approval
-     - j11_repeated_dtest:
 -    - j11_cqlsh_dtests_py38:
++    - j11_cqlsh_dtests_py38_vnode:
          requires:
-         - start_j11_repeated_dtest
          - j11_build
diff --cc .circleci/config.yml.HIGHRES
index bdb5a82d52,5df1b2f7be..7e5c9d1359
--- a/.circleci/config.yml.HIGHRES
+++ b/.circleci/config.yml.HIGHRES
@@@ -109,26 -109,30 +109,33 @@@ jobs
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   repeated_jvm_upgrade_dtest:
+   utests_compression_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: xlarge
@@@ -161,15 -165,310 +168,120 @@@
            which java
            java -version
      - run:
-         name: Run repeated JUnit test
+         name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
 -        command: |
 -          set -x
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          time mv ~/cassandra /tmp
 -          cd /tmp/cassandra
 -          if [ -d ~/dtest_jars ]; then
 -            cp ~/dtest_jars/dtest* /tmp/cassandra/build/
 -          fi
 -
 -          # Calculate the number of test iterations to be run by the current parallel runner.
 -          count=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))
 -          if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then
 -            count=$((count+1))
 -          fi
 -
 -          # Put manually specified tests and automatically detected tests together, removing duplicates
 -          tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u)
 -          echo "Tests to be repeated: ${tests}"
 -
 -          # Run each test class as many times as requested.
 -          exit_code="$?"
 -          for test in $tests; do
 -
 -              # Split class and method names from the test name
 -              if [[ $test =~ "#" ]]; then
 -                class=${test%"#"*}
 -                method=${test#*"#"}
 -              else
 -                class=$test
 -                method=""
 -              fi
 -
 -              # Prepare the -Dtest.name argument.
 -              # It can be the fully qualified class name or the short class name, depending on the target.
 -              if [[ $target == "test" || \
 -                    $target == "test-cdc" || \
 -                    $target == "test-compression" || \
 -                    $target == "test-system-keyspace-directory" || \
 -                    $target == "fqltool-test" || \
 -                    $target == "long-test" || \
 -                    $target == "stress-test" ]]; then
 -                name_arg="-Dtest.name=${class##*.}"
 -              else
 -                name_arg="-Dtest.name=$class"
 -              fi
 -
 -              # Prepare the -Dtest.methods argument, which is optional
 -              if [ $method == "" ]; then
 -                methods_arg=""
 -              else
 -                methods_arg="-Dtest.methods=$method"
 -              fi
 -
 -              for i in $(seq -w 1 $count); do
 -                echo "Running test $test, iteration $i of $count"
 -
 -                # run the test
 -                status="passes"
 -                if !( set -o pipefail && \
 -                      ant test-compression $name_arg $methods_arg -Dno-build-test=true | \
 -                      tee stdout.txt \
 -                    ); then
 -                  status="fails"
 -                  exit_code=1
 -                fi
 -
 -                # move the stdout output file
 -                dest=/tmp/results/repeated_utests/stdout/${status}/${i}
 -                mkdir -p $dest
 -                mv stdout.txt $dest/${test}.txt
 -
 -                # move the XML output files
 -                source=build/test/output
 -                dest=/tmp/results/repeated_utests/output/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # move the log files
 -                source=build/test/logs
 -                dest=/tmp/results/repeated_utests/logs/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # maybe stop iterations on test failure
 -                if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then
 -                  break
 -                fi
 -              done
 -          done
 -          (exit ${exit_code})
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
+     - store_test_results:
+         path: /tmp/results/repeated_utests/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
 -    - REPEATED_ANT_TEST_COUNT: 500
 -    - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 -    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 -  j8_cqlsh-dtests-py2-with-vnodes:
 -    docker:
 -    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
 -    resource_class: xlarge
 -    working_directory: ~/
 -    shell: /bin/bash -eo pipefail -l
 -    parallelism: 100
 -    steps:
 -    - attach_workspace:
 -        at: /home/cassandra
 -    - run:
 -        name: Clone Cassandra dtest Repository (via git)
 -        command: |
 -          git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
 -    - run:
 -        name: Configure virtualenv and python Dependencies
 -        command: |
 -          # note, this should be super quick as all dependencies should be pre-installed in the docker image
 -          # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
 -          # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
 -          # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
 -          source ~/env3.6/bin/activate
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
 -          pip3 uninstall -y cqlsh
 -          pip3 freeze
 -    - run:
 -        name: Determine Tests to Run (j8_with_vnodes)
 -        no_output_timeout: 5m
 -        command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j8_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip- [...]
 -    - run:
 -        name: Run dtests (j8_with_vnodes)
 -        no_output_timeout: 15m
 -        command: |
 -          echo "cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt"
 -          cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt
 -
 -          source ~/env3.6/bin/activate
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          if [ -n 'CQLSH_PYTHON=/usr/bin/python2.7' ]; then
 -            export CQLSH_PYTHON=/usr/bin/python2.7
 -          fi
 -
 -          java -version
 -          cd ~/cassandra-dtest
 -          mkdir -p /tmp/dtest
 -
 -          echo "env: $(env)"
 -          echo "** done env"
 -          mkdir -p /tmp/results/dtests
 -          # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
 -          export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt`
 -          set -o pipefail && cd ~/cassandra-dtest && pytest --use-vnodes --num-tokens=16 --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j8_with_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
 -    - store_test_results:
 -        path: /tmp/results
 -    - store_artifacts:
 -        path: /tmp/dtest
 -        destination: dtest_j8_with_vnodes
 -    - store_artifacts:
 -        path: ~/cassandra-dtest/logs
 -        destination: dtest_j8_with_vnodes_logs
 -    environment:
 -    - ANT_HOME: /usr/share/ant
 -    - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 -    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 -    - LANG: en_US.UTF-8
 -    - KEEP_TEST_DIR: true
 -    - DEFAULT_DIR: /home/cassandra/cassandra-dtest
 -    - PYTHONIOENCODING: utf-8
 -    - PYTHONUNBUFFERED: true
 -    - CASS_DRIVER_NO_EXTENSIONS: true
 -    - CASS_DRIVER_NO_CYTHON: true
 -    - CASSANDRA_SKIP_SYNC: true
 -    - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
 -    - DTEST_BRANCH: trunk
 -    - CCM_MAX_HEAP_SIZE: 1024M
 -    - CCM_HEAP_NEWSIZE: 256M
 -    - REPEATED_TESTS_STOP_ON_FAILURE: false
 -    - REPEATED_UTESTS: null
 -    - REPEATED_UTESTS_COUNT: 500
 -    - REPEATED_UTESTS_FQLTOOL: null
 -    - REPEATED_UTESTS_FQLTOOL_COUNT: 500
 -    - REPEATED_UTESTS_LONG: null
 -    - REPEATED_UTESTS_LONG_COUNT: 100
 -    - REPEATED_UTESTS_STRESS: null
 -    - REPEATED_UTESTS_STRESS_COUNT: 500
 -    - REPEATED_JVM_DTESTS: null
 -    - REPEATED_JVM_DTESTS_COUNT: 500
 -    - REPEATED_JVM_UPGRADE_DTESTS: null
 -    - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
 -    - REPEATED_DTESTS: null
 -    - REPEATED_DTESTS_COUNT: 500
 -    - REPEATED_UPGRADE_DTESTS: null
 -    - REPEATED_UPGRADE_DTESTS_COUNT: 25
 -    - REPEATED_ANT_TEST_TARGET: testsome
 -    - REPEATED_ANT_TEST_CLASS: null
 -    - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_dtests_vnode_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: xlarge
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 100
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Log Environment Information
          command: |
-           if [ "${REPEATED_JVM_UPGRADE_DTEST_CLASS}" == "<nil>" ]; then
-             echo "Repeated utest class name hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_JVM_UPGRADE_DTEST_COUNT}" == "<nil>" ]; then
-             echo "Repeated utest count hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_JVM_UPGRADE_DTEST_COUNT}" -le 0 ]; then
-             echo "Repeated utest count is lesser or equals than zero, exiting without running any test"
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
+         name: Run repeated Python dtest
+         no_output_timeout: 15m
+         command: |
+           if [ "${REPEATED_DTESTS}" == "<nil>" ]; then
+             echo "Repeated dtest name hasn't been defined, exiting without running any test"
+           elif [ "${REPEATED_DTESTS_COUNT}" == "<nil>" ]; then
+             echo "Repeated dtest count hasn't been defined, exiting without running any test"
+           elif [ "${REPEATED_DTESTS_COUNT}" -le 0 ]; then
+             echo "Repeated dtest count is lesser or equals than zero, exiting without running any test"
            else
  
              # Calculate the number of test iterations to be run by the current parallel runner.
@@@ -265,15 -516,192 +329,102 @@@
              fi
            fi
      - store_test_results:
-         path: /tmp/results/repeated_utest/output
+         path: /tmp/results
      - store_artifacts:
-         path: /tmp/results/repeated_utest/stdout
+         path: /tmp/dtest
+         destination: dtest
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   utests_stress_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: xlarge
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 100
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: |
 -          set -x
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          time mv ~/cassandra /tmp
 -          cd /tmp/cassandra
 -          if [ -d ~/dtest_jars ]; then
 -            cp ~/dtest_jars/dtest* /tmp/cassandra/build/
 -          fi
 -
 -          # Calculate the number of test iterations to be run by the current parallel runner.
 -          count=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))
 -          if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then
 -            count=$((count+1))
 -          fi
 -
 -          # Put manually specified tests and automatically detected tests together, removing duplicates
 -          tests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u)
 -          echo "Tests to be repeated: ${tests}"
 -
 -          # Run each test class as many times as requested.
 -          exit_code="$?"
 -          for test in $tests; do
 -
 -              # Split class and method names from the test name
 -              if [[ $test =~ "#" ]]; then
 -                class=${test%"#"*}
 -                method=${test#*"#"}
 -              else
 -                class=$test
 -                method=""
 -              fi
 -
 -              # Prepare the -Dtest.name argument.
 -              # It can be the fully qualified class name or the short class name, depending on the target.
 -              if [[ $target == "test" || \
 -                    $target == "test-cdc" || \
 -                    $target == "test-compression" || \
 -                    $target == "test-system-keyspace-directory" || \
 -                    $target == "fqltool-test" || \
 -                    $target == "long-test" || \
 -                    $target == "stress-test" ]]; then
 -                name_arg="-Dtest.name=${class##*.}"
 -              else
 -                name_arg="-Dtest.name=$class"
 -              fi
 -
 -              # Prepare the -Dtest.methods argument, which is optional
 -              if [ $method == "" ]; then
 -                methods_arg=""
 -              else
 -                methods_arg="-Dtest.methods=$method"
 -              fi
 -
 -              for i in $(seq -w 1 $count); do
 -                echo "Running test $test, iteration $i of $count"
 -
 -                # run the test
 -                status="passes"
 -                if !( set -o pipefail && \
 -                      ant stress-test-some $name_arg $methods_arg -Dno-build-test=true | \
 -                      tee stdout.txt \
 -                    ); then
 -                  status="fails"
 -                  exit_code=1
 -                fi
 -
 -                # move the stdout output file
 -                dest=/tmp/results/repeated_utests/stdout/${status}/${i}
 -                mkdir -p $dest
 -                mv stdout.txt $dest/${test}.txt
 -
 -                # move the XML output files
 -                source=build/test/output
 -                dest=/tmp/results/repeated_utests/output/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # move the log files
 -                source=build/test/logs
 -                dest=/tmp/results/repeated_utests/logs/${status}/${i}
 -                mkdir -p $dest
 -                if [[ -d $source && -n "$(ls $source)" ]]; then
 -                  mv $source/* $dest/
 -                fi
 -
 -                # maybe stop iterations on test failure
 -                if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then
 -                  break
 -                fi
 -              done
 -          done
 -          (exit ${exit_code})
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and a [...]
+     - store_test_results:
+         path: /tmp/results/repeated_utests/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/stdout
          destination: stdout
      - store_artifacts:
-         path: /tmp/results/repeated_utest/output
+         path: /tmp/results/repeated_utests/output
          destination: junitxml
      - store_artifacts:
-         path: /tmp/results/repeated_utest/logs
+         path: /tmp/results/repeated_utests/logs
          destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
@@@ -291,28 -719,32 +442,35 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 -  j11_unit_tests:
 +  j8_jvm_dtests_vnode:
      docker:
 -    - image: apache/cassandra-testing-ubuntu2004-java11:latest
 +    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: xlarge
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
@@@ -401,28 -833,33 +559,35 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
 -    - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 -    - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 -    - CASSANDRA_USE_JDK11: true
 -  j8_cqlsh_dtests_py3:
 +    - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +  j11_unit_tests:
      docker:
 -    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
 +    - image: apache/cassandra-testing-ubuntu2004-java11:latest
      resource_class: xlarge
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
@@@ -431,130 -868,19 +596,137 @@@
      - attach_workspace:
          at: /home/cassandra
      - run:
 -        name: Clone Cassandra dtest Repository (via git)
 -        command: |
 -          git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
 -    - run:
 -        name: Configure virtualenv and python Dependencies
 +        name: Determine unit Tests to Run
          command: |
 -          # note, this should be super quick as all dependencies should be pre-installed in the docker image
 -          # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
 -          # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
 -          # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
 -          source ~/env3.6/bin/activate
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
 +          # reminder: this code (along with all the steps) is independently executed on every circle container
 +          # so the goal here is to get the circleci script to return the tests *this* container will run
 +          # which we do via the `circleci` cli tool.
 +
 +          rm -fr ~/cassandra-dtest/upgrade_tests
 +          echo "***java tests***"
 +
 +          # get all of our unit test filenames
 +          set -eo pipefail && circleci tests glob "$HOME/cassandra/test/unit/**/*.java" > /tmp/all_java_unit_tests.txt
 +
 +          # split up the unit tests into groups based on the number of containers we have
 +          set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt
 +          set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/unit/;;g" | grep "Test\.java$"  > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
 +          echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt"
 +          cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
 +        no_output_timeout: 15m
 +    - run:
 +        name: Log Environment Information
 +        command: |
 +          echo '*** id ***'
 +          id
 +          echo '*** cat /proc/cpuinfo ***'
 +          cat /proc/cpuinfo
 +          echo '*** free -m ***'
 +          free -m
 +          echo '*** df -m ***'
 +          df -m
 +          echo '*** ifconfig -a ***'
 +          ifconfig -a
 +          echo '*** uname -a ***'
 +          uname -a
 +          echo '*** mount ***'
 +          mount
 +          echo '*** env ***'
 +          env
 +          echo '*** java ***'
 +          which java
 +          java -version
 +    - run:
 +        name: Run Unit Tests (testclasslist)
 +        command: |
 +          set -x
 +          export PATH=$JAVA_HOME/bin:$PATH
 +          time mv ~/cassandra /tmp
 +          cd /tmp/cassandra
 +          if [ -d ~/dtest_jars ]; then
 +            cp ~/dtest_jars/dtest* /tmp/cassandra/build/
 +          fi
 +          test_timeout=$(grep 'name="test.unit.timeout"' build.xml | awk -F'"' '{print $4}' || true)
 +          if [ -z "$test_timeout" ]; then
 +            test_timeout=$(grep 'name="test.timeout"' build.xml | awk -F'"' '{print $4}')
 +          fi
 +          ant testclasslist   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
 +        no_output_timeout: 15m
 +    - store_test_results:
 +        path: /tmp/cassandra/build/test/output/
 +    - store_artifacts:
 +        path: /tmp/cassandra/build/test/output
 +        destination: junitxml
 +    - store_artifacts:
 +        path: /tmp/cassandra/build/test/logs
 +        destination: logs
 +    environment:
 +    - ANT_HOME: /usr/share/ant
 +    - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - LANG: en_US.UTF-8
 +    - KEEP_TEST_DIR: true
 +    - DEFAULT_DIR: /home/cassandra/cassandra-dtest
 +    - PYTHONIOENCODING: utf-8
 +    - PYTHONUNBUFFERED: true
 +    - CASS_DRIVER_NO_EXTENSIONS: true
 +    - CASS_DRIVER_NO_CYTHON: true
 +    - CASSANDRA_SKIP_SYNC: true
 +    - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
 +    - DTEST_BRANCH: trunk
 +    - CCM_MAX_HEAP_SIZE: 1024M
 +    - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
++    - REPEATED_TESTS_STOP_ON_FAILURE: false
++    - REPEATED_UTESTS: null
++    - REPEATED_UTESTS_COUNT: 500
++    - REPEATED_UTESTS_FQLTOOL: null
++    - REPEATED_UTESTS_FQLTOOL_COUNT: 500
++    - REPEATED_UTESTS_LONG: null
++    - REPEATED_UTESTS_LONG_COUNT: 100
++    - REPEATED_UTESTS_STRESS: null
++    - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
++    - REPEATED_JVM_DTESTS: null
++    - REPEATED_JVM_DTESTS_COUNT: 500
++    - REPEATED_JVM_UPGRADE_DTESTS: null
++    - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
++    - REPEATED_DTESTS: null
++    - REPEATED_DTESTS_COUNT: 500
++    - REPEATED_UPGRADE_DTESTS: null
++    - REPEATED_UPGRADE_DTESTS_COUNT: 25
++    - REPEATED_ANT_TEST_TARGET: testsome
++    - REPEATED_ANT_TEST_CLASS: null
++    - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
++    - REPEATED_ANT_TEST_COUNT: 500
 +    - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - CASSANDRA_USE_JDK11: true
-   repeated_upgrade_dtest:
++  j8_cqlsh_dtests_py3:
 +    docker:
 +    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
 +    resource_class: xlarge
 +    working_directory: ~/
 +    shell: /bin/bash -eo pipefail -l
 +    parallelism: 100
 +    steps:
 +    - attach_workspace:
 +        at: /home/cassandra
 +    - run:
 +        name: Clone Cassandra dtest Repository (via git)
 +        command: |
 +          git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
 +    - run:
 +        name: Configure virtualenv and python Dependencies
 +        command: |
 +          # note, this should be super quick as all dependencies should be pre-installed in the docker image
 +          # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
 +          # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
 +          # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
 +          source ~/env3.6/bin/activate
 +          export PATH=$JAVA_HOME/bin:$PATH
 +          pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
            pip3 uninstall -y cqlsh
            pip3 freeze
      - run:
@@@ -635,28 -934,32 +780,35 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_cqlsh-dtests-py38-no-vnodes:
+   j11_cqlsh_dtests_py38:
      docker:
-     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
      resource_class: xlarge
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
@@@ -731,26 -1034,31 +883,34 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j11_cqlsh-dtests-py3-with-vnodes:
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j11_repeated_ant_test:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11:latest
      resource_class: xlarge
@@@ -758,6 -1066,190 +918,200 @@@
      shell: /bin/bash -eo pipefail -l
      parallelism: 100
      steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Run repeated JUnit test
+         no_output_timeout: 15m
+         command: |
+           if [ "${REPEATED_ANT_TEST_CLASS}" == "<nil>" ]; then
+             echo "Repeated utest class name hasn't been defined, exiting without running any test"
+           elif [ "${REPEATED_ANT_TEST_COUNT}" == "<nil>" ]; then
+             echo "Repeated utest count hasn't been defined, exiting without running any test"
+           elif [ "${REPEATED_ANT_TEST_COUNT}" -le 0 ]; then
+             echo "Repeated utest count is lesser or equals than zero, exiting without running any test"
+           else
+ 
+             # Calculate the number of test iterations to be run by the current parallel runner.
+             # Since we are running the same test multiple times there is no need to use `circleci tests split`.
+             count=$((${REPEATED_ANT_TEST_COUNT} / CIRCLE_NODE_TOTAL))
+             if (($CIRCLE_NODE_INDEX < (${REPEATED_ANT_TEST_COUNT} % CIRCLE_NODE_TOTAL))); then
+               count=$((count+1))
+             fi
+ 
+             if (($count <= 0)); then
+               echo "No tests to run in this runner"
+             else
+               echo "Running ${REPEATED_ANT_TEST_TARGET} ${REPEATED_ANT_TEST_CLASS} ${REPEATED_ANT_TEST_METHODS} ${REPEATED_ANT_TEST_COUNT} times"
+ 
+               set -x
+               export PATH=$JAVA_HOME/bin:$PATH
+               time mv ~/cassandra /tmp
+               cd /tmp/cassandra
+               if [ -d ~/dtest_jars ]; then
+                 cp ~/dtest_jars/dtest* /tmp/cassandra/build/
+               fi
+ 
+               target=${REPEATED_ANT_TEST_TARGET}
+               class_path=${REPEATED_ANT_TEST_CLASS}
+               class_name="${class_path##*.}"
+ 
+               # Prepare the -Dtest.name argument.
+               # It can be the fully qualified class name or the short class name, depending on the target.
+               if [[ $target == "test" || \
+                     $target == "test-cdc" || \
+                     $target == "test-compression" || \
+                     $target == "test-system-keyspace-directory" || \
+                     $target == "fqltool-test" || \
+                     $target == "long-test" || \
 -                    $target == "stress-test" ]]; then
++                    $target == "stress-test" || \
++                    $target == "test-simulator-dtest" ]]; then
+                 name="-Dtest.name=$class_name"
+               else
+                 name="-Dtest.name=$class_path"
+               fi
+ 
+               # Prepare the -Dtest.methods argument, which is optional
+               if [ "${REPEATED_ANT_TEST_METHODS}" == "<nil>" ]; then
+                 methods=""
+               else
+                 methods="-Dtest.methods=${REPEATED_ANT_TEST_METHODS}"
+               fi
+ 
++              # Prepare the JVM dtests vnodes argument, which is optional
++              vnodes_args=""
++              if ${REPEATED_ANT_TEST_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="$?"
+               for i in $(seq -w 1 $count); do
+ 
+                 echo "Running test iteration $i of $count"
+ 
+                 # 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
+ 
+                 # move the stdout output file
+                 dest=/tmp/results/repeated_utest/stdout/${status}/${i}
+                 mkdir -p $dest
+                 mv stdout.txt $dest/${REPEATED_ANT_TEST_TARGET}-${REPEATED_ANT_TEST_CLASS}.txt
+ 
+                 # move the XML output files
+                 source=build/test/output
+                 dest=/tmp/results/repeated_utest/output/${status}/${i}
+                 mkdir -p $dest
+                 if [[ -d $source && -n "$(ls $source)" ]]; then
+                   mv $source/* $dest/
+                 fi
+ 
+                 # move the log files
+                 source=build/test/logs
+                 dest=/tmp/results/repeated_utest/logs/${status}/${i}
+                 mkdir -p $dest
+                 if [[ -d $source && -n "$(ls $source)" ]]; then
+                   mv $source/* $dest/
+                 fi
+ 
+                 # maybe stop iterations on test failure
+                 if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then
+                   break
+                 fi
+               done
+ 
+               (exit ${exit_code})
+             fi
+           fi
+     - store_test_results:
+         path: /tmp/results/repeated_utest/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utest/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utest/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utest/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j8_cqlsh_dtests_py3_vnode:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: xlarge
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 100
+     steps:
      - attach_workspace:
          at: /home/cassandra
      - run:
@@@ -827,27 -1319,30 +1181,33 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - CASSANDRA_USE_JDK11: true
-   j11_cqlsh-dtests-py3-no-vnodes:
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_cqlsh_dtests_py3:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11:latest
      resource_class: xlarge
@@@ -924,154 -1419,42 +1284,64 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
      - CASSANDRA_USE_JDK11: true
-   j11_cqlsh-dtests-py38-with-vnodes:
 -  utests_long_repeat:
++  j11_jvm_dtests_vnode:
      docker:
 -    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
 +    - image: apache/cassandra-testing-ubuntu2004-java11:latest
      resource_class: xlarge
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
--    parallelism: 100
++    parallelism: 5
      steps:
      - attach_workspace:
          at: /home/cassandra
 +    - run:
-         name: Clone Cassandra dtest Repository (via git)
++        name: Determine distributed Tests to Run
 +        command: |
-           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
++          # reminder: this code (along with all the steps) is independently executed on every circle container
++          # so the goal here is to get the circleci script to return the tests *this* container will run
++          # which we do via the `circleci` cli tool.
++
++          rm -fr ~/cassandra-dtest/upgrade_tests
++          echo "***java tests***"
++
++          # get all of our unit test filenames
++          set -eo pipefail && circleci tests glob "$HOME/cassandra/test/distributed/**/*.java" > /tmp/all_java_unit_tests.txt
++
++          # split up the unit tests into groups based on the number of containers we have
++          set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt
++          set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/distributed/;;g" | grep "Test\.java$" | grep -v upgrade > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
++          echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt"
++          cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
++        no_output_timeout: 15m
      - run:
-         name: Configure virtualenv and python Dependencies
-         command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.8/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
-         name: Determine Tests to Run (j11_with_vnodes)
-         no_output_timeout: 5m
-         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.8/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j11_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip [...]
-     - run:
-         name: Run dtests (j11_with_vnodes)
-         no_output_timeout: 15m
-         command: |
-           echo "cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt"
-           cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt
- 
-           source ~/env3.8/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.8' ]; then
-             export CQLSH_PYTHON=/usr/bin/python3.8
-           fi
- 
-           java -version
-           cd ~/cassandra-dtest
-           mkdir -p /tmp/dtest
- 
-           echo "env: $(env)"
-           echo "** done env"
-           mkdir -p /tmp/results/dtests
-           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt`
-           set -o pipefail && cd ~/cassandra-dtest && pytest --use-vnodes --num-tokens=16 --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_with_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
-     - store_test_results:
-         path: /tmp/results
-     - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest_j11_with_vnodes
-     - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_j11_with_vnodes_logs
-     environment:
-     - ANT_HOME: /usr/share/ant
-     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-     - LANG: en_US.UTF-8
-     - KEEP_TEST_DIR: true
-     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
-     - PYTHONIOENCODING: utf-8
-     - PYTHONUNBUFFERED: true
-     - CASS_DRIVER_NO_EXTENSIONS: true
-     - CASS_DRIVER_NO_CYTHON: true
-     - CASSANDRA_SKIP_SYNC: true
-     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
-     - DTEST_BRANCH: trunk
-     - CCM_MAX_HEAP_SIZE: 1024M
-     - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - CASSANDRA_USE_JDK11: true
-   j11_jvm_dtests_vnode:
-     docker:
-     - image: apache/cassandra-testing-ubuntu2004-java11:latest
-     resource_class: xlarge
-     working_directory: ~/
-     shell: /bin/bash -eo pipefail -l
-     parallelism: 5
-     steps:
-     - attach_workspace:
-         at: /home/cassandra
-     - run:
-         name: Determine distributed Tests to Run
-         command: |
-           # reminder: this code (along with all the steps) is independently executed on every circle container
-           # so the goal here is to get the circleci script to return the tests *this* container will run
-           # which we do via the `circleci` cli tool.
- 
-           rm -fr ~/cassandra-dtest/upgrade_tests
-           echo "***java tests***"
- 
-           # get all of our unit test filenames
-           set -eo pipefail && circleci tests glob "$HOME/cassandra/test/distributed/**/*.java" > /tmp/all_java_unit_tests.txt
- 
-           # split up the unit tests into groups based on the number of containers we have
-           set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt
-           set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/distributed/;;g" | grep "Test\.java$" | grep -v upgrade > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
-           echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt"
-           cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
-         no_output_timeout: 15m
-     - run:
-         name: Log Environment Information
+         name: Log Environment Information
          command: |
            echo '*** id ***'
            id
@@@ -1132,33 -1599,36 +1402,40 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
 -    - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 -    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 -  j8_unit_tests_repeat:
 +    - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - CASSANDRA_USE_JDK11: true
 +  j8_simulator_dtests:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
 -    resource_class: xlarge
 +    resource_class: medium
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
 -    parallelism: 100
 +    parallelism: 1
      steps:
      - attach_workspace:
          at: /home/cassandra
@@@ -1239,26 -1778,30 +1516,33 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_cqlsh-dtests-py3-with-vnodes:
 -  j8_cqlsh-dtests-py2-no-vnodes:
++  utests_long_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: xlarge
@@@ -1269,56 -1812,56 +1553,42 @@@
      - attach_workspace:
          at: /home/cassandra
      - run:
--        name: Clone Cassandra dtest Repository (via git)
--        command: |
--          git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
--    - run:
--        name: Configure virtualenv and python Dependencies
++        name: Log Environment Information
          command: |
--          # note, this should be super quick as all dependencies should be pre-installed in the docker image
--          # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
--          # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
--          # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
--          source ~/env3.6/bin/activate
--          export PATH=$JAVA_HOME/bin:$PATH
--          pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
--          pip3 uninstall -y cqlsh
--          pip3 freeze
--    - run:
-         name: Determine Tests to Run (j8_with_vnodes)
 -        name: Determine Tests to Run (j8_without_vnodes)
--        no_output_timeout: 5m
-         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j8_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip- [...]
 -        command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j8_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --skip-resource-i [...]
++          echo '*** id ***'
++          id
++          echo '*** cat /proc/cpuinfo ***'
++          cat /proc/cpuinfo
++          echo '*** free -m ***'
++          free -m
++          echo '*** df -m ***'
++          df -m
++          echo '*** ifconfig -a ***'
++          ifconfig -a
++          echo '*** uname -a ***'
++          uname -a
++          echo '*** mount ***'
++          mount
++          echo '*** env ***'
++          env
++          echo '*** java ***'
++          which java
++          java -version
      - run:
-         name: Run dtests (j8_with_vnodes)
 -        name: Run dtests (j8_without_vnodes)
++        name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
--        command: |
-           echo "cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt"
-           cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt
 -          echo "cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt"
 -          cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt
--
--          source ~/env3.6/bin/activate
--          export PATH=$JAVA_HOME/bin:$PATH
-           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.6' ]; then
-             export CQLSH_PYTHON=/usr/bin/python3.6
 -          if [ -n 'CQLSH_PYTHON=/usr/bin/python2.7' ]; then
 -            export CQLSH_PYTHON=/usr/bin/python2.7
--          fi
--
--          java -version
--          cd ~/cassandra-dtest
--          mkdir -p /tmp/dtest
--
--          echo "env: $(env)"
--          echo "** done env"
--          mkdir -p /tmp/results/dtests
--          # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt`
-           set -o pipefail && cd ~/cassandra-dtest && pytest --use-vnodes --num-tokens=16 --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j8_with_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
 -          export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt`
 -          set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j8_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and autom [...]
      - store_test_results:
--        path: /tmp/results
++        path: /tmp/results/repeated_utests/output
      - store_artifacts:
--        path: /tmp/dtest
-         destination: dtest_j8_with_vnodes
 -        destination: dtest_j8_without_vnodes
++        path: /tmp/results/repeated_utests/stdout
++        destination: stdout
      - store_artifacts:
--        path: ~/cassandra-dtest/logs
-         destination: dtest_j8_with_vnodes_logs
 -        destination: dtest_j8_without_vnodes_logs
++        path: /tmp/results/repeated_utests/output
++        destination: junitxml
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/logs
++        destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
      - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
@@@ -1335,28 -1878,32 +1605,35 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
      - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j11_repeated_dtest:
 -  j8_upgrade_dtests_repeat:
++  j8_unit_tests_repeat:
      docker:
-     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: xlarge
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
@@@ -1365,105 -1912,85 +1642,42 @@@
      - attach_workspace:
          at: /home/cassandra
      - run:
 -        name: Clone Cassandra dtest Repository (via git)
 -        command: |
 -          git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
 -    - run:
 -        name: Configure virtualenv and python Dependencies
 +        name: Log Environment Information
          command: |
 -          # note, this should be super quick as all dependencies should be pre-installed in the docker image
 -          # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
 -          # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
 -          # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
 -          source ~/env3.6/bin/activate
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
 -          pip3 uninstall -y cqlsh
 -          pip3 freeze
 +          echo '*** id ***'
 +          id
 +          echo '*** cat /proc/cpuinfo ***'
 +          cat /proc/cpuinfo
 +          echo '*** free -m ***'
 +          free -m
 +          echo '*** df -m ***'
 +          df -m
 +          echo '*** ifconfig -a ***'
 +          ifconfig -a
 +          echo '*** uname -a ***'
 +          uname -a
 +          echo '*** mount ***'
 +          mount
 +          echo '*** env ***'
 +          env
 +          echo '*** java ***'
 +          which java
 +          java -version
      - run:
-         name: Clone Cassandra dtest Repository (via git)
-         command: |
-           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
-     - run:
-         name: Configure virtualenv and python Dependencies
-         command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
--        name: Run repeated Python dtest
++        name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
--        command: |
-           if [ "${REPEATED_DTEST_NAME}" == "<nil>" ]; then
 -          if [ "${REPEATED_UPGRADE_DTESTS}" == "<nil>" ]; then
--            echo "Repeated dtest name hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_DTEST_COUNT}" == "<nil>" ]; then
 -          elif [ "${REPEATED_UPGRADE_DTESTS_COUNT}" == "<nil>" ]; then
--            echo "Repeated dtest count hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_DTEST_COUNT}" -le 0 ]; then
 -          elif [ "${REPEATED_UPGRADE_DTESTS_COUNT}" -le 0 ]; then
--            echo "Repeated dtest count is lesser or equals than zero, exiting without running any test"
--          else
--
--            # Calculate the number of test iterations to be run by the current parallel runner.
--            # Since we are running the same test multiple times there is no need to use `circleci tests split`.
-             count=$((${REPEATED_DTEST_COUNT} / CIRCLE_NODE_TOTAL))
-             if (($CIRCLE_NODE_INDEX < (${REPEATED_DTEST_COUNT} % CIRCLE_NODE_TOTAL))); then
 -            count=$((${REPEATED_UPGRADE_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))
 -            if (($CIRCLE_NODE_INDEX < (${REPEATED_UPGRADE_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then
--              count=$((count+1))
--            fi
--
--            if (($count <= 0)); then
--              echo "No tests to run in this runner"
--            else
-               echo "Running ${REPEATED_DTEST_NAME} $count times"
 -              echo "Running ${REPEATED_UPGRADE_DTESTS} $count times"
--
--              source ~/env3.6/bin/activate
--              export PATH=$JAVA_HOME/bin:$PATH
--
--              java -version
--              cd ~/cassandra-dtest
--              mkdir -p /tmp/dtest
--
--              echo "env: $(env)"
--              echo "** done env"
--              mkdir -p /tmp/results/dtests
 -
 -              tests_arg=$(echo ${REPEATED_UPGRADE_DTESTS} | sed -e "s/,/ /g")
--
--              stop_on_failure_arg=""
-               if ${REPEATED_DTEST_STOP_ON_FAILURE}; then
 -              if ${REPEATED_TESTS_STOP_ON_FAILURE}; then
--                stop_on_failure_arg="-x"
--              fi
--
--              vnodes_args=""
-               if ${REPEATED_DTEST_VNODES}; then
 -              if false; then
--                vnodes_args="--use-vnodes --num-tokens=16"
--              fi
--
--              upgrade_arg=""
-               if false; then
-                 upgrade_arg="--execute-upgrade-tests"
 -              if true; then
 -                upgrade_arg="--execute-upgrade-tests --upgrade-target-version-only --upgrade-version-selection all"
--              fi
--
--              # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-               set -o pipefail && cd ~/cassandra-dtest && pytest $vnodes_args --count=$count $stop_on_failure_arg $upgrade_arg --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir ${REPEATED_DTEST_NAME} | tee /tmp/dtest/stdout.txt
 -              set -o pipefail && cd ~/cassandra-dtest && pytest $vnodes_args --count=$count $stop_on_failure_arg $upgrade_arg --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $tests_arg | tee /tmp/dtest/stdout.txt
--            fi
--          fi
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
      - store_test_results:
--        path: /tmp/results
++        path: /tmp/results/repeated_utests/output
      - store_artifacts:
--        path: /tmp/dtest
--        destination: dtest
++        path: /tmp/results/repeated_utests/stdout
++        destination: stdout
      - store_artifacts:
--        path: ~/cassandra-dtest/logs
--        destination: dtest_logs
++        path: /tmp/results/repeated_utests/output
++        destination: junitxml
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/logs
++        destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
      - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
@@@ -1480,29 -2007,32 +1694,35 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - CASSANDRA_USE_JDK11: true
-   j8_repeated_dtest:
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 -  j11_cqlsh-dtests-py2-with-vnodes:
++  j8_upgrade_dtests_repeat:
      docker:
 -    - image: apache/cassandra-testing-ubuntu2004-java11:latest
 +    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: xlarge
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
@@@ -1527,59 -2057,32 +1747,61 @@@
            pip3 uninstall -y cqlsh
            pip3 freeze
      - run:
 -        name: Determine Tests to Run (j11_with_vnodes)
 -        no_output_timeout: 5m
 -        command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j11_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip [...]
 -    - run:
 -        name: Run dtests (j11_with_vnodes)
 +        name: Run repeated Python dtest
          no_output_timeout: 15m
          command: |
-           if [ "${REPEATED_DTEST_NAME}" == "<nil>" ]; then
 -          echo "cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt"
 -          cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt
++          if [ "${REPEATED_UPGRADE_DTESTS}" == "<nil>" ]; then
 +            echo "Repeated dtest name hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_DTEST_COUNT}" == "<nil>" ]; then
++          elif [ "${REPEATED_UPGRADE_DTESTS_COUNT}" == "<nil>" ]; then
 +            echo "Repeated dtest count hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_DTEST_COUNT}" -le 0 ]; then
++          elif [ "${REPEATED_UPGRADE_DTESTS_COUNT}" -le 0 ]; then
 +            echo "Repeated dtest count is lesser or equals than zero, exiting without running any test"
 +          else
 +
 +            # Calculate the number of test iterations to be run by the current parallel runner.
 +            # Since we are running the same test multiple times there is no need to use `circleci tests split`.
-             count=$((${REPEATED_DTEST_COUNT} / CIRCLE_NODE_TOTAL))
-             if (($CIRCLE_NODE_INDEX < (${REPEATED_DTEST_COUNT} % CIRCLE_NODE_TOTAL))); then
++            count=$((${REPEATED_UPGRADE_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))
++            if (($CIRCLE_NODE_INDEX < (${REPEATED_UPGRADE_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then
 +              count=$((count+1))
 +            fi
 +
 +            if (($count <= 0)); then
 +              echo "No tests to run in this runner"
 +            else
-               echo "Running ${REPEATED_DTEST_NAME} $count times"
++              echo "Running ${REPEATED_UPGRADE_DTESTS} $count times"
 +
 +              source ~/env3.6/bin/activate
 +              export PATH=$JAVA_HOME/bin:$PATH
 +
 +              java -version
 +              cd ~/cassandra-dtest
 +              mkdir -p /tmp/dtest
 +
 +              echo "env: $(env)"
 +              echo "** done env"
 +              mkdir -p /tmp/results/dtests
  
 -          source ~/env3.6/bin/activate
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          if [ -n 'CQLSH_PYTHON=/usr/bin/python2.7' ]; then
 -            export CQLSH_PYTHON=/usr/bin/python2.7
 -          fi
++              tests_arg=$(echo ${REPEATED_UPGRADE_DTESTS} | sed -e "s/,/ /g")
+ 
 -          java -version
 -          cd ~/cassandra-dtest
 -          mkdir -p /tmp/dtest
 +              stop_on_failure_arg=""
-               if ${REPEATED_DTEST_STOP_ON_FAILURE}; then
++              if ${REPEATED_TESTS_STOP_ON_FAILURE}; then
 +                stop_on_failure_arg="-x"
 +              fi
  
 -          echo "env: $(env)"
 -          echo "** done env"
 -          mkdir -p /tmp/results/dtests
 -          # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
 -          export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt`
 -          set -o pipefail && cd ~/cassandra-dtest && pytest --use-vnodes --num-tokens=16 --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_with_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
 +              vnodes_args=""
-               if ${REPEATED_DTEST_VNODES}; then
++              if false; then
 +                vnodes_args="--use-vnodes --num-tokens=16"
 +              fi
 +
 +              upgrade_arg=""
-               if false; then
-                 upgrade_arg="--execute-upgrade-tests"
++              if true; then
++                upgrade_arg="--execute-upgrade-tests --upgrade-target-version-only --upgrade-version-selection all"
 +              fi
 +
 +              # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-               set -o pipefail && cd ~/cassandra-dtest && pytest $vnodes_args --count=$count $stop_on_failure_arg $upgrade_arg --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir ${REPEATED_DTEST_NAME} | tee /tmp/dtest/stdout.txt
++              set -o pipefail && cd ~/cassandra-dtest && pytest $vnodes_args --count=$count $stop_on_failure_arg $upgrade_arg --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $tests_arg | tee /tmp/dtest/stdout.txt
 +            fi
 +          fi
      - store_test_results:
          path: /tmp/results
      - store_artifacts:
@@@ -1604,28 -2107,33 +1826,35 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 1024M
      - CCM_HEAP_NEWSIZE: 256M
-     - 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
-     - REPEATED_DTEST_VNODES: false
-     - REPEATED_DTEST_COUNT: 100
-     - REPEATED_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_UPGRADE_DTEST_NAME: null
-     - REPEATED_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false
-     - REPEATED_JVM_UPGRADE_DTEST_CLASS: null
-     - REPEATED_JVM_UPGRADE_DTEST_METHODS: null
-     - REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
-     - REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
 -    - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 -    - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 -    - CASSANDRA_USE_JDK11: true
 +    - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j11_dtests-with-vnodes:
+   utests_system_keyspace_directory_repeat:
      docker:
-     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: xlarge
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
@@@ -1656,37 -2164,113 +1885,20 @@@
            which java
            java -version
      - run:
-         name: Clone Cassandra dtest Repository (via git)
-         command: |
-           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
-     - run:
-         name: Configure virtualenv and python Dependencies
-         command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
-         name: Determine Tests to Run (j11_with_vnodes)
-         no_output_timeout: 5m
-         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j11_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip [...]
-     - run:
-         name: Run dtests (j11_with_vnodes)
+         name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "echo \"cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt\"\ncat /tmp/split_dtest_tests_j11_with_vnodes_final.txt\n\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\nif [ -n '' ]; then\n  export \nfi\n\njava -version\ncd ~/cassandra-dtest\nmkdir -p /tmp/dtest\n\necho \"env: $(env)\"\necho \"** done env\"\nmkdir -p /tmp/results/dtests\n# we need the \"set -o pipefail\" here so that the exit code that circleci will actually use is from pytest and not the [...]
 -        command: |
 -          set -x
 -          export PATH=$JAVA_HOME/bin:$PATH
 -          time mv ~/cassandra /tmp
 -          cd /tmp/cassandra
 -          if [ -d ~/dtest_jars ]; then
 -            cp ~/dtest_jars/dtest* /tmp/cassandra/build/
 -          fi
 -
 -          # Calculate the number of test iterations to be run by the current parallel runner.
 -          count=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))
 -          if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then
 -            count=$((count+1))
 -          fi
 -
 -          # Put manually specified tests and automatically detected tests together, removing duplicates
 -          tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u)
 -          echo "Tests to be repeated: ${tests}"
 -
 -          # Run each test class as many times as requested.
 -          exit_code="$?"
 -          for test in $tests; do
 -
 -              # Split class and method names from the test name
 -              if [[ $test =~ "#" ]]; then
 -                class=${test%"#"*}
 -                method=${test#*"#"}
 -              else
 -                class=$test
 -                method=""
 -              fi
 -
 -              # Prepare the -Dtest.name argument.
 -              # It can be the fully qualified class name or the short class name, depending on the target.
 -              if [[ $target == "test" || \
 -                    $target == "test-cdc" || \
 -                    $target == "test-compression" || \
 -                    $target == "test-system-keyspace-directory" || \
 -                    $target == "fqltool-test" || \
 -                    $target == "long-test" || \
 -                    $target == "stress-test" ]]; then
 -                name_arg="-Dtest.name=${class##*.}"
 -              else
 -                name_arg="-Dtest.name=$class"
 -              fi
 -
 -              # Prepare the -Dtest.methods argument, which is optional
 -              if [ $method == "" ]; then
 -                methods_arg=""
 -              else
 -                methods_arg="-Dtest.methods=$method"
 -              fi
 -
 -              for i in $(seq -w 1 $count); do
 -                echo "Running test $test, iteration $i of $count"
 -
 -                # run the test
 -                status="passes"
 -                if !( set -o pipefail && \
 -                      ant test-system-keyspace-directory $name_arg $methods_arg -Dno-build-test=true | \
 -                      tee stdout.txt \
 -                    ); then
 -                  status="fails"
 -                  exit_code=1
 -                fi
 -
 -                # move the stdout output file
 -                dest=/tmp/results/repeated_utests/stdout/${status}/${i}
... 17449 lines suppressed ...


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