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:17 UTC

[cassandra] branch cassandra-3.11 updated (2e6528542b -> f13cdddcad)

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

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


    from 2e6528542b Suppress CVE-2022-42003 and CVE-2022-42004
     new 9aa28a81ec CircleCI: Automatically detect and repeat new or modified JUnit tests
     new f13cdddcad Merge branch 'cassandra-3.0' into cassandra-3.11

The 2 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                |  581 +++++--
 .circleci/config-2_1.yml.high_res.patch |   12 +-
 .circleci/config-2_1.yml.mid_res.patch  |   20 +-
 .circleci/config.yml                    | 2632 ++++++++++++++++++++----------
 .circleci/config.yml.HIGHRES            | 2384 ++++++++++++++++++++--------
 .circleci/config.yml.LOWRES             | 2634 ++++++++++++++++++++++---------
 .circleci/config.yml.MIDRES             | 2386 ++++++++++++++++++++--------
 .circleci/generate.sh                   |  149 +-
 .circleci/readme.md                     |  105 +-
 build.xml                               |   27 +-
 10 files changed, 7846 insertions(+), 3084 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-3.0' into cassandra-3.11

Posted by ad...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit f13cdddcad17a4c674c3011e7fff714d4f89f683
Merge: 2e6528542b 9aa28a81ec
Author: Andrés de la Peña <a....@gmail.com>
AuthorDate: Tue Oct 18 16:47:08 2022 +0100

    Merge branch 'cassandra-3.0' into cassandra-3.11

 .circleci/config-2_1.yml                |  581 +++++--
 .circleci/config-2_1.yml.high_res.patch |   12 +-
 .circleci/config-2_1.yml.mid_res.patch  |   20 +-
 .circleci/config.yml                    | 2632 ++++++++++++++++++++----------
 .circleci/config.yml.HIGHRES            | 2384 ++++++++++++++++++++--------
 .circleci/config.yml.LOWRES             | 2634 ++++++++++++++++++++++---------
 .circleci/config.yml.MIDRES             | 2386 ++++++++++++++++++++--------
 .circleci/generate.sh                   |  149 +-
 .circleci/readme.md                     |  105 +-
 build.xml                               |   27 +-
 10 files changed, 7846 insertions(+), 3084 deletions(-)

diff --cc .circleci/config-2_1.yml
index eca0698673,0b22f29349..c3703d699d
--- a/.circleci/config-2_1.yml
+++ b/.circleci/config-2_1.yml
@@@ -43,59 -43,77 +43,85 @@@ 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 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 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:
-     # 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_METHODS:
+     # The number of times that the repeated JUnit test should be run.
+     REPEATED_ANT_TEST_COUNT: 500
  
  j8_par_executor: &j8_par_executor
    executor:
@@@ -174,19 -210,19 +218,31 @@@ separate_jobs: &separate_job
          requires:
            - start_utests_compression
            - build
+     - start_utests_compression_repeat:
+         type: approval
+     - utests_compression_repeat:
+         requires:
+           - start_utests_compression_repeat
+           - build
 +    - start_utests_stress:
 +        type: approval
 +    - utests_stress:
 +        requires:
 +          - start_utests_stress
 +          - build
++    - start_utests_stress_repeat:
++        type: approval
++    - utests_stress_repeat:
++        requires:
++          - start_utests_stress_repeat
++          - build
      - start_j8_dtest_jars_build:
          type: approval
      - j8_dtest_jars_build:
          requires:
 -          - start_j8_dtest_jars_build
            - build
 +          - start_j8_dtest_jars_build
-     - start_jvm_upgrade_dtest:
+     - start_jvm_upgrade_dtests:
          type: approval
      - j8_jvm_upgrade_dtests:
          requires:
@@@ -199,46 -241,46 +261,45 @@@
          requires:
            - start_j8_dtests
            - build
-     - j8_dtests-no-vnodes:
+     - start_j8_dtests_repeat:
+         type: approval
+     - j8_dtests_repeat:
          requires:
-           - start_j8_dtests
+           - start_j8_dtests_repeat
            - build
-     # Java 8 upgrade tests
-     - start_upgrade_tests:
+     - start_j8_dtests_vnode:
          type: approval
-     - j8_upgradetests-no-vnodes:
+     - j8_dtests_vnode:
          requires:
-           - start_upgrade_tests
+           - start_j8_dtests_vnode
            - build
-     # Java 8 repeated utest
-     - start_j8_repeated_utest:
+     - start_j8_dtests_vnode_repeat:
          type: approval
-     - j8_repeated_utest:
+     - j8_dtests_vnode_repeat:
          requires:
-           - start_j8_repeated_utest
+           - start_j8_dtests_vnode_repeat
            - build
-     # Java 8 repeated dtest
-     - start_j8_repeated_dtest:
+     # Java 8 upgrade tests
 -    - start_j8_upgrade_dtests:
++    - start_upgrade_dtests:
          type: approval
-     - j8_repeated_dtest:
+     - j8_upgrade_dtests:
          requires:
-           - start_j8_repeated_dtest
 -          - start_j8_upgrade_dtests
++          - start_upgrade_dtests
            - build
-     # Repeated Python upgrade dtest
-     - start_repeated_upgrade_dtest:
+     - start_j8_upgrade_dtests_repeat:
          type: approval
-     - repeated_upgrade_dtest:
+     - j8_upgrade_dtests_repeat:
          requires:
-           - start_repeated_upgrade_dtest
+           - start_j8_upgrade_dtests_repeat
            - build
-     # Repeated JVM upgrade dtest
-     - start_repeated_jvm_upgrade_dtest:
+     # Java 8 repeated utest
+     - start_j8_repeated_ant_test:
          type: approval
-     - repeated_jvm_upgrade_dtest:
+     - j8_repeated_ant_test:
          requires:
-           - start_repeated_jvm_upgrade_dtest
-           - j8_dtest_jars_build
+           - start_j8_repeated_ant_test
+           - build
  
 -
  pre-commit_jobs: &pre-commit_jobs
    jobs:
      - start_pre-commit_tests:
@@@ -266,66 -318,46 +337,60 @@@
          requires:
            - start_utests_compression
            - build
+     - utests_compression_repeat:
+         requires:
+           - start_utests_compression
+           - build
 +    - start_utests_stress:
 +        type: approval
 +    - utests_stress:
 +        requires:
 +          - start_utests_stress
 +          - build
-     - start_j8_dtest_jars_build:
++    - utests_stress_repeat:
++        requires:
++          - start_utests_stress
++          - build
+     - start_jvm_upgrade_dtests:
          type: approval
      - j8_dtest_jars_build:
          requires:
 -          - start_jvm_upgrade_dtests
            - 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:
            - build
-     - j8_dtests-no-vnodes:
+     - j8_dtests_repeat:
          requires:
            - build
-     # Java 8 upgrade tests (on request)
-     - start_upgrade_tests:
-         type: approval
-     - j8_upgradetests-no-vnodes:
+     - j8_dtests_vnode:
          requires:
-           - start_upgrade_tests
            - build
-     # Java 8 repeated utest (on request)
-     - start_j8_repeated_utest:
-         type: approval
-     - j8_repeated_utest:
+     - j8_dtests_vnode_repeat:
          requires:
-           - start_j8_repeated_utest
            - build
-     # Java 8 repeated dtest (on request)
-     - start_j8_repeated_dtest:
+     # Java 8 upgrade tests (on request)
 -    - start_upgrade_dtests:
++    - start_upgrade_tests:
          type: approval
-     - j8_repeated_dtest:
+     - j8_upgrade_dtests:
          requires:
-           - start_j8_repeated_dtest
 -          - start_upgrade_dtests
++          - start_upgrade_tests
            - build
-     # Repeated Python upgrade dtest (on request)
-     - start_repeated_upgrade_dtest:
-         type: approval
-     - repeated_upgrade_dtest:
+     - j8_upgrade_dtests_repeat:
          requires:
-           - start_repeated_upgrade_dtest
 -          - start_upgrade_dtests
++          - start_upgrade_tests
 +          - build
-     # Repeated JVM upgrade dtest (on request)
-     - start_repeated_jvm_upgrade_dtest:
-         type: approval
-     - repeated_jvm_upgrade_dtest:
++    # Java 8 repeated utest
++    - j8_repeated_ant_test:
 +        requires:
-           - start_repeated_jvm_upgrade_dtest
-           - j8_dtest_jars_build
+           - build
  
  workflows:
      version: 2
@@@ -426,15 -458,7 +491,15 @@@ jobs
        - run_parallel_junit_tests:
            target: testclasslist-compression
  
 +  utests_stress:
 +    <<: *j8_seq_executor
 +    steps:
 +      - attach_workspace:
 +          at: /home/cassandra
 +      - run_junit_tests:
 +          target: stress-test
 +
-   j8_dtests-with-vnodes:
+   j8_dtests_vnode:
      <<: *j8_par_executor
      steps:
        - attach_workspace:
@@@ -479,7 -503,55 +544,63 @@@
            extra_env_args: 'RUN_STATIC_UPGRADE_MATRIX=true'
            pytest_extra_args: '--execute-upgrade-tests'
  
-   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_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
++
+   j8_jvm_dtests_repeat:
+     <<: *j8_repeated_utest_executor
+     steps:
+       - attach_workspace:
+           at: /home/cassandra
+       - log_environment
+       - run_jvm_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
+ 
+   j8_repeated_ant_test:
      <<: *j8_repeated_utest_executor
      steps:
        - attach_workspace:
@@@ -854,6 -924,172 +976,181 @@@ commands
            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_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}
+           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}
+           stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
+ 
+   run_repeated_utests:
+     parameters:
+       target:
+         type: string
+       tests:
+         type: string
+       count:
+         type: string
+       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}"
+ 
+             # 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 == "long-test" ]]; then
++                      $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 <<parameters.target>> $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 [[ <<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:
@@@ -908,7 -1144,8 +1205,9 @@@
                  if [[ $target == "test" || \
                        $target == "test-cdc" || \
                        $target == "test-compression" || \
-                       $target == "test-system-keyspace-directory" ]]; then
+                       $target == "test-system-keyspace-directory" || \
 -                      $target == "long-test" ]]; then
++                      $target == "long-test" || \
++                      $target == "stress-test" ]]; then
                    name="-Dtest.name=$class_name"
                  else
                    name="-Dtest.name=$class_path"
diff --cc .circleci/config-2_1.yml.high_res.patch
index b4c0ae6189,bdc37a0307..d2996086de
--- a/.circleci/config-2_1.yml.high_res.patch
+++ b/.circleci/config-2_1.yml.high_res.patch
@@@ -1,5 -1,5 +1,5 @@@
- --- .circleci/config-2_1.yml	2021-10-18 11:17:08.000000000 +0100
- +++ .circleci/config-2_1.yml.HIGHRES	2021-10-18 11:22:50.000000000 +0100
 ---- config-2_1.yml	2022-10-15 16:29:48.670020291 +0100
 -+++ config-2_1.yml.HIGHRES	2022-10-15 16:30:17.885329362 +0100
++--- config-2_1.yml	2022-10-15 14:49:08.115591764 +0100
+++++ config-2_1.yml.HIGHRES	2022-10-15 14:50:05.887981105 +0100
  @@ -40,8 +40,8 @@
       CASSANDRA_SKIP_SYNC: true
       DTEST_REPO: https://github.com/apache/cassandra-dtest.git
@@@ -9,9 -9,9 +9,9 @@@
  +    CCM_MAX_HEAP_SIZE: 2048M
  +    CCM_HEAP_NEWSIZE: 512M
   
-      # The Ant test target to run, for example:
-      # REPEATED_UTEST_TARGET: testsome
- @@ -100,46 +100,50 @@
+      # Whether the repeated test iterations should stop on the first failure by default.
+      REPEATED_TESTS_STOP_ON_FAILURE: false
 -@@ -118,46 +118,50 @@
++@@ -126,46 +126,50 @@
   j8_par_executor: &j8_par_executor
     executor:
       name: java8-executor
diff --cc .circleci/config-2_1.yml.mid_res.patch
index bf1f3f77d0,05cf0c275e..8eb567d5e4
--- a/.circleci/config-2_1.yml.mid_res.patch
+++ b/.circleci/config-2_1.yml.mid_res.patch
@@@ -1,6 -1,6 +1,6 @@@
- --- .circleci/config-2_1.yml	2021-10-18 11:17:08.000000000 +0100
- +++ .circleci/config-2_1.yml.MIDRES	2021-10-18 11:20:45.000000000 +0100
- @@ -101,45 +101,65 @@
 ---- config-2_1.yml	2022-10-15 16:29:48.670020291 +0100
 -+++ config-2_1.yml.MIDRES	2022-10-15 16:30:17.879007207 +0100
 -@@ -119,45 +119,65 @@
++--- config-2_1.yml	2022-10-15 14:49:08.115591764 +0100
+++++ config-2_1.yml.MIDRES	2022-10-15 14:50:05.881594331 +0100
++@@ -127,45 +127,65 @@
     executor:
       name: java8-executor
       #exec_resource_class: xlarge
@@@ -68,33 -68,33 +68,33 @@@
     executor:
       name: java8-executor
  -  parallelism: 4
 -+    exec_resource_class: medium
 ++    exec_resource_class: large
  +  parallelism: 25
   
-  with_dtests_jobs: &with_dtest_jobs
+  separate_jobs: &separate_jobs
     jobs:
- @@ -435,7 +455,7 @@
 -@@ -459,7 +479,7 @@
 -           target: testclasslist-compression
++@@ -500,7 +520,7 @@
 +           target: stress-test
   
-    j8_dtests-with-vnodes:
+    j8_dtests_vnode:
  -    <<: *j8_par_executor
  +    <<: *j8_large_par_executor
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -449,7 +469,7 @@
 -@@ -473,7 +493,7 @@
++@@ -514,7 +534,7 @@
             pytest_extra_args: '--use-vnodes --num-tokens=32 --skip-resource-intensive-tests'
   
-    j8_dtests-no-vnodes:
+    j8_dtests:
  -    <<: *j8_par_executor
  +    <<: *j8_large_par_executor
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -463,7 +483,7 @@
 -@@ -487,7 +507,7 @@
++@@ -528,7 +548,7 @@
             pytest_extra_args: '--skip-resource-intensive-tests'
   
-    j8_upgradetests-no-vnodes:
+    j8_upgrade_dtests:
  -    <<: *j8_par_executor
  +    <<: *j8_very_large_par_executor
       steps:
diff --cc .circleci/config.yml
index 85e469a492,43a507ba9f..ed0689d749
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@@ -108,25 -108,26 +108,28 @@@ 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_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_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-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
@@@ -159,50 -160,1026 +162,1219 @@@
            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 == "long-test" ]]; then
++                    $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})
+     - 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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-8-openjdk-amd64
++    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
++  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 == "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})
++    - 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:
++    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
++    - ANT_HOME: /usr/share/ant
++    - 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_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-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   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: 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_LONG_COUNT} / CIRCLE_NODE_TOTAL))
+           if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then
+             count=$((count+1))
+           fi
+ 
+           # Put manually specified tests and automatically detected tests together, removing duplicates
+           tests=$(echo ${REPEATED_UTESTS_LONG} | 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 == "long-test" ]]; then
++                    $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 long-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})
+     - 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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_unit_tests_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_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 == "long-test" ]]; then
++                    $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})
+     - 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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-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
+     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 --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 freeze
+     - run:
+         name: Run repeated Python dtest
+         no_output_timeout: 15m
+         command: |
+           if [ "${REPEATED_UPGRADE_DTESTS}" == "<nil>" ]; then
+             echo "Repeated dtest name hasn't been defined, exiting without running any test"
+           elif [ "${REPEATED_UPGRADE_DTESTS_COUNT}" == "<nil>" ]; then
+             echo "Repeated dtest count hasn't been defined, exiting without running any test"
+           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_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_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_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 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 $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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   build:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 1
+     steps:
+     - 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 jar build-test
+               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
+     - 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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-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 --upgrade -r ~/cassandra-dtest/requirements.txt
+           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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-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 --upgrade -r ~/cassandra-dtest/requirements.txt
+           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
+           # 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.
+ 
+           cd cassandra-dtest
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+ 
+           if [ -n 'RUN_STATIC_UPGRADE_MATRIX=true' ]; then
+             export RUN_STATIC_UPGRADE_MATRIX=true
+           fi
+ 
+           echo "***Collected DTests (j8_upgradetests_without_vnodes)***"
+           set -eo pipefail && ./run_dtests.py --execute-upgrade-tests --dtest-print-tests-only --dtest-print-tests-output=/tmp/all_dtest_tests_j8_upgradetests_without_vnodes_raw --cassandra-dir=../cassandra
+           if [ -z '^upgrade_tests' ]; then
+             mv /tmp/all_dtest_tests_j8_upgradetests_without_vnodes_raw /tmp/all_dtest_tests_j8_upgradetests_without_vnodes
+           else
+             grep -e '^upgrade_tests' /tmp/all_dtest_tests_j8_upgradetests_without_vnodes_raw > /tmp/all_dtest_tests_j8_upgradetests_without_vnodes || { echo "Filter did not match any tests! Exiting build."; exit 0; }
+           fi
+           set -eo pipefail && circleci tests split --split-by=timings --timings-type=classname /tmp/all_dtest_tests_j8_upgradetests_without_vnodes > /tmp/split_dtest_tests_j8_upgradetests_without_vnodes.txt
+           cat /tmp/split_dtest_tests_j8_upgradetests_without_vnodes.txt | tr '\n' ' ' > /tmp/split_dtest_tests_j8_upgradetests_without_vnodes_final.txt
+           cat /tmp/split_dtest_tests_j8_upgradetests_without_vnodes_final.txt
+     - 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"
+           cat /tmp/split_dtest_tests_j8_upgradetests_without_vnodes_final.txt
+ 
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           if [ -n 'RUN_STATIC_UPGRADE_MATRIX=true' ]; then
+             export RUN_STATIC_UPGRADE_MATRIX=true
+           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_upgradetests_without_vnodes_final.txt`
+           set -o pipefail && cd ~/cassandra-dtest && pytest --execute-upgrade-tests --log-level="INFO" --junit-xml=/tmp/results/dtests/pytest_result_j8_upgradetests_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_upgradetests_without_vnodes
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_j8_upgradetests_without_vnodes_logs
+     environment:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-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: |
-           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"
-           else
+           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.
-             # Since we are running the same test multiple times there is no need to use `circleci tests split`.
-             count=$((${REPEATED_JVM_UPGRADE_DTEST_COUNT} / CIRCLE_NODE_TOTAL))
-             if (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_UPGRADE_DTEST_COUNT} % CIRCLE_NODE_TOTAL))); then
-               count=$((count+1))
-             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
  
-             if (($count <= 0)); then
-               echo "No tests to run in this runner"
-             else
-               echo "Running test-jvm-dtest-some ${REPEATED_JVM_UPGRADE_DTEST_CLASS} ${REPEATED_JVM_UPGRADE_DTEST_METHODS} ${REPEATED_JVM_UPGRADE_DTEST_COUNT} times"
+           # 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}"
  
-               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
+           # Run each test class as many times as requested.
+           exit_code="$?"
+           for test in $tests; do
  
-               target=test-jvm-dtest-some
-               class_path=${REPEATED_JVM_UPGRADE_DTEST_CLASS}
-               class_name="${class_path##*.}"
+               # 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" ]]; then
-                 name="-Dtest.name=$class_name"
+                     $target == "test-system-keyspace-directory" || \
 -                    $target == "long-test" ]]; then
++                    $target == "long-test" || \
++                    $target == "stress-test" ]]; then
+                 name_arg="-Dtest.name=${class##*.}"
                else
-                 name="-Dtest.name=$class_path"
+                 name_arg="-Dtest.name=$class"
                fi
  
                # Prepare the -Dtest.methods argument, which is optional
@@@ -282,145 -1256,26 +1451,93 @@@
      - 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_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_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-8-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   repeated_upgrade_dtest:
++  utests_stress:
 +    docker:
 +    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies: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)
-         command: |
-           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
-     - run:
-         name: Configure virtualenv and python Dependencies
++        name: Run Unit Tests (stress-test)
 +        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 --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 freeze
-     - run:
-         name: Run repeated Python dtest
-         no_output_timeout: 15m
-         command: |
-           if [ "${REPEATED_UPGRADE_DTEST_NAME}" == "<nil>" ]; then
-             echo "Repeated dtest name hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_UPGRADE_DTEST_COUNT}" == "<nil>" ]; then
-             echo "Repeated dtest count hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_UPGRADE_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_UPGRADE_DTEST_COUNT} / CIRCLE_NODE_TOTAL))
-             if (($CIRCLE_NODE_INDEX < (${REPEATED_UPGRADE_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_UPGRADE_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_UPGRADE_DTEST_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 true; then
-                 upgrade_arg="--execute-upgrade-tests"
-               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_UPGRADE_DTEST_NAME} | tee /tmp/dtest/stdout.txt
-             fi
++          time mv ~/cassandra /tmp
++          cd /tmp/cassandra
++          if [ -d ~/dtest_jars ]; then
++            cp ~/dtest_jars/dtest* /tmp/cassandra/build/
 +          fi
++          ant stress-test -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
++        no_output_timeout: 15m
 +    - store_test_results:
-         path: /tmp/results
++        path: /tmp/cassandra/build/test/output/
 +    - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest
++        path: /tmp/cassandra/build/test/output
++        destination: junitxml
 +    - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_logs
++        path: /tmp/cassandra/build/test/logs
++        destination: logs
 +    environment:
 +    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - ANT_HOME: /usr/share/ant
 +    - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_repeated_dtest:
+   j8_unit_tests:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
@@@ -619,25 -1365,26 +1627,28 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_dtests-no-vnodes:
+   j8_dtests:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
@@@ -693,25 -1440,26 +1704,28 @@@
      - 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_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_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-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
@@@ -808,25 -1515,26 +1781,28 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   utests_stress:
+   j8_jvm_dtests_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
@@@ -845,15 -1577,100 +1845,101 @@@
            if [ -d ~/dtest_jars ]; then
              cp ~/dtest_jars/dtest* /tmp/cassandra/build/
            fi
-           ant stress-test -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
-         no_output_timeout: 15m
+ 
+           # 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 == "long-test" ]]; then
++                    $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})
      - 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:
      - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
@@@ -870,25 -1687,26 +1956,28 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_unit_tests:
+   j8_repeated_ant_test:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
@@@ -940,28 -1739,114 +2010,115 @@@
            which java
            java -version
      - run:
-         name: Run Unit Tests (testclasslist)
+         name: Run repeated JUnit test
+         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
-           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}')
+           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 == "long-test" ]]; then
++                    $target == "long-test" || \
++                    $target == "stress-test" ]]; 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
+ 
+               # 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
+                   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
-           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/
+         path: /tmp/results/repeated_utest/output
      - store_artifacts:
-         path: /tmp/cassandra/build/test/output
+         path: /tmp/results/repeated_utest/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utest/output
          destination: junitxml
      - store_artifacts:
-         path: /tmp/cassandra/build/test/logs
+         path: /tmp/results/repeated_utest/logs
          destination: logs
      environment:
      - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
@@@ -978,25 -1863,26 +2135,28 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_dtests-with-vnodes:
+   j8_dtests_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
@@@ -1052,22 -1986,23 +2260,25 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    j8_jvm_dtests:
@@@ -1160,22 -2095,23 +2371,25 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    utests_long:
@@@ -1222,22 -2158,23 +2436,25 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    utests_compression:
@@@ -1330,196 -2267,23 +2547,25 @@@
      - 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_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
- 
-               # 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
-                   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:
-     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-     - ANT_HOME: /usr/share/ant
-     - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    j8_dtest_jars_build:
@@@ -1598,22 -2362,23 +2644,25 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
  workflows:
@@@ -1659,9 -2418,9 +2708,9 @@@
          type: approval
      - j8_dtest_jars_build:
          requires:
 -        - start_j8_dtest_jars_build
          - build
 +        - start_j8_dtest_jars_build
-     - start_jvm_upgrade_dtest:
+     - start_jvm_upgrade_dtests:
          type: approval
      - j8_jvm_upgrade_dtests:
          requires:
@@@ -1677,36 -2432,18 +2722,18 @@@
          requires:
          - start_j8_dtests
          - build
-     - start_upgrade_tests:
-         type: approval
-     - j8_upgradetests-no-vnodes:
-         requires:
-         - start_upgrade_tests
-         - build
-     - start_j8_repeated_utest:
-         type: approval
-     - j8_repeated_utest:
-         requires:
-         - start_j8_repeated_utest
-         - build
-     - start_j8_repeated_dtest:
+     - start_j8_dtests_vnode:
          type: approval
-     - j8_repeated_dtest:
+     - j8_dtests_vnode:
          requires:
-         - start_j8_repeated_dtest
+         - start_j8_dtests_vnode
          - build
-     - start_repeated_upgrade_dtest:
 -    - start_j8_upgrade_dtests:
++    - start_upgrade_dtests:
          type: approval
-     - repeated_upgrade_dtest:
+     - j8_upgrade_dtests:
          requires:
-         - start_repeated_upgrade_dtest
 -        - start_j8_upgrade_dtests
++        - start_upgrade_dtests
          - build
-     - start_repeated_jvm_upgrade_dtest:
-         type: approval
-     - repeated_jvm_upgrade_dtest:
-         requires:
-         - start_repeated_jvm_upgrade_dtest
-         - j8_dtest_jars_build
    pre-commit_tests:
      jobs:
      - start_pre-commit_tests:
@@@ -1732,57 -2469,24 +2759,30 @@@
          requires:
          - start_utests_compression
          - build
 +    - start_utests_stress:
 +        type: approval
 +    - utests_stress:
 +        requires:
 +        - start_utests_stress
 +        - build
-     - start_j8_dtest_jars_build:
+     - start_jvm_upgrade_dtests:
          type: approval
      - j8_dtest_jars_build:
          requires:
 -        - start_jvm_upgrade_dtests
          - 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:
          - build
-     - j8_dtests-no-vnodes:
+     - j8_dtests_vnode:
          requires:
          - build
 -    - start_upgrade_dtests:
 +    - start_upgrade_tests:
          type: approval
-     - j8_upgradetests-no-vnodes:
+     - j8_upgrade_dtests:
          requires:
 -        - start_upgrade_dtests
 +        - start_upgrade_tests
          - build
-     - start_j8_repeated_utest:
-         type: approval
-     - j8_repeated_utest:
-         requires:
-         - start_j8_repeated_utest
-         - build
-     - start_j8_repeated_dtest:
-         type: approval
-     - j8_repeated_dtest:
-         requires:
-         - start_j8_repeated_dtest
-         - build
-     - start_repeated_upgrade_dtest:
-         type: approval
-     - repeated_upgrade_dtest:
-         requires:
-         - start_repeated_upgrade_dtest
-         - build
-     - start_repeated_jvm_upgrade_dtest:
-         type: approval
-     - repeated_jvm_upgrade_dtest:
-         requires:
-         - start_repeated_jvm_upgrade_dtest
-         - j8_dtest_jars_build
diff --cc .circleci/config.yml.HIGHRES
index bfdc3b5deb,b4983f9b8a..b832815cc3
--- a/.circleci/config.yml.HIGHRES
+++ b/.circleci/config.yml.HIGHRES
@@@ -108,25 -108,26 +108,28 @@@ jobs
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 2048M
      - CCM_HEAP_NEWSIZE: 512M
-     - REPEATED_UTEST_TARGET: testsome
-     - REPEATED_UTEST_CLASS: null
-     - REPEATED_UTEST_METHODS: null
-     - 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_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-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
@@@ -199,10 -199,11 +201,12 @@@
                if [[ $target == "test" || \
                      $target == "test-cdc" || \
                      $target == "test-compression" || \
-                     $target == "test-system-keyspace-directory" ]]; then
-                 name="-Dtest.name=$class_name"
+                     $target == "test-system-keyspace-directory" || \
 -                    $target == "long-test" ]]; then
++                    $target == "long-test" || \
++                    $target == "stress-test" ]]; then
+                 name_arg="-Dtest.name=${class##*.}"
                else
-                 name="-Dtest.name=$class_path"
+                 name_arg="-Dtest.name=$class"
                fi
  
                # Prepare the -Dtest.methods argument, which is optional
@@@ -282,145 -280,26 +283,203 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 2048M
      - CCM_HEAP_NEWSIZE: 512M
-     - REPEATED_UTEST_TARGET: testsome
-     - REPEATED_UTEST_CLASS: null
-     - REPEATED_UTEST_METHODS: null
-     - 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_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-8-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   repeated_upgrade_dtest:
++  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: 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 --upgrade -r ~/cassandra-dtest/requirements.txt
-           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: Run repeated Python dtest
++        name: Repeatedly run new or modifed JUnit tests
 +        no_output_timeout: 15m
 +        command: |
-           if [ "${REPEATED_UPGRADE_DTEST_NAME}" == "<nil>" ]; then
-             echo "Repeated dtest name hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_UPGRADE_DTEST_COUNT}" == "<nil>" ]; then
-             echo "Repeated dtest count hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_UPGRADE_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_UPGRADE_DTEST_COUNT} / CIRCLE_NODE_TOTAL))
-             if (($CIRCLE_NODE_INDEX < (${REPEATED_UPGRADE_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_UPGRADE_DTEST_NAME} $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
 +
-               source ~/env3.6/bin/activate
-               export PATH=$JAVA_HOME/bin:$PATH
++          # 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
 +
-               java -version
-               cd ~/cassandra-dtest
-               mkdir -p /tmp/dtest
++          # 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}"
 +
-               echo "env: $(env)"
-               echo "** done env"
-               mkdir -p /tmp/results/dtests
++          # Run each test class as many times as requested.
++          exit_code="$?"
++          for test in $tests; do
 +
-               stop_on_failure_arg=""
-               if ${REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE}; then
-                 stop_on_failure_arg="-x"
++              # Split class and method names from the test name
++              if [[ $test =~ "#" ]]; then
++                class=${test%"#"*}
++                method=${test#*"#"}
++              else
++                class=$test
++                method=""
 +              fi
 +
-               vnodes_args=""
-               if false; then
-                 vnodes_args="--use-vnodes --num-tokens=16"
++              # 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 == "long-test" || \
++                    $target == "stress-test" ]]; then
++                name_arg="-Dtest.name=${class##*.}"
++              else
++                name_arg="-Dtest.name=$class"
 +              fi
 +
-               upgrade_arg=""
-               if true; then
-                 upgrade_arg="--execute-upgrade-tests"
++              # Prepare the -Dtest.methods argument, which is optional
++              if [ $method == "" ]; then
++                methods_arg=""
++              else
++                methods_arg="-Dtest.methods=$method"
 +              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_UPGRADE_DTEST_NAME} | tee /tmp/dtest/stdout.txt
-             fi
-           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})
 +    - 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:
 +    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - ANT_HOME: /usr/share/ant
 +    - 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: 2048M
 +    - CCM_HEAP_NEWSIZE: 512M
-     - REPEATED_UTEST_TARGET: testsome
-     - REPEATED_UTEST_CLASS: null
-     - REPEATED_UTEST_METHODS: null
-     - 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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_repeated_dtest:
+   utests_long_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: xlarge
@@@ -431,77 -310,423 +490,429 @@@
      - 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 --upgrade -r ~/cassandra-dtest/requirements.txt
-           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: Run repeated Python dtest
+         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"
+           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
  
-               source ~/env3.6/bin/activate
-               export PATH=$JAVA_HOME/bin:$PATH
+           # Calculate the number of test iterations to be run by the current parallel runner.
+           count=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))
+           if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then
+             count=$((count+1))
+           fi
  
-               java -version
-               cd ~/cassandra-dtest
-               mkdir -p /tmp/dtest
+           # Put manually specified tests and automatically detected tests together, removing duplicates
+           tests=$(echo ${REPEATED_UTESTS_LONG} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u)
+           echo "Tests to be repeated: ${tests}"
  
-               echo "env: $(env)"
-               echo "** done env"
-               mkdir -p /tmp/results/dtests
+           # Run each test class as many times as requested.
+           exit_code="$?"
+           for test in $tests; do
  
-               stop_on_failure_arg=""
-               if ${REPEATED_DTEST_STOP_ON_FAILURE}; then
-                 stop_on_failure_arg="-x"
+               # Split class and method names from the test name
+               if [[ $test =~ "#" ]]; then
+                 class=${test%"#"*}
+                 method=${test#*"#"}
+               else
+                 class=$test
+                 method=""
                fi
  
-               vnodes_args=""
-               if ${REPEATED_DTEST_VNODES}; then
-                 vnodes_args="--use-vnodes --num-tokens=16"
+               # 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 == "long-test" ]]; then
++                    $target == "long-test" || \
++                    $target == "stress-test" ]]; then
+                 name_arg="-Dtest.name=${class##*.}"
+               else
+                 name_arg="-Dtest.name=$class"
                fi
  
-               upgrade_arg=""
-               if false; then
-                 upgrade_arg="--execute-upgrade-tests"
+               # Prepare the -Dtest.methods argument, which is optional
+               if [ $method == "" ]; then
+                 methods_arg=""
+               else
+                 methods_arg="-Dtest.methods=$method"
                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
-             fi
-           fi
-     - store_test_results:
-         path: /tmp/results
-     - store_artifacts:
+               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 long-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})
+     - 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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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: 2048M
+     - CCM_HEAP_NEWSIZE: 512M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_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-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_unit_tests_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_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 == "long-test" ]]; then
++                    $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})
+     - 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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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: 2048M
+     - CCM_HEAP_NEWSIZE: 512M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_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-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: 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 --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 freeze
+     - run:
+         name: Run repeated Python dtest
+         no_output_timeout: 15m
+         command: |
+           if [ "${REPEATED_UPGRADE_DTESTS}" == "<nil>" ]; then
+             echo "Repeated dtest name hasn't been defined, exiting without running any test"
+           elif [ "${REPEATED_UPGRADE_DTESTS_COUNT}" == "<nil>" ]; then
+             echo "Repeated dtest count hasn't been defined, exiting without running any test"
+           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_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_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_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 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 $tests_arg | tee /tmp/dtest/stdout.txt
+             fi
+           fi
+     - store_test_results:
+         path: /tmp/results
+     - store_artifacts:
          path: /tmp/dtest
          destination: dtest
      - store_artifacts:
@@@ -522,22 -747,23 +933,25 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 2048M
      - CCM_HEAP_NEWSIZE: 512M
-     - REPEATED_UTEST_TARGET: testsome
-     - REPEATED_UTEST_CLASS: null
-     - REPEATED_UTEST_METHODS: null
-     - 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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    build:
@@@ -619,25 -845,26 +1033,28 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 2048M
      - CCM_HEAP_NEWSIZE: 512M
-     - REPEATED_UTEST_TARGET: testsome
-     - REPEATED_UTEST_CLASS: null
-     - REPEATED_UTEST_METHODS: null
-     - 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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_dtests-no-vnodes:
+   j8_dtests_vnode_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: xlarge
@@@ -693,25 -968,26 +1158,28 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 2048M
      - CCM_HEAP_NEWSIZE: 512M
-     - REPEATED_UTEST_TARGET: testsome
-     - REPEATED_UTEST_CLASS: null
-     - REPEATED_UTEST_METHODS: null
-     - 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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_upgradetests-no-vnodes:
+   j8_upgrade_dtests:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: xlarge
@@@ -808,84 -1084,195 +1276,265 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 2048M
      - CCM_HEAP_NEWSIZE: 512M
-     - REPEATED_UTEST_TARGET: testsome
-     - REPEATED_UTEST_CLASS: null
-     - REPEATED_UTEST_METHODS: null
-     - 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_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-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: 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_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 == "long-test" ]]; then
++                    $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})
+     - 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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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: 2048M
+     - CCM_HEAP_NEWSIZE: 512M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_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-8-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +  utests_stress:
 +    docker:
 +    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
 +    resource_class: xlarge
 +    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 -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:
 +    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - ANT_HOME: /usr/share/ant
 +    - 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: 2048M
 +    - CCM_HEAP_NEWSIZE: 512M
-     - REPEATED_UTEST_TARGET: testsome
-     - REPEATED_UTEST_CLASS: null
-     - REPEATED_UTEST_METHODS: null
-     - 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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    j8_unit_tests:
@@@ -958,10 -1345,508 +1607,518 @@@
      - store_test_results:
          path: /tmp/cassandra/build/test/output/
      - store_artifacts:
-         path: /tmp/cassandra/build/test/output
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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: 2048M
+     - CCM_HEAP_NEWSIZE: 512M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_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-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_dtests:
+     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 --upgrade -r ~/cassandra-dtest/requirements.txt
+           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 [...]
+     - run:
+         name: Run dtests (j8_without_vnodes)
+         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
+     environment:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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: 2048M
+     - CCM_HEAP_NEWSIZE: 512M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_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-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_dtests_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:
+         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 --upgrade -r ~/cassandra-dtest/requirements.txt
+           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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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: 2048M
+     - CCM_HEAP_NEWSIZE: 512M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_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-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_jvm_dtests_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_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 == "long-test" ]]; then
++                    $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})
+     - 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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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: 2048M
+     - CCM_HEAP_NEWSIZE: 512M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_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-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_repeated_ant_test:
+     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: 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 == "long-test" ]]; then
++                    $target == "long-test" || \
++                    $target == "stress-test" ]]; 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
+ 
+               # 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
+                   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/cassandra/build/test/logs
+         path: /tmp/results/repeated_utest/logs
          destination: logs
      environment:
      - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
@@@ -978,25 -1863,26 +2135,28 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 2048M
      - CCM_HEAP_NEWSIZE: 512M
-     - REPEATED_UTEST_TARGET: testsome
-     - REPEATED_UTEST_CLASS: null
-     - REPEATED_UTEST_METHODS: null
-     - 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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_dtests-with-vnodes:
+   j8_dtests_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: xlarge
@@@ -1052,22 -1986,23 +2260,25 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 2048M
      - CCM_HEAP_NEWSIZE: 512M
-     - REPEATED_UTEST_TARGET: testsome
-     - REPEATED_UTEST_CLASS: null
-     - REPEATED_UTEST_METHODS: null
-     - 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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    j8_jvm_dtests:
@@@ -1160,22 -2095,23 +2371,25 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 2048M
      - CCM_HEAP_NEWSIZE: 512M
-     - REPEATED_UTEST_TARGET: testsome
-     - REPEATED_UTEST_CLASS: null
-     - REPEATED_UTEST_METHODS: null
-     - 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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    utests_long:
@@@ -1222,22 -2158,23 +2436,25 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 2048M
      - CCM_HEAP_NEWSIZE: 512M
-     - REPEATED_UTEST_TARGET: testsome
-     - REPEATED_UTEST_CLASS: null
-     - REPEATED_UTEST_METHODS: null
-     - 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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    utests_compression:
@@@ -1330,196 -2267,23 +2547,25 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 2048M
      - CCM_HEAP_NEWSIZE: 512M
-     - REPEATED_UTEST_TARGET: testsome
-     - REPEATED_UTEST_CLASS: null
-     - REPEATED_UTEST_METHODS: null
-     - 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: 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: 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
- 
-               # 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
-                   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:
-     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-     - ANT_HOME: /usr/share/ant
-     - 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: 2048M
-     - CCM_HEAP_NEWSIZE: 512M
-     - REPEATED_UTEST_TARGET: testsome
-     - REPEATED_UTEST_CLASS: null
-     - REPEATED_UTEST_METHODS: null
-     - 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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    j8_dtest_jars_build:
@@@ -1598,22 -2362,23 +2644,25 @@@
      - DTEST_BRANCH: trunk
      - CCM_MAX_HEAP_SIZE: 2048M
      - CCM_HEAP_NEWSIZE: 512M
-     - REPEATED_UTEST_TARGET: testsome
-     - REPEATED_UTEST_CLASS: null
-     - REPEATED_UTEST_METHODS: null
-     - 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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
  workflows:
@@@ -1649,19 -2432,19 +2716,31 @@@
          requires:
          - start_utests_compression
          - build
+     - start_utests_compression_repeat:
+         type: approval
+     - utests_compression_repeat:
+         requires:
+         - start_utests_compression_repeat
+         - build
 +    - start_utests_stress:
 +        type: approval
 +    - utests_stress:
 +        requires:
 +        - start_utests_stress
 +        - build
++    - start_utests_stress_repeat:
++        type: approval
++    - utests_stress_repeat:
++        requires:
++        - start_utests_stress_repeat
++        - build
      - start_j8_dtest_jars_build:
          type: approval
      - j8_dtest_jars_build:
          requires:
 -        - start_j8_dtest_jars_build
          - build
 +        - start_j8_dtest_jars_build
-     - start_jvm_upgrade_dtest:
+     - start_jvm_upgrade_dtests:
          type: approval
      - j8_jvm_upgrade_dtests:
          requires:
@@@ -1673,40 -2462,42 +2758,42 @@@
          requires:
          - start_j8_dtests
          - build
-     - j8_dtests-no-vnodes:
+     - start_j8_dtests_repeat:
+         type: approval
+     - j8_dtests_repeat:
          requires:
-         - start_j8_dtests
+         - start_j8_dtests_repeat
          - build
-     - start_upgrade_tests:
+     - start_j8_dtests_vnode:
          type: approval
-     - j8_upgradetests-no-vnodes:
+     - j8_dtests_vnode:
          requires:
-         - start_upgrade_tests
+         - start_j8_dtests_vnode
          - build
-     - start_j8_repeated_utest:
+     - start_j8_dtests_vnode_repeat:
          type: approval
-     - j8_repeated_utest:
+     - j8_dtests_vnode_repeat:
          requires:
-         - start_j8_repeated_utest
+         - start_j8_dtests_vnode_repeat
          - build
-     - start_j8_repeated_dtest:
 -    - start_j8_upgrade_dtests:
++    - start_upgrade_dtests:
          type: approval
-     - j8_repeated_dtest:
+     - j8_upgrade_dtests:
          requires:
-         - start_j8_repeated_dtest
 -        - start_j8_upgrade_dtests
++        - start_upgrade_dtests
          - build
-     - start_repeated_upgrade_dtest:
+     - start_j8_upgrade_dtests_repeat:
          type: approval
-     - repeated_upgrade_dtest:
+     - j8_upgrade_dtests_repeat:
          requires:
-         - start_repeated_upgrade_dtest
+         - start_j8_upgrade_dtests_repeat
          - build
-     - start_repeated_jvm_upgrade_dtest:
+     - start_j8_repeated_ant_test:
          type: approval
-     - repeated_jvm_upgrade_dtest:
+     - j8_repeated_ant_test:
          requires:
-         - start_repeated_jvm_upgrade_dtest
-         - j8_dtest_jars_build
+         - start_j8_repeated_ant_test
+         - build
    pre-commit_tests:
      jobs:
      - start_pre-commit_tests:
@@@ -1732,57 -2533,41 +2829,54 @@@
          requires:
          - start_utests_compression
          - build
+     - utests_compression_repeat:
+         requires:
+         - start_utests_compression
+         - build
 +    - start_utests_stress:
 +        type: approval
 +    - utests_stress:
 +        requires:
 +        - start_utests_stress
 +        - build
-     - start_j8_dtest_jars_build:
++    - utests_stress_repeat:
++        requires:
++        - start_utests_stress
++        - build
+     - start_jvm_upgrade_dtests:
          type: approval
      - j8_dtest_jars_build:
          requires:
 -        - start_jvm_upgrade_dtests
          - 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_jvm_upgrade_dtests_repeat:
+         requires:
+         - j8_dtest_jars_build
+     - j8_dtests:
          requires:
          - build
-     - j8_dtests-no-vnodes:
+     - j8_dtests_repeat:
          requires:
          - build
-     - start_upgrade_tests:
-         type: approval
-     - j8_upgradetests-no-vnodes:
+     - j8_dtests_vnode:
          requires:
-         - start_upgrade_tests
          - build
-     - start_j8_repeated_utest:
-         type: approval
-     - j8_repeated_utest:
+     - j8_dtests_vnode_repeat:
          requires:
-         - start_j8_repeated_utest
          - build
-     - start_j8_repeated_dtest:
 -    - start_upgrade_dtests:
++    - start_upgrade_tests:
          type: approval
-     - j8_repeated_dtest:
+     - j8_upgrade_dtests:
          requires:
-         - start_j8_repeated_dtest
 -        - start_upgrade_dtests
++        - start_upgrade_tests
          - build
-     - start_repeated_upgrade_dtest:
-         type: approval
-     - repeated_upgrade_dtest:
+     - j8_upgrade_dtests_repeat:
          requires:
-         - start_repeated_upgrade_dtest
 -        - start_upgrade_dtests
++        - start_upgrade_tests
 +        - build
-     - start_repeated_jvm_upgrade_dtest:
-         type: approval
-     - repeated_jvm_upgrade_dtest:
++    - j8_repeated_ant_test:
 +        requires:
-         - start_repeated_jvm_upgrade_dtest
-         - j8_dtest_jars_build
+         - build
diff --cc .circleci/config.yml.LOWRES
index 85e469a492,baeb67190a..fcebba8dae
--- a/.circleci/config.yml.LOWRES
+++ b/.circleci/config.yml.LOWRES
@@@ -108,25 -108,26 +108,28 @@@ 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_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_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-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
@@@ -199,10 -199,11 +201,12 @@@
                if [[ $target == "test" || \
                      $target == "test-cdc" || \
                      $target == "test-compression" || \
-                     $target == "test-system-keyspace-directory" ]]; then
-                 name="-Dtest.name=$class_name"
+                     $target == "test-system-keyspace-directory" || \
 -                    $target == "long-test" ]]; then
++                    $target == "long-test" || \
++                    $target == "stress-test" ]]; then
+                 name_arg="-Dtest.name=${class##*.}"
                else
-                 name="-Dtest.name=$class_path"
+                 name_arg="-Dtest.name=$class"
                fi
  
                # Prepare the -Dtest.methods argument, which is optional
@@@ -282,145 -280,26 +283,203 @@@
      - 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_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_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-8-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   repeated_upgrade_dtest:
++  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: 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 --upgrade -r ~/cassandra-dtest/requirements.txt
-           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: Run repeated Python dtest
++        name: Repeatedly run new or modifed JUnit tests
 +        no_output_timeout: 15m
 +        command: |
-           if [ "${REPEATED_UPGRADE_DTEST_NAME}" == "<nil>" ]; then
-             echo "Repeated dtest name hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_UPGRADE_DTEST_COUNT}" == "<nil>" ]; then
-             echo "Repeated dtest count hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_UPGRADE_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_UPGRADE_DTEST_COUNT} / CIRCLE_NODE_TOTAL))
-             if (($CIRCLE_NODE_INDEX < (${REPEATED_UPGRADE_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_UPGRADE_DTEST_NAME} $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
 +
-               source ~/env3.6/bin/activate
-               export PATH=$JAVA_HOME/bin:$PATH
++          # 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
 +
-               java -version
-               cd ~/cassandra-dtest
-               mkdir -p /tmp/dtest
++          # 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}"
 +
-               echo "env: $(env)"
-               echo "** done env"
-               mkdir -p /tmp/results/dtests
++          # Run each test class as many times as requested.
++          exit_code="$?"
++          for test in $tests; do
 +
-               stop_on_failure_arg=""
-               if ${REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE}; then
-                 stop_on_failure_arg="-x"
++              # Split class and method names from the test name
++              if [[ $test =~ "#" ]]; then
++                class=${test%"#"*}
++                method=${test#*"#"}
++              else
++                class=$test
++                method=""
 +              fi
 +
-               vnodes_args=""
-               if false; then
-                 vnodes_args="--use-vnodes --num-tokens=16"
++              # 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 == "long-test" || \
++                    $target == "stress-test" ]]; then
++                name_arg="-Dtest.name=${class##*.}"
++              else
++                name_arg="-Dtest.name=$class"
 +              fi
 +
-               upgrade_arg=""
-               if true; then
-                 upgrade_arg="--execute-upgrade-tests"
++              # Prepare the -Dtest.methods argument, which is optional
++              if [ $method == "" ]; then
++                methods_arg=""
++              else
++                methods_arg="-Dtest.methods=$method"
 +              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_UPGRADE_DTEST_NAME} | tee /tmp/dtest/stdout.txt
-             fi
-           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})
 +    - 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:
 +    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - ANT_HOME: /usr/share/ant
 +    - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_repeated_dtest:
+   utests_long_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
@@@ -431,82 -310,133 +490,134 @@@
      - 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 --upgrade -r ~/cassandra-dtest/requirements.txt
-           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: Run repeated Python dtest
+         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"
+           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
  
-               source ~/env3.6/bin/activate
-               export PATH=$JAVA_HOME/bin:$PATH
+           # Calculate the number of test iterations to be run by the current parallel runner.
+           count=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))
+           if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then
+             count=$((count+1))
+           fi
  
-               java -version
-               cd ~/cassandra-dtest
-               mkdir -p /tmp/dtest
+           # Put manually specified tests and automatically detected tests together, removing duplicates
+           tests=$(echo ${REPEATED_UTESTS_LONG} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u)
+           echo "Tests to be repeated: ${tests}"
  
-               echo "env: $(env)"
-               echo "** done env"
-               mkdir -p /tmp/results/dtests
+           # Run each test class as many times as requested.
+           exit_code="$?"
+           for test in $tests; do
  
-               stop_on_failure_arg=""
-               if ${REPEATED_DTEST_STOP_ON_FAILURE}; then
-                 stop_on_failure_arg="-x"
+               # Split class and method names from the test name
+               if [[ $test =~ "#" ]]; then
+                 class=${test%"#"*}
+                 method=${test#*"#"}
+               else
+                 class=$test
+                 method=""
                fi
  
-               vnodes_args=""
-               if ${REPEATED_DTEST_VNODES}; then
-                 vnodes_args="--use-vnodes --num-tokens=16"
+               # 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 == "long-test" ]]; then
++                    $target == "long-test" || \
++                    $target == "stress-test" ]]; then
+                 name_arg="-Dtest.name=${class##*.}"
+               else
+                 name_arg="-Dtest.name=$class"
                fi
  
-               upgrade_arg=""
-               if false; then
-                 upgrade_arg="--execute-upgrade-tests"
+               # Prepare the -Dtest.methods argument, which is optional
+               if [ $method == "" ]; then
+                 methods_arg=""
+               else
+                 methods_arg="-Dtest.methods=$method"
                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
-             fi
-           fi
-     - store_test_results:
-         path: /tmp/results
-     - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest
+               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 long-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})
+     - store_test_results:
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_logs
+         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:
      - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - ANT_HOME: /usr/share/ant
@@@ -522,25 -452,26 +633,28 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   build:
+   j8_unit_tests_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
@@@ -571,39 -504,111 +687,112 @@@
            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
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
          command: |
+           set -x
            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 jar build-test
-               RETURN="$?"
-               if [ "${RETURN}" -eq "0" ]; then
-                   break
+           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 == "long-test" ]]; then
++                    $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, 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
-     - 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
+           (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
      environment:
      - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      - ANT_HOME: /usr/share/ant
@@@ -619,25 -624,26 +808,28 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_dtests-no-vnodes:
+   j8_upgrade_dtests_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
@@@ -693,98 -747,204 +933,208 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_upgradetests-no-vnodes:
+   build:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies: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 --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 freeze
+           git clone --single-branch --depth 1 --branch $CIRCLE_BRANCH https://github.com/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME.git ~/cassandra
      - run:
-         name: Determine Tests to Run (j8_upgradetests_without_vnodes)
-         no_output_timeout: 5m
+         name: Build Cassandra
          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.
- 
-           cd cassandra-dtest
-           source ~/env3.6/bin/activate
            export PATH=$JAVA_HOME/bin:$PATH
- 
-           if [ -n 'RUN_STATIC_UPGRADE_MATRIX=true' ]; then
-             export RUN_STATIC_UPGRADE_MATRIX=true
+           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 jar build-test
+               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
- 
-           echo "***Collected DTests (j8_upgradetests_without_vnodes)***"
-           set -eo pipefail && ./run_dtests.py --execute-upgrade-tests --dtest-print-tests-only --dtest-print-tests-output=/tmp/all_dtest_tests_j8_upgradetests_without_vnodes_raw --cassandra-dir=../cassandra
-           if [ -z '^upgrade_tests' ]; then
-             mv /tmp/all_dtest_tests_j8_upgradetests_without_vnodes_raw /tmp/all_dtest_tests_j8_upgradetests_without_vnodes
-           else
-             grep -e '^upgrade_tests' /tmp/all_dtest_tests_j8_upgradetests_without_vnodes_raw > /tmp/all_dtest_tests_j8_upgradetests_without_vnodes || { echo "Filter did not match any tests! Exiting build."; exit 0; }
-           fi
-           set -eo pipefail && circleci tests split --split-by=timings --timings-type=classname /tmp/all_dtest_tests_j8_upgradetests_without_vnodes > /tmp/split_dtest_tests_j8_upgradetests_without_vnodes.txt
-           cat /tmp/split_dtest_tests_j8_upgradetests_without_vnodes.txt | tr '\n' ' ' > /tmp/split_dtest_tests_j8_upgradetests_without_vnodes_final.txt
-           cat /tmp/split_dtest_tests_j8_upgradetests_without_vnodes_final.txt
-     - run:
-         name: Run dtests (j8_upgradetests_without_vnodes)
          no_output_timeout: 15m
+     - run:
+         name: Run eclipse-warnings
          command: |
-           echo "cat /tmp/split_dtest_tests_j8_upgradetests_without_vnodes_final.txt"
-           cat /tmp/split_dtest_tests_j8_upgradetests_without_vnodes_final.txt
- 
+           export PATH=$JAVA_HOME/bin:$PATH
+           cd ~/cassandra
+           ant eclipse-warnings
+     - persist_to_workspace:
+         root: /home/cassandra
+         paths:
+         - cassandra
+         - .m2
+     environment:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-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
-           if [ -n 'RUN_STATIC_UPGRADE_MATRIX=true' ]; then
-             export RUN_STATIC_UPGRADE_MATRIX=true
-           fi
+           pip3 install --upgrade -r ~/cassandra-dtest/requirements.txt
+           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
  
-           java -version
-           cd ~/cassandra-dtest
-           mkdir -p /tmp/dtest
+             # 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
  
-           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_upgradetests_without_vnodes_final.txt`
-           set -o pipefail && cd ~/cassandra-dtest && pytest --execute-upgrade-tests --log-level="INFO" --junit-xml=/tmp/results/dtests/pytest_result_j8_upgradetests_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+             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:
@@@ -808,25 -968,26 +1158,28 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   utests_stress:
+   j8_upgrade_dtests:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
@@@ -870,25 -1084,26 +1276,28 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_unit_tests:
+   j8_jvm_upgrade_dtests_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
@@@ -949,19 -1146,707 +1340,785 @@@
            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}')
+ 
+           # 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
-           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/
+ 
+           # 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 == "long-test" ]]; then
++                    $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})
+     - 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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-8-openjdk-amd64
++    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
++  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 -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:
++    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
++    - ANT_HOME: /usr/share/ant
++    - 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_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-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
+         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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_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 --upgrade -r ~/cassandra-dtest/requirements.txt
+           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 [...]
+     - run:
+         name: Run dtests (j8_without_vnodes)
+         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
+     environment:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_dtests_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:
+         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 --upgrade -r ~/cassandra-dtest/requirements.txt
+           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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_jvm_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_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 == "long-test" ]]; then
++                    $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})
+     - 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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_repeated_ant_test:
+     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_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 == "long-test" ]]; then
++                    $target == "long-test" || \
++                    $target == "stress-test" ]]; 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
+ 
+               # 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
+                   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/cassandra/build/test/output
+         path: /tmp/results/repeated_utest/output
          destination: junitxml
      - store_artifacts:
-         path: /tmp/cassandra/build/test/logs
+         path: /tmp/results/repeated_utest/logs
          destination: logs
      environment:
      - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
@@@ -978,25 -1863,26 +2135,28 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_dtests-with-vnodes:
+   j8_dtests_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
@@@ -1052,22 -1986,23 +2260,25 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    j8_jvm_dtests:
@@@ -1160,22 -2095,23 +2371,25 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    utests_long:
@@@ -1222,22 -2158,23 +2436,25 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    utests_compression:
@@@ -1330,196 -2267,23 +2547,25 @@@
      - 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_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
- 
-               # 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
-                   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:
-     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-     - ANT_HOME: /usr/share/ant
-     - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    j8_dtest_jars_build:
@@@ -1598,22 -2362,23 +2644,25 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
  workflows:
@@@ -1649,19 -2432,19 +2716,31 @@@
          requires:
          - start_utests_compression
          - build
+     - start_utests_compression_repeat:
+         type: approval
+     - utests_compression_repeat:
+         requires:
+         - start_utests_compression_repeat
+         - build
 +    - start_utests_stress:
 +        type: approval
 +    - utests_stress:
 +        requires:
 +        - start_utests_stress
 +        - build
++    - start_utests_stress_repeat:
++        type: approval
++    - utests_stress_repeat:
++        requires:
++        - start_utests_stress_repeat
++        - build
      - start_j8_dtest_jars_build:
          type: approval
      - j8_dtest_jars_build:
          requires:
 -        - start_j8_dtest_jars_build
          - build
 +        - start_j8_dtest_jars_build
-     - start_jvm_upgrade_dtest:
+     - start_jvm_upgrade_dtests:
          type: approval
      - j8_jvm_upgrade_dtests:
          requires:
@@@ -1673,40 -2462,42 +2758,42 @@@
          requires:
          - start_j8_dtests
          - build
-     - j8_dtests-no-vnodes:
+     - start_j8_dtests_repeat:
+         type: approval
+     - j8_dtests_repeat:
          requires:
-         - start_j8_dtests
+         - start_j8_dtests_repeat
          - build
-     - start_upgrade_tests:
+     - start_j8_dtests_vnode:
          type: approval
-     - j8_upgradetests-no-vnodes:
+     - j8_dtests_vnode:
          requires:
-         - start_upgrade_tests
+         - start_j8_dtests_vnode
          - build
-     - start_j8_repeated_utest:
+     - start_j8_dtests_vnode_repeat:
          type: approval
-     - j8_repeated_utest:
+     - j8_dtests_vnode_repeat:
          requires:
-         - start_j8_repeated_utest
+         - start_j8_dtests_vnode_repeat
          - build
-     - start_j8_repeated_dtest:
 -    - start_j8_upgrade_dtests:
++    - start_upgrade_dtests:
          type: approval
-     - j8_repeated_dtest:
+     - j8_upgrade_dtests:
          requires:
-         - start_j8_repeated_dtest
 -        - start_j8_upgrade_dtests
++        - start_upgrade_dtests
          - build
-     - start_repeated_upgrade_dtest:
+     - start_j8_upgrade_dtests_repeat:
          type: approval
-     - repeated_upgrade_dtest:
+     - j8_upgrade_dtests_repeat:
          requires:
-         - start_repeated_upgrade_dtest
+         - start_j8_upgrade_dtests_repeat
          - build
-     - start_repeated_jvm_upgrade_dtest:
+     - start_j8_repeated_ant_test:
          type: approval
-     - repeated_jvm_upgrade_dtest:
+     - j8_repeated_ant_test:
          requires:
-         - start_repeated_jvm_upgrade_dtest
-         - j8_dtest_jars_build
+         - start_j8_repeated_ant_test
+         - build
    pre-commit_tests:
      jobs:
      - start_pre-commit_tests:
@@@ -1732,57 -2533,41 +2829,54 @@@
          requires:
          - start_utests_compression
          - build
+     - utests_compression_repeat:
+         requires:
+         - start_utests_compression
+         - build
 +    - start_utests_stress:
 +        type: approval
 +    - utests_stress:
 +        requires:
 +        - start_utests_stress
 +        - build
-     - start_j8_dtest_jars_build:
++    - utests_stress_repeat:
++        requires:
++        - start_utests_stress
++        - build
+     - start_jvm_upgrade_dtests:
          type: approval
      - j8_dtest_jars_build:
          requires:
 -        - start_jvm_upgrade_dtests
          - 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_jvm_upgrade_dtests_repeat:
+         requires:
+         - j8_dtest_jars_build
+     - j8_dtests:
          requires:
          - build
-     - j8_dtests-no-vnodes:
+     - j8_dtests_repeat:
          requires:
          - build
-     - start_upgrade_tests:
-         type: approval
-     - j8_upgradetests-no-vnodes:
+     - j8_dtests_vnode:
          requires:
-         - start_upgrade_tests
          - build
-     - start_j8_repeated_utest:
-         type: approval
-     - j8_repeated_utest:
+     - j8_dtests_vnode_repeat:
          requires:
-         - start_j8_repeated_utest
          - build
-     - start_j8_repeated_dtest:
 -    - start_upgrade_dtests:
++    - start_upgrade_tests:
          type: approval
-     - j8_repeated_dtest:
+     - j8_upgrade_dtests:
          requires:
-         - start_j8_repeated_dtest
 -        - start_upgrade_dtests
++        - start_upgrade_tests
          - build
-     - start_repeated_upgrade_dtest:
-         type: approval
-     - repeated_upgrade_dtest:
+     - j8_upgrade_dtests_repeat:
          requires:
-         - start_repeated_upgrade_dtest
 -        - start_upgrade_dtests
++        - start_upgrade_tests
 +        - build
-     - start_repeated_jvm_upgrade_dtest:
-         type: approval
-     - repeated_jvm_upgrade_dtest:
++    - j8_repeated_ant_test:
 +        requires:
-         - start_repeated_jvm_upgrade_dtest
-         - j8_dtest_jars_build
+         - build
diff --cc .circleci/config.yml.MIDRES
index 34ac758ab4,38a2fa39ef..609d0a1026
--- a/.circleci/config.yml.MIDRES
+++ b/.circleci/config.yml.MIDRES
@@@ -108,28 -108,29 +108,31 @@@ 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_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_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-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: large
+     resource_class: medium
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
      parallelism: 25
@@@ -199,10 -199,11 +201,12 @@@
                if [[ $target == "test" || \
                      $target == "test-cdc" || \
                      $target == "test-compression" || \
-                     $target == "test-system-keyspace-directory" ]]; then
-                 name="-Dtest.name=$class_name"
+                     $target == "test-system-keyspace-directory" || \
 -                    $target == "long-test" ]]; then
++                    $target == "long-test" || \
++                    $target == "stress-test" ]]; then
+                 name_arg="-Dtest.name=${class##*.}"
                else
-                 name="-Dtest.name=$class_path"
+                 name_arg="-Dtest.name=$class"
                fi
  
                # Prepare the -Dtest.methods argument, which is optional
@@@ -282,148 -280,29 +283,206 @@@
      - 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_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_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-8-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   repeated_upgrade_dtest:
++  utests_stress_repeat:
 +    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: 25
 +    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 --upgrade -r ~/cassandra-dtest/requirements.txt
-           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: Run repeated Python dtest
++        name: Repeatedly run new or modifed JUnit tests
 +        no_output_timeout: 15m
 +        command: |
-           if [ "${REPEATED_UPGRADE_DTEST_NAME}" == "<nil>" ]; then
-             echo "Repeated dtest name hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_UPGRADE_DTEST_COUNT}" == "<nil>" ]; then
-             echo "Repeated dtest count hasn't been defined, exiting without running any test"
-           elif [ "${REPEATED_UPGRADE_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_UPGRADE_DTEST_COUNT} / CIRCLE_NODE_TOTAL))
-             if (($CIRCLE_NODE_INDEX < (${REPEATED_UPGRADE_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_UPGRADE_DTEST_NAME} $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
 +
-               source ~/env3.6/bin/activate
-               export PATH=$JAVA_HOME/bin:$PATH
++          # 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
 +
-               java -version
-               cd ~/cassandra-dtest
-               mkdir -p /tmp/dtest
++          # 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}"
 +
-               echo "env: $(env)"
-               echo "** done env"
-               mkdir -p /tmp/results/dtests
++          # Run each test class as many times as requested.
++          exit_code="$?"
++          for test in $tests; do
 +
-               stop_on_failure_arg=""
-               if ${REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE}; then
-                 stop_on_failure_arg="-x"
++              # Split class and method names from the test name
++              if [[ $test =~ "#" ]]; then
++                class=${test%"#"*}
++                method=${test#*"#"}
++              else
++                class=$test
++                method=""
 +              fi
 +
-               vnodes_args=""
-               if false; then
-                 vnodes_args="--use-vnodes --num-tokens=16"
++              # 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 == "long-test" || \
++                    $target == "stress-test" ]]; then
++                name_arg="-Dtest.name=${class##*.}"
++              else
++                name_arg="-Dtest.name=$class"
 +              fi
 +
-               upgrade_arg=""
-               if true; then
-                 upgrade_arg="--execute-upgrade-tests"
++              # Prepare the -Dtest.methods argument, which is optional
++              if [ $method == "" ]; then
++                methods_arg=""
++              else
++                methods_arg="-Dtest.methods=$method"
 +              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_UPGRADE_DTEST_NAME} | tee /tmp/dtest/stdout.txt
-             fi
-           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})
 +    - 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:
 +    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - ANT_HOME: /usr/share/ant
 +    - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_repeated_dtest:
+   utests_long_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
-     resource_class: large
+     resource_class: medium
      working_directory: ~/
      shell: /bin/bash -eo pipefail -l
      parallelism: 25
@@@ -431,68 -310,414 +490,420 @@@
      - 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 --upgrade -r ~/cassandra-dtest/requirements.txt
-           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: Run repeated Python dtest
+         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"
+           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
  
-               source ~/env3.6/bin/activate
-               export PATH=$JAVA_HOME/bin:$PATH
+           # Calculate the number of test iterations to be run by the current parallel runner.
+           count=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))
+           if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then
+             count=$((count+1))
+           fi
  
-               java -version
-               cd ~/cassandra-dtest
-               mkdir -p /tmp/dtest
+           # Put manually specified tests and automatically detected tests together, removing duplicates
+           tests=$(echo ${REPEATED_UTESTS_LONG} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u)
+           echo "Tests to be repeated: ${tests}"
  
-               echo "env: $(env)"
-               echo "** done env"
-               mkdir -p /tmp/results/dtests
+           # Run each test class as many times as requested.
+           exit_code="$?"
+           for test in $tests; do
  
-               stop_on_failure_arg=""
-               if ${REPEATED_DTEST_STOP_ON_FAILURE}; then
-                 stop_on_failure_arg="-x"
+               # Split class and method names from the test name
+               if [[ $test =~ "#" ]]; then
+                 class=${test%"#"*}
+                 method=${test#*"#"}
+               else
+                 class=$test
+                 method=""
                fi
  
-               vnodes_args=""
-               if ${REPEATED_DTEST_VNODES}; then
-                 vnodes_args="--use-vnodes --num-tokens=16"
+               # 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 == "long-test" ]]; then
++                    $target == "long-test" || \
++                    $target == "stress-test" ]]; then
+                 name_arg="-Dtest.name=${class##*.}"
+               else
+                 name_arg="-Dtest.name=$class"
                fi
  
-               upgrade_arg=""
-               if false; then
-                 upgrade_arg="--execute-upgrade-tests"
+               # 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 long-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})
+     - 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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_unit_tests_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 25
+     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_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 == "long-test" ]]; then
++                    $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})
+     - 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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-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: xlarge
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 25
+     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 --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 freeze
+     - run:
+         name: Run repeated Python dtest
+         no_output_timeout: 15m
+         command: |
+           if [ "${REPEATED_UPGRADE_DTESTS}" == "<nil>" ]; then
+             echo "Repeated dtest name hasn't been defined, exiting without running any test"
+           elif [ "${REPEATED_UPGRADE_DTESTS_COUNT}" == "<nil>" ]; then
+             echo "Repeated dtest count hasn't been defined, exiting without running any test"
+           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_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_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_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 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
@@@ -522,22 -747,23 +933,25 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    build:
@@@ -619,25 -845,26 +1033,28 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_dtests-no-vnodes:
+   j8_dtests_vnode_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: large
@@@ -693,25 -968,26 +1158,28 @@@
      - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_upgradetests-no-vnodes:
+   j8_upgrade_dtests:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: xlarge
@@@ -808,84 -1084,195 +1276,265 @@@
      - 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_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_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-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
++    resource_class: large
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 25
+     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 == "long-test" ]]; then
++                    $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})
+     - 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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-8-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +  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 -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:
 +    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - ANT_HOME: /usr/share/ant
 +    - 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_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_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-8-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
    j8_unit_tests:
@@@ -961,7 -1348,505 +1610,515 @@@
          path: /tmp/cassandra/build/test/output
          destination: junitxml
      - store_artifacts:
-         path: /tmp/cassandra/build/test/logs
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_dtests:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: large
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 50
+     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 --upgrade -r ~/cassandra-dtest/requirements.txt
+           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 [...]
+     - run:
+         name: Run dtests (j8_without_vnodes)
+         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
+     environment:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_dtests_vnode:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: large
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 50
+     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 --upgrade -r ~/cassandra-dtest/requirements.txt
+           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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_jvm_dtests_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 25
+     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 == "long-test" ]]; then
++                    $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})
+     - 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:
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - ANT_HOME: /usr/share/ant
+     - 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_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-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_repeated_ant_test:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 25
+     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 == "long-test" ]]; then
++                    $target == "long-test" || \
++                    $target == "stress-test" ]]; 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
+ 
+               # 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
+                   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
... 996 lines suppressed ...


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