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/11/03 11:47:23 UTC

[cassandra] branch trunk updated (0bde8a2e20 -> 6f801d4232)

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

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


    from 0bde8a2e20 Fix BootstrapTest failure on vnodes
     new 116ce3bc05 CircleCI: Add jobs for missing specialized unit tests
     new 7df905a429 Merge branch 'cassandra-3.0' into cassandra-3.11
     new 6152cb08db Merge branch 'cassandra-3.11' into cassandra-4.0
     new 1d1866b86d Merge branch 'cassandra-4.0' into cassandra-4.1
     new 6f801d4232 Merge branch 'cassandra-4.1' into trunk

The 5 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                |  621 ++++-
 .circleci/config-2_1.yml.high_res.patch |   13 +-
 .circleci/config-2_1.yml.mid_res.patch  |   39 +-
 .circleci/config.yml                    | 4431 ++++++++++++++++++++----------
 .circleci/config.yml.HIGHRES            | 4541 ++++++++++++++++++++++---------
 .circleci/config.yml.LOWRES             | 4537 +++++++++++++++++++++---------
 .circleci/config.yml.MIDRES             | 4451 +++++++++++++++++++++---------
 .circleci/generate.sh                   |   21 +-
 8 files changed, 13188 insertions(+), 5466 deletions(-)


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


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

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

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

commit 6f801d42324e24cc6a57274b57705e724501eb98
Merge: 0bde8a2e20 1d1866b86d
Author: Andrés de la Peña <a....@gmail.com>
AuthorDate: Thu Nov 3 11:46:20 2022 +0000

    Merge branch 'cassandra-4.1' into trunk

 .circleci/config-2_1.yml                |  621 ++++-
 .circleci/config-2_1.yml.high_res.patch |   13 +-
 .circleci/config-2_1.yml.mid_res.patch  |   39 +-
 .circleci/config.yml                    | 4431 ++++++++++++++++++++----------
 .circleci/config.yml.HIGHRES            | 4541 ++++++++++++++++++++++---------
 .circleci/config.yml.LOWRES             | 4537 +++++++++++++++++++++---------
 .circleci/config.yml.MIDRES             | 4451 +++++++++++++++++++++---------
 .circleci/generate.sh                   |   21 +-
 8 files changed, 13188 insertions(+), 5466 deletions(-)

diff --cc .circleci/config-2_1.yml
index d9cd921dde,7c348937de..421dd612c0
--- a/.circleci/config-2_1.yml
+++ b/.circleci/config-2_1.yml
@@@ -299,78 -304,150 +305,174 @@@ j8_separate_jobs: &j8_separate_job
          requires:
            - start_j11_unit_tests_repeat
            - j8_build
-     # specialized unit tests (all run on request using Java 8)
-     - start_utests_long:
+     # specialized unit tests (all run on request)
+     - start_j8_utests_long:
          type: approval
-     - utests_long:
+     - j8_utests_long:
          requires:
-           - start_utests_long
+           - start_j8_utests_long
            - j8_build
-     - start_utests_long_repeat:
+     - start_j11_utests_long:
          type: approval
-     - utests_long_repeat:
+     - j11_utests_long:
          requires:
-           - start_utests_long_repeat
+           - start_j11_utests_long
            - j8_build
-     - start_utests_compression:
+     - start_j8_utests_long_repeat:
          type: approval
-     - utests_compression:
+     - j8_utests_long_repeat:
          requires:
-           - start_utests_compression
+           - start_j8_utests_long_repeat
            - j8_build
-     - start_utests_compression_repeat:
+     - start_j11_utests_long_repeat:
          type: approval
-     - utests_compression_repeat:
+     - j11_utests_long_repeat:
          requires:
-           - start_utests_compression_repeat
+           - start_j11_utests_long_repeat
            - j8_build
-     - start_utests_trie:
+     - start_j8_utests_cdc:
          type: approval
-     - utests_trie:
+     - j8_utests_cdc:
          requires:
-           - start_utests_trie
+           - start_j8_utests_cdc
            - j8_build
-     - start_utests_trie_repeat:
+     - start_j11_utests_cdc:
          type: approval
-     - utests_trie_repeat:
+     - j11_utests_cdc:
          requires:
-           - start_utests_trie_repeat
+           - start_j11_utests_cdc
            - j8_build
-     - start_utests_stress:
+     - start_j8_utests_cdc_repeat:
          type: approval
-     - utests_stress:
+     - j8_utests_cdc_repeat:
          requires:
-           - start_utests_stress
+           - start_j8_utests_cdc_repeat
            - j8_build
-     - start_utests_stress_repeat:
+     - start_j11_utests_cdc_repeat:
          type: approval
-     - utests_stress_repeat:
+     - j11_utests_cdc_repeat:
          requires:
-           - start_utests_stress_repeat
+           - start_j11_utests_cdc_repeat
            - j8_build
-     - start_utests_fqltool:
+     - start_j8_utests_compression:
          type: approval
-     - utests_fqltool:
+     - j8_utests_compression:
          requires:
-           - start_utests_fqltool
+           - start_j8_utests_compression
            - j8_build
-     - start_utests_fqltool_repeat:
+     - start_j11_utests_compression:
          type: approval
-     - utests_fqltool_repeat:
+     - j11_utests_compression:
          requires:
-           - start_utests_fqltool_repeat
+           - start_j11_utests_compression
            - j8_build
-     - start_utests_system_keyspace_directory:
+     - start_j8_utests_compression_repeat:
          type: approval
-     - utests_system_keyspace_directory:
+     - j8_utests_compression_repeat:
          requires:
-           - start_utests_system_keyspace_directory
+           - start_j8_utests_compression_repeat
            - j8_build
-     - start_utests_system_keyspace_directory_repeat:
+     - start_j11_utests_compression_repeat:
          type: approval
-     - utests_system_keyspace_directory_repeat:
+     - j11_utests_compression_repeat:
          requires:
-           - start_utests_system_keyspace_directory_repeat
+           - start_j11_utests_compression_repeat
+           - j8_build
++    - start_j8_utests_trie:
++        type: approval
++    - j8_utests_trie:
++        requires:
++          - start_j8_utests_trie
++          - j8_build
++    - start_j11_utests_trie:
++        type: approval
++    - j11_utests_trie:
++        requires:
++          - start_j11_utests_trie
++          - j8_build
++    - start_j8_utests_trie_repeat:
++        type: approval
++    - j8_utests_trie_repeat:
++        requires:
++          - start_j8_utests_trie_repeat
++          - j8_build
++    - start_j11_utests_trie_repeat:
++        type: approval
++    - j11_utests_trie_repeat:
++        requires:
++          - start_j11_utests_trie_repeat
++          - j8_build
+     - start_j8_utests_stress:
+         type: approval
+     - j8_utests_stress:
+         requires:
+           - start_j8_utests_stress
+           - j8_build
+     - start_j11_utests_stress:
+         type: approval
+     - j11_utests_stress:
+         requires:
+           - start_j11_utests_stress
+           - j8_build
+     - start_j8_utests_stress_repeat:
+         type: approval
+     - j8_utests_stress_repeat:
+         requires:
+           - start_j8_utests_stress_repeat
+           - j8_build
+     - start_j11_utests_stress_repeat:
+         type: approval
+     - j11_utests_stress_repeat:
+         requires:
+           - start_j11_utests_stress_repeat
+           - j8_build
+     - start_j8_utests_fqltool:
+         type: approval
+     - j8_utests_fqltool:
+         requires:
+           - start_j8_utests_fqltool
+           - j8_build
+     - start_j11_utests_fqltool:
+         type: approval
+     - j11_utests_fqltool:
+         requires:
+           - start_j11_utests_fqltool
+           - j8_build
+     - start_j8_utests_fqltool_repeat:
+         type: approval
+     - j8_utests_fqltool_repeat:
+         requires:
+           - start_j8_utests_fqltool_repeat
+           - j8_build
+     - start_j11_utests_fqltool_repeat:
+         type: approval
+     - j11_utests_fqltool_repeat:
+         requires:
+           - start_j11_utests_fqltool_repeat
+           - j8_build
+     - start_j8_utests_system_keyspace_directory:
+         type: approval
+     - j8_utests_system_keyspace_directory:
+         requires:
+           - start_j8_utests_system_keyspace_directory
+           - j8_build
+     - start_j11_utests_system_keyspace_directory:
+         type: approval
+     - j11_utests_system_keyspace_directory:
+         requires:
+           - start_j11_utests_system_keyspace_directory
+           - j8_build
+     - start_j8_utests_system_keyspace_directory_repeat:
+         type: approval
+     - j8_utests_system_keyspace_directory_repeat:
+         requires:
+           - start_j8_utests_system_keyspace_directory_repeat
+           - j8_build
+     - start_j11_utests_system_keyspace_directory_repeat:
+         type: approval
+     - j11_utests_system_keyspace_directory_repeat:
+         requires:
+           - start_j11_utests_system_keyspace_directory_repeat
            - j8_build
      - start_j8_dtest_jars_build:
          type: approval
@@@ -572,19 -683,9 +708,27 @@@ j8_pre-commit_jobs: &j8_pre-commit_job
          requires:
            - start_utests_compression
            - j8_build
 +    - start_utests_trie:
 +        type: approval
-     - utests_trie:
++    - j8_utests_trie:
++        requires:
++          - start_utests_trie
++          - j8_build
++    - j11_utests_trie:
 +        requires:
 +          - start_utests_trie
 +          - j8_build
-     - utests_trie_repeat:
++    - j8_utests_trie_repeat:
++        requires:
++          - start_utests_trie
++          - j8_build
++    - j11_utests_trie_repeat:
 +        requires:
 +          - start_utests_trie
 +          - j8_build
      - start_utests_stress:
          type: approval
-     - utests_stress:
+     - j8_utests_stress:
          requires:
            - start_utests_stress
            - j8_build
@@@ -765,6 -892,79 +935,91 @@@ j11_separate_jobs: &j11_separate_job
          requires:
            - start_j11_cqlsh_tests
            - j11_build
+     # specialized unit tests (all run on request)
+     - start_j11_utests_long:
+         type: approval
+     - j11_utests_long:
+         requires:
+           - start_j11_utests_long
+           - j11_build
+     - start_j11_utests_long_repeat:
+         type: approval
+     - j11_utests_long_repeat:
+         requires:
+           - start_j11_utests_long_repeat
+           - j11_build
+     - start_j11_utests_cdc:
+         type: approval
+     - j11_utests_cdc:
+         requires:
+           - start_j11_utests_cdc
+           - j11_build
+     - start_j11_utests_cdc_repeat:
+         type: approval
+     - j11_utests_cdc_repeat:
+         requires:
+           - start_j11_utests_cdc_repeat
+           - j11_build
+     - start_j11_utests_compression:
+         type: approval
+     - j11_utests_compression:
+         requires:
+           - start_j11_utests_compression
+           - j11_build
+     - start_j11_utests_compression_repeat:
+         type: approval
+     - j11_utests_compression_repeat:
+         requires:
+           - start_j11_utests_compression_repeat
+           - j11_build
++    - start_j11_utests_trie:
++        type: approval
++    - j11_utests_trie:
++        requires:
++          - start_j11_utests_trie
++          - j11_build
++    - start_j11_utests_trie_repeat:
++        type: approval
++    - j11_utests_trie_repeat:
++        requires:
++          - start_j11_utests_trie_repeat
++          - j11_build
+     - start_j11_utests_stress:
+         type: approval
+     - j11_utests_stress:
+         requires:
+           - start_j11_utests_stress
+           - j11_build
+     - start_j11_utests_stress_repeat:
+         type: approval
+     - j11_utests_stress_repeat:
+         requires:
+           - start_j11_utests_stress_repeat
+           - j11_build
+     - start_j11_utests_fqltool:
+         type: approval
+     - j11_utests_fqltool:
+         requires:
+           - start_j11_utests_fqltool
+           - j11_build
+     - start_j11_utests_fqltool_repeat:
+         type: approval
+     - j11_utests_fqltool_repeat:
+         requires:
+           - start_j11_utests_fqltool_repeat
+           - j11_build
+     - start_j11_utests_system_keyspace_directory:
+         type: approval
+     - j11_utests_system_keyspace_directory:
+         requires:
+           - start_j11_utests_system_keyspace_directory
+           - j11_build
+     - start_j11_utests_system_keyspace_directory_repeat:
+         type: approval
+     - j11_utests_system_keyspace_directory_repeat:
+         requires:
+           - start_j11_utests_system_keyspace_directory_repeat
+           - j11_build
      # Java 11 repeated utest
      - start_j11_repeated_ant_test:
          type: approval
@@@ -841,6 -1041,67 +1096,77 @@@ j11_pre-commit_jobs: &j11_pre-commit_jo
      - j11_cqlsh_dtests_py38_vnode:
          requires:
            - j11_build
+     # specialized unit tests (all run on request)
+     - start_utests_long:
+         type: approval
+     - j11_utests_long:
+         requires:
+           - start_utests_long
+           - j11_build
+     - j11_utests_long_repeat:
+         requires:
+           - start_utests_long
+           - j11_build
+     - start_utests_cdc:
+         type: approval
+     - j11_utests_cdc:
+         requires:
+           - start_utests_cdc
+           - j11_build
+     - j11_utests_cdc_repeat:
+         requires:
+           - start_utests_cdc
+           - j11_build
+     - start_utests_compression:
+         type: approval
+     - j11_utests_compression:
+         requires:
+           - start_utests_compression
+           - j11_build
+     - j11_utests_compression_repeat:
+         requires:
+           - start_utests_compression
+           - j11_build
++    - start_utests_trie:
++        type: approval
++    - j11_utests_trie:
++        requires:
++          - start_utests_trie
++          - j11_build
++    - j11_utests_trie_repeat:
++        requires:
++          - start_utests_trie
++          - j11_build
+     - start_utests_stress:
+         type: approval
+     - j11_utests_stress:
+         requires:
+           - start_utests_stress
+           - j11_build
+     - j11_utests_stress_repeat:
+         requires:
+           - start_utests_stress
+           - j11_build
+     - start_utests_fqltool:
+         type: approval
+     - j11_utests_fqltool:
+         requires:
+           - start_utests_fqltool
+           - j11_build
+     - j11_utests_fqltool_repeat:
+         requires:
+           - start_utests_fqltool
+           - j11_build
+     - start_utests_system_keyspace_directory:
+         type: approval
+     - j11_utests_system_keyspace_directory:
+         requires:
+           - start_utests_system_keyspace_directory
+           - j11_build
+     - j11_utests_system_keyspace_directory_repeat:
+         requires:
+           - start_utests_system_keyspace_directory
+           - j11_build
  
  workflows:
      version: 2
@@@ -1041,17 -1340,7 +1405,27 @@@ jobs
        - run_parallel_junit_tests:
            target: testclasslist-compression
  
-   utests_trie:
++  j8_utests_trie:
 +    <<: *j8_par_executor
 +    steps:
 +      - attach_workspace:
 +          at: /home/cassandra
 +      - create_junit_containers
 +      - log_environment
 +      - run_parallel_junit_tests:
 +          target: testclasslist-trie
 +
-   utests_stress:
++  j11_utests_trie:
++    <<: *j11_par_executor
++    steps:
++      - attach_workspace:
++          at: /home/cassandra
++      - create_junit_containers
++      - log_environment
++      - run_parallel_junit_tests:
++          target: testclasslist-trie
++
+   j8_utests_stress:
      <<: *j8_seq_executor
      steps:
        - attach_workspace:
@@@ -1297,15 -1644,7 +1729,23 @@@
        - log_environment
        - run_utests_compression_repeat
  
-   utests_trie_repeat:
++  j8_utests_trie_repeat:
 +    <<: *j8_repeated_utest_executor
 +    steps:
 +      - attach_workspace:
 +          at: /home/cassandra
 +      - log_environment
 +      - run_utests_trie_repeat
 +
-   utests_system_keyspace_directory_repeat:
++  j11_utests_trie_repeat:
++    <<: *j11_repeated_utest_executor
++    steps:
++      - attach_workspace:
++          at: /home/cassandra
++      - log_environment
++      - run_utests_trie_repeat
++
+   j8_utests_system_keyspace_directory_repeat:
      <<: *j8_repeated_utest_executor
      steps:
        - attach_workspace:
@@@ -2001,7 -2364,18 +2473,20 @@@ commands
              if [ "$vnodes" = true ] ; then
                vnodes_args="-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'"
              fi
-             
+ 
+             # Prepare the testtag for the target, used by the test macro in build.xml to group the output files
+             target=<<parameters.target>>
+             testtag=""
+             if [[ $target == "test-cdc" ]]; then
+               testtag="cdc"
+             elif [[ $target == "test-compression" ]]; then
+               testtag="compression"
+             elif [[ $target == "test-system-keyspace-directory" ]]; then
+               testtag="system_keyspace_directory"
++            elif [[ $target == "test-trie" ]]; then
++              testtag="trie"
+             fi
+ 
              # Run each test class as many times as requested.
              exit_code="$?"
              for test in $tests; do
diff --cc .circleci/config-2_1.yml.high_res.patch
index 669f07c48b,1d3d0ed6be..56b8d0d3d9
--- a/.circleci/config-2_1.yml.high_res.patch
+++ b/.circleci/config-2_1.yml.high_res.patch
@@@ -1,6 -1,6 +1,6 @@@
- --- config-2_1.yml	2022-10-19 18:01:31.517748550 +0300
- +++ config-2_1.yml.HIGHRES	2022-10-19 18:06:37.789192360 +0300
 ---- config-2_1.yml	2022-10-25 12:28:18.966893212 +0100
 -+++ config-2_1.yml.HIGHRES	2022-10-25 12:29:12.625678547 +0100
 -@@ -148,14 +148,14 @@
++--- config-2_1.yml	2022-10-25 11:32:05.718970156 +0100
+++++ config-2_1.yml.HIGHRES	2022-10-25 11:32:31.360769127 +0100
 +@@ -149,14 +149,14 @@
   j8_par_executor: &j8_par_executor
     executor:
       name: java8-executor
@@@ -19,7 -19,7 +19,7 @@@
   
   j8_small_executor: &j8_small_executor
     executor:
- @@ -167,62 +167,68 @@
 -@@ -166,68 +166,74 @@
++@@ -167,68 +167,74 @@
   j8_medium_par_executor: &j8_medium_par_executor
     executor:
       name: java8-executor
diff --cc .circleci/config-2_1.yml.mid_res.patch
index c1eef323c8,debd91f000..406ef00b74
--- a/.circleci/config-2_1.yml.mid_res.patch
+++ b/.circleci/config-2_1.yml.mid_res.patch
@@@ -1,6 -1,6 +1,6 @@@
- --- config-2_1.yml	2022-10-19 18:01:31.517748550 +0300
- +++ config-2_1.yml.MIDRES	2022-10-19 18:06:26.777068521 +0300
 ---- config-2_1.yml	2022-10-25 12:28:18.966893212 +0100
 -+++ config-2_1.yml.MIDRES	2022-10-25 12:29:12.619201467 +0100
 -@@ -148,14 +148,14 @@
++--- config-2_1.yml	2022-10-25 11:32:05.718970156 +0100
+++++ config-2_1.yml.MIDRES	2022-10-25 11:32:31.352928378 +0100
 +@@ -149,14 +149,14 @@
   j8_par_executor: &j8_par_executor
     executor:
       name: java8-executor
@@@ -68,7 -68,7 +68,7 @@@
   
   j11_small_executor: &j11_small_executor
     executor:
- @@ -194,35 +206,47 @@
 -@@ -193,41 +205,53 @@
++@@ -194,41 +206,53 @@
       #exec_resource_class: medium
     parallelism: 1
   
@@@ -122,7 -129,7 +129,7 @@@
   
   j8_separate_jobs: &j8_separate_jobs
     jobs:
- @@ -1078,7 +1102,7 @@
 -@@ -1393,7 +1417,7 @@
++@@ -1478,7 +1502,7 @@
             target: testclasslist-system-keyspace-directory
   
     j8_dtests_vnode:
@@@ -131,7 -138,7 +138,7 @@@
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -1092,7 +1116,7 @@
 -@@ -1407,7 +1431,7 @@
++@@ -1492,7 +1516,7 @@
             pytest_extra_args: '--use-vnodes --num-tokens=16 --skip-resource-intensive-tests'
   
     j11_dtests_vnode:
@@@ -140,7 -147,7 +147,7 @@@
       steps:
       - attach_workspace:
           at: /home/cassandra
- @@ -1107,7 +1131,7 @@
 -@@ -1422,7 +1446,7 @@
++@@ -1507,7 +1531,7 @@
           pytest_extra_args: '--use-vnodes --num-tokens=16 --skip-resource-intensive-tests'
   
     j8_dtests:
@@@ -149,7 -156,7 +156,7 @@@
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -1121,7 +1145,7 @@
 -@@ -1436,7 +1460,7 @@
++@@ -1521,7 +1545,7 @@
             pytest_extra_args: '--skip-resource-intensive-tests'
   
     j11_dtests:
@@@ -158,7 -165,7 +165,7 @@@
       steps:
       - attach_workspace:
           at: /home/cassandra
- @@ -1136,7 +1160,7 @@
 -@@ -1451,7 +1475,7 @@
++@@ -1536,7 +1560,7 @@
           pytest_extra_args: '--skip-resource-intensive-tests'
   
     j8_upgrade_dtests:
@@@ -167,7 -174,7 +174,7 @@@
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -1150,7 +1174,7 @@
 -@@ -1465,7 +1489,7 @@
++@@ -1550,7 +1574,7 @@
             pytest_extra_args: '--execute-upgrade-tests-only --upgrade-target-version-only --upgrade-version-selection all'
   
     j8_cqlsh_dtests_py3_vnode:
@@@ -176,7 -183,7 +183,7 @@@
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -1165,7 +1189,7 @@
 -@@ -1480,7 +1504,7 @@
++@@ -1565,7 +1589,7 @@
             extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
   
     j8_cqlsh_dtests_py38_vnode:
@@@ -185,7 -192,7 +192,7 @@@
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -1183,7 +1207,7 @@
 -@@ -1498,7 +1522,7 @@
++@@ -1583,7 +1607,7 @@
             python_version: '3.8'
   
     j8_cqlsh_dtests_py3:
@@@ -194,7 -201,7 +201,7 @@@
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -1198,7 +1222,7 @@
 -@@ -1513,7 +1537,7 @@
++@@ -1598,7 +1622,7 @@
             extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
   
     j8_cqlsh_dtests_py38:
@@@ -203,7 -210,7 +210,7 @@@
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -1216,7 +1240,7 @@
 -@@ -1531,7 +1555,7 @@
++@@ -1616,7 +1640,7 @@
             python_version: '3.8'
   
     j11_cqlsh_dtests_py3_vnode:
@@@ -212,7 -219,7 +219,7 @@@
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -1231,7 +1255,7 @@
 -@@ -1546,7 +1570,7 @@
++@@ -1631,7 +1655,7 @@
             extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
   
     j11_cqlsh_dtests_py38_vnode:
@@@ -221,7 -228,7 +228,7 @@@
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -1249,7 +1273,7 @@
 -@@ -1564,7 +1588,7 @@
++@@ -1649,7 +1673,7 @@
             python_version: '3.8'
   
     j11_cqlsh_dtests_py3:
@@@ -230,7 -237,7 +237,7 @@@
       steps:
         - attach_workspace:
             at: /home/cassandra
- @@ -1264,7 +1288,7 @@
 -@@ -1579,7 +1603,7 @@
++@@ -1664,7 +1688,7 @@
             extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
   
     j11_cqlsh_dtests_py38:
diff --cc .circleci/config.yml
index 7cd748115f,3e06f9b7f2..92c4b6dbf1
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@@ -259,7 -170,7 +170,7 @@@ jobs
      - run:
          name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and [...]
      - store_test_results:
          path: /tmp/results/repeated_utests/output
      - store_artifacts:
@@@ -726,28 -602,19 +602,19 @@@
            which java
            java -version
      - run:
-         name: Run Unit Tests (testclasslist)
-         command: |
-           set -x
-           export PATH=$JAVA_HOME/bin:$PATH
-           time mv ~/cassandra /tmp
-           cd /tmp/cassandra
-           if [ -d ~/dtest_jars ]; then
-             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
-           fi
-           test_timeout=$(grep 'name="test.unit.timeout"' build.xml | awk -F'"' '{print $4}' || true)
-           if [ -z "$test_timeout" ]; then
-             test_timeout=$(grep 'name="test.timeout"' build.xml | awk -F'"' '{print $4}')
-           fi
-           ant testclasslist   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
+         name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and a [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and a [...]
      - store_test_results:
-         path: /tmp/cassandra/build/test/output/
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/cassandra/build/test/output
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
          destination: junitxml
      - store_artifacts:
-         path: /tmp/cassandra/build/test/logs
+         path: /tmp/results/repeated_utests/logs
          destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
@@@ -792,67 -659,1730 +659,1820 @@@
      - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
      - CASSANDRA_USE_JDK11: true
-   j8_cqlsh_dtests_py3:
++  j8_utests_trie_repeat:
 +    docker:
 +    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
 +    resource_class: medium
 +    working_directory: ~/
 +    shell: /bin/bash -eo pipefail -l
 +    parallelism: 4
 +    steps:
 +    - attach_workspace:
 +        at: /home/cassandra
 +    - run:
-         name: Clone Cassandra dtest Repository (via git)
-         command: |
-           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
-     - run:
-         name: Configure virtualenv and python Dependencies
++        name: Log Environment Information
 +        command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
++          echo '*** id ***'
++          id
++          echo '*** cat /proc/cpuinfo ***'
++          cat /proc/cpuinfo
++          echo '*** free -m ***'
++          free -m
++          echo '*** df -m ***'
++          df -m
++          echo '*** ifconfig -a ***'
++          ifconfig -a
++          echo '*** uname -a ***'
++          uname -a
++          echo '*** mount ***'
++          mount
++          echo '*** env ***'
++          env
++          echo '*** java ***'
++          which java
++          java -version
++    - run:
++        name: Repeatedly run new or modifed JUnit tests
++        no_output_timeout: 15m
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++    - store_test_results:
++        path: /tmp/results/repeated_utests/output
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/stdout
++        destination: stdout
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/output
++        destination: junitxml
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/logs
++        destination: logs
++    environment:
++    - ANT_HOME: /usr/share/ant
++    - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
++    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
++    - LANG: en_US.UTF-8
++    - KEEP_TEST_DIR: true
++    - DEFAULT_DIR: /home/cassandra/cassandra-dtest
++    - PYTHONIOENCODING: utf-8
++    - PYTHONUNBUFFERED: true
++    - CASS_DRIVER_NO_EXTENSIONS: true
++    - CASS_DRIVER_NO_CYTHON: true
++    - CASSANDRA_SKIP_SYNC: true
++    - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
++    - DTEST_BRANCH: trunk
++    - CCM_MAX_HEAP_SIZE: 1024M
++    - CCM_HEAP_NEWSIZE: 256M
++    - REPEATED_TESTS_STOP_ON_FAILURE: false
++    - REPEATED_UTESTS: null
++    - REPEATED_UTESTS_COUNT: 500
++    - REPEATED_UTESTS_FQLTOOL: null
++    - REPEATED_UTESTS_FQLTOOL_COUNT: 500
++    - REPEATED_UTESTS_LONG: null
++    - REPEATED_UTESTS_LONG_COUNT: 100
++    - REPEATED_UTESTS_STRESS: null
++    - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
++    - REPEATED_JVM_DTESTS: null
++    - REPEATED_JVM_DTESTS_COUNT: 500
++    - REPEATED_JVM_UPGRADE_DTESTS: null
++    - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
++    - REPEATED_DTESTS: null
++    - REPEATED_DTESTS_COUNT: 500
++    - REPEATED_UPGRADE_DTESTS: null
++    - REPEATED_UPGRADE_DTESTS_COUNT: 25
++    - REPEATED_ANT_TEST_TARGET: testsome
++    - REPEATED_ANT_TEST_CLASS: null
++    - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
++    - REPEATED_ANT_TEST_COUNT: 500
++    - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
++    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_jvm_dtests_vnode:
+     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: Determine distributed Tests to Run
+         command: |
+           # reminder: this code (along with all the steps) is independently executed on every circle container
+           # so the goal here is to get the circleci script to return the tests *this* container will run
+           # which we do via the `circleci` cli tool.
+ 
+           rm -fr ~/cassandra-dtest/upgrade_tests
+           echo "***java tests***"
+ 
+           # get all of our unit test filenames
+           set -eo pipefail && circleci tests glob "$HOME/cassandra/test/distributed/**/*.java" > /tmp/all_java_unit_tests.txt
+ 
+           # split up the unit tests into groups based on the number of containers we have
+           set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt
+           set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/distributed/;;g" | grep "Test\.java$" | grep -v upgrade > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
+           echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt"
+           cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
+         no_output_timeout: 15m
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Run Unit Tests (testclasslist)
+         command: |
+           set -x
+           export PATH=$JAVA_HOME/bin:$PATH
+           time mv ~/cassandra /tmp
+           cd /tmp/cassandra
+           if [ -d ~/dtest_jars ]; then
+             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
+           fi
+           test_timeout=$(grep 'name="test.distributed.timeout"' build.xml | awk -F'"' '{print $4}' || true)
+           if [ -z "$test_timeout" ]; then
+             test_timeout=$(grep 'name="test.timeout"' build.xml | awk -F'"' '{print $4}')
+           fi
+           ant testclasslist -Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16' -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=distributed
+         no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_utests_compression_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
+     - store_test_results:
+         path: /tmp/results/repeated_utests/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_unit_tests:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Determine 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:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j8_cqlsh_dtests_py3:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
          name: Determine Tests to Run (j8_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 [...]
+         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"
+           cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt
+ 
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.6' ]; then
+             export CQLSH_PYTHON=/usr/bin/python3.6
+           fi
+ 
+           java -version
+           cd ~/cassandra-dtest
+           mkdir -p /tmp/dtest
+ 
+           echo "env: $(env)"
+           echo "** done env"
+           mkdir -p /tmp/results/dtests
+           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
+           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt`
+           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j8_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+     - store_test_results:
+         path: /tmp/results
+     - store_artifacts:
+         path: /tmp/dtest
+         destination: dtest_j8_without_vnodes
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_j8_without_vnodes_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_cqlsh_dtests_py38:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.8/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
+         name: Determine Tests to Run (j11_without_vnodes)
+         no_output_timeout: 5m
+         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.8/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j11_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --skip-resource- [...]
+     - run:
+         name: Run dtests (j11_without_vnodes)
+         no_output_timeout: 15m
+         command: |
+           echo "cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt"
+           cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt
+ 
+           source ~/env3.8/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.8' ]; then
+             export CQLSH_PYTHON=/usr/bin/python3.8
+           fi
+ 
+           java -version
+           cd ~/cassandra-dtest
+           mkdir -p /tmp/dtest
+ 
+           echo "env: $(env)"
+           echo "** done env"
+           mkdir -p /tmp/results/dtests
+           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
+           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt`
+           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_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_j11_without_vnodes
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_j11_without_vnodes_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j11_utests_compression_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
+     - store_test_results:
+         path: /tmp/results/repeated_utests/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j11_repeated_ant_test:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     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-trie" || \
+                     $target == "test-system-keyspace-directory" || \
+                     $target == "fqltool-test" || \
+                     $target == "long-test" || \
+                     $target == "stress-test" || \
+                     $target == "test-simulator-dtest" ]]; then
+                 name="-Dtest.name=$class_name"
+               else
+                 name="-Dtest.name=$class_path"
+               fi
+ 
+               # Prepare the -Dtest.methods argument, which is optional
+               if [ "${REPEATED_ANT_TEST_METHODS}" == "<nil>" ]; then
+                 methods=""
+               else
+                 methods="-Dtest.methods=${REPEATED_ANT_TEST_METHODS}"
+               fi
+ 
+               # Prepare the JVM dtests vnodes argument, which is optional
+               vnodes_args=""
+               if ${REPEATED_ANT_TEST_VNODES}; then
+                 vnodes_args="-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'"
+               fi
+ 
+               # Run the test target as many times as requested collecting the exit code,
+               # stopping the iteration only if stop_on_failure is set.
+               exit_code="$?"
+               for i in $(seq -w 1 $count); do
+ 
+                 echo "Running test iteration $i of $count"
+ 
+                 # run the test
+                 status="passes"
+                 if !( set -o pipefail && ant $target $name $methods $vnodes_args -Dno-build-test=true | tee stdout.txt ); then
+                   status="fails"
+                   exit_code=1
+                 fi
+ 
+                 # move the stdout output file
+                 dest=/tmp/results/repeated_utest/stdout/${status}/${i}
+                 mkdir -p $dest
+                 mv stdout.txt $dest/${REPEATED_ANT_TEST_TARGET}-${REPEATED_ANT_TEST_CLASS}.txt
+ 
+                 # move the XML output files
+                 source=build/test/output
+                 dest=/tmp/results/repeated_utest/output/${status}/${i}
+                 mkdir -p $dest
+                 if [[ -d $source && -n "$(ls $source)" ]]; then
+                   mv $source/* $dest/
+                 fi
+ 
+                 # move the log files
+                 source=build/test/logs
+                 dest=/tmp/results/repeated_utest/logs/${status}/${i}
+                 mkdir -p $dest
+                 if [[ -d $source && -n "$(ls $source)" ]]; then
+                   mv $source/* $dest/
+                 fi
+ 
+                 # maybe stop iterations on test failure
+                 if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then
+                   break
+                 fi
+               done
+ 
+               (exit ${exit_code})
+             fi
+           fi
+     - store_test_results:
+         path: /tmp/results/repeated_utest/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utest/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utest/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utest/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j11_utests_system_keyspace_directory_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
+     - store_test_results:
+         path: /tmp/results/repeated_utests/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j8_cqlsh_dtests_py3_vnode:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
+         name: Determine Tests to Run (j8_with_vnodes)
+         no_output_timeout: 5m
+         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j8_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip- [...]
+     - run:
+         name: Run dtests (j8_with_vnodes)
+         no_output_timeout: 15m
+         command: |
+           echo "cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt"
+           cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt
+ 
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.6' ]; then
+             export CQLSH_PYTHON=/usr/bin/python3.6
+           fi
+ 
+           java -version
+           cd ~/cassandra-dtest
+           mkdir -p /tmp/dtest
+ 
+           echo "env: $(env)"
+           echo "** done env"
+           mkdir -p /tmp/results/dtests
+           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
+           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt`
+           set -o pipefail && cd ~/cassandra-dtest && pytest --use-vnodes --num-tokens=16 --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j8_with_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+     - store_test_results:
+         path: /tmp/results
+     - store_artifacts:
+         path: /tmp/dtest
+         destination: dtest_j8_with_vnodes
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_j8_with_vnodes_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_cqlsh_dtests_py3:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
+         name: Determine Tests to Run (j11_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 (j11_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --skip-resource- [...]
+     - run:
+         name: Run dtests (j11_without_vnodes)
+         no_output_timeout: 15m
+         command: |
+           echo "cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt"
+           cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt
+ 
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.6' ]; then
+             export CQLSH_PYTHON=/usr/bin/python3.6
+           fi
+ 
+           java -version
+           cd ~/cassandra-dtest
+           mkdir -p /tmp/dtest
+ 
+           echo "env: $(env)"
+           echo "** done env"
+           mkdir -p /tmp/results/dtests
+           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
+           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt`
+           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_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_j11_without_vnodes
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_j11_without_vnodes_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j11_utests_cdc:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Determine 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-cdc)
+         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-cdc   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
+         no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j11_utests_fqltool:
+     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 (fqltool-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 fqltool-test
+         no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_utests_system_keyspace_directory:
+     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-system-keyspace-directory)
+         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-system-keyspace-directory   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
+         no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_jvm_dtests_vnode:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 1
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Determine distributed Tests to Run
+         command: |
+           # reminder: this code (along with all the steps) is independently executed on every circle container
+           # so the goal here is to get the circleci script to return the tests *this* container will run
+           # which we do via the `circleci` cli tool.
+ 
+           rm -fr ~/cassandra-dtest/upgrade_tests
+           echo "***java tests***"
+ 
+           # get all of our unit test filenames
+           set -eo pipefail && circleci tests glob "$HOME/cassandra/test/distributed/**/*.java" > /tmp/all_java_unit_tests.txt
+ 
+           # split up the unit tests into groups based on the number of containers we have
+           set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt
+           set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/distributed/;;g" | grep "Test\.java$" | grep -v upgrade > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
+           echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt"
+           cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
+         no_output_timeout: 15m
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Run Unit Tests (testclasslist)
+         command: |
+           set -x
+           export PATH=$JAVA_HOME/bin:$PATH
+           time mv ~/cassandra /tmp
+           cd /tmp/cassandra
+           if [ -d ~/dtest_jars ]; then
+             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
+           fi
+           test_timeout=$(grep 'name="test.distributed.timeout"' build.xml | awk -F'"' '{print $4}' || true)
+           if [ -z "$test_timeout" ]; then
+             test_timeout=$(grep 'name="test.timeout"' build.xml | awk -F'"' '{print $4}')
+           fi
+           ant testclasslist -Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16' -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=distributed
+         no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j8_simulator_dtests:
+     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: 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 Simulator Tests
+         command: |
+           set -x
+           export PATH=$JAVA_HOME/bin:$PATH
+           time mv ~/cassandra /tmp
+           cd /tmp/cassandra
+           if [ -d ~/dtest_jars ]; then
+             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
+           fi
+           ant test-simulator-dtest
+         no_output_timeout: 30m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_utests_compression:
+     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: Run dtests (j8_without_vnodes)
-         no_output_timeout: 15m
+         name: Determine unit Tests to Run
          command: |
-           echo "cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt"
-           cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt
+           # reminder: this code (along with all the steps) is independently executed on every circle container
+           # so the goal here is to get the circleci script to return the tests *this* container will run
+           # which we do via the `circleci` cli tool.
  
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.6' ]; then
-             export CQLSH_PYTHON=/usr/bin/python3.6
-           fi
+           rm -fr ~/cassandra-dtest/upgrade_tests
+           echo "***java tests***"
  
-           java -version
-           cd ~/cassandra-dtest
-           mkdir -p /tmp/dtest
+           # get all of our unit test filenames
+           set -eo pipefail && circleci tests glob "$HOME/cassandra/test/unit/**/*.java" > /tmp/all_java_unit_tests.txt
  
-           echo "env: $(env)"
-           echo "** done env"
-           mkdir -p /tmp/results/dtests
-           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt`
-           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j8_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+           # 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-compression)
+         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-compression   -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/results
+         path: /tmp/cassandra/build/test/output/
      - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest_j8_without_vnodes
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
      - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_j8_without_vnodes_logs
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
      - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
@@@ -906,56 -2436,114 +2526,114 @@@
      - 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 (long-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.8/bin/activate
            export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
-         name: Determine Tests to Run (j11_without_vnodes)
-         no_output_timeout: 5m
-         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.8/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j11_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --skip-resource- [...]
-     - run:
-         name: Run dtests (j11_without_vnodes)
+           time mv ~/cassandra /tmp
+           cd /tmp/cassandra
+           if [ -d ~/dtest_jars ]; then
+             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
+           fi
+           ant long-test
          no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   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 "cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt"
-           cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt
- 
-           source ~/env3.8/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.8' ]; then
-             export CQLSH_PYTHON=/usr/bin/python3.8
-           fi
- 
+           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
-           cd ~/cassandra-dtest
-           mkdir -p /tmp/dtest
- 
-           echo "env: $(env)"
-           echo "** done env"
-           mkdir -p /tmp/results/dtests
-           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt`
-           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
      - store_test_results:
-         path: /tmp/results
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest_j11_without_vnodes
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
      - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_j11_without_vnodes_logs
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
      - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
@@@ -1308,56 -2801,42 +2891,42 @@@
      - attach_workspace:
          at: /home/cassandra
      - run:
-         name: Clone Cassandra dtest Repository (via git)
-         command: |
-           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
-     - run:
-         name: Configure virtualenv and python Dependencies
+         name: Log Environment Information
          command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
-         name: Determine Tests to Run (j11_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 (j11_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --skip-resource- [...]
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
      - run:
-         name: Run dtests (j11_without_vnodes)
+         name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: |
-           echo "cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt"
-           cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt
- 
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.6' ]; then
-             export CQLSH_PYTHON=/usr/bin/python3.6
-           fi
- 
-           java -version
-           cd ~/cassandra-dtest
-           mkdir -p /tmp/dtest
- 
-           echo "env: $(env)"
-           echo "** done env"
-           mkdir -p /tmp/results/dtests
-           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt`
-           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
      - store_test_results:
-         path: /tmp/results
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest_j11_without_vnodes
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
      - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_j11_without_vnodes_logs
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
      - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
@@@ -1571,24 -3068,19 +3158,19 @@@
            which java
            java -version
      - run:
-         name: Run Simulator Tests
-         command: |
-           set -x
-           export PATH=$JAVA_HOME/bin:$PATH
-           time mv ~/cassandra /tmp
-           cd /tmp/cassandra
-           if [ -d ~/dtest_jars ]; then
-             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
-           fi
-           ant test-simulator-dtest
-         no_output_timeout: 30m
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and [...]
      - store_test_results:
-         path: /tmp/cassandra/build/test/output/
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/cassandra/build/test/output
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
          destination: junitxml
      - store_artifacts:
-         path: /tmp/cassandra/build/test/logs
+         path: /tmp/results/repeated_utests/logs
          destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
@@@ -1667,7 -3159,7 +3249,7 @@@
      - run:
          name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and autom [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
      - store_test_results:
          path: /tmp/results/repeated_utests/output
      - store_artifacts:
@@@ -1977,7 -3469,7 +3559,7 @@@
      - run:
          name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests [...]
      - store_test_results:
          path: /tmp/results/repeated_utests/output
      - store_artifacts:
@@@ -2064,85 -3556,20 +3646,20 @@@
            which java
            java -version
      - run:
-         name: Clone Cassandra dtest Repository (via git)
-         command: |
-           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
-     - run:
-         name: Configure virtualenv and python Dependencies
-         command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
-         name: Run repeated Python dtest
+         name: Repeatedly run new or modifed JUnit tests
          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 false; then
-                 vnodes_args="--use-vnodes --num-tokens=16"
-               fi
- 
-               upgrade_arg=""
-               if false; then
-                 upgrade_arg="--execute-upgrade-tests --upgrade-target-version-only --upgrade-version-selection all"
-               fi
- 
-               # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-               set -o pipefail && cd ~/cassandra-dtest && pytest $vnodes_args --count=$count $stop_on_failure_arg $upgrade_arg --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $tests_arg | tee /tmp/dtest/stdout.txt
-             fi
-           fi
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
      - store_test_results:
-         path: /tmp/results
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
      - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_logs
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
      - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
@@@ -2183,202 -3610,9 +3700,244 @@@
      - REPEATED_ANT_TEST_METHODS: null
      - REPEATED_ANT_TEST_VNODES: false
      - REPEATED_ANT_TEST_COUNT: 500
-     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - CASSANDRA_USE_JDK11: true
-   j8_jvm_dtests_vnode_repeat:
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
++  j11_utests_trie:
 +    docker:
-     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
++    - image: apache/cassandra-testing-ubuntu2004-java11:latest
 +    resource_class: medium
 +    working_directory: ~/
 +    shell: /bin/bash -eo pipefail -l
 +    parallelism: 4
 +    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: Repeatedly run new or modifed JUnit tests
++        name: Run Unit Tests (testclasslist-trie)
++        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-trie   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
 +        no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
 +    - store_test_results:
-         path: /tmp/results/repeated_utests/output
-     - store_artifacts:
-         path: /tmp/results/repeated_utests/stdout
-         destination: stdout
++        path: /tmp/cassandra/build/test/output/
 +    - store_artifacts:
-         path: /tmp/results/repeated_utests/output
++        path: /tmp/cassandra/build/test/output
 +        destination: junitxml
 +    - store_artifacts:
-         path: /tmp/results/repeated_utests/logs
++        path: /tmp/cassandra/build/test/logs
 +        destination: logs
 +    environment:
 +    - ANT_HOME: /usr/share/ant
 +    - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - LANG: en_US.UTF-8
 +    - KEEP_TEST_DIR: true
 +    - DEFAULT_DIR: /home/cassandra/cassandra-dtest
 +    - PYTHONIOENCODING: utf-8
 +    - PYTHONUNBUFFERED: true
 +    - CASS_DRIVER_NO_EXTENSIONS: true
 +    - CASS_DRIVER_NO_CYTHON: true
 +    - CASSANDRA_SKIP_SYNC: true
 +    - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
 +    - DTEST_BRANCH: trunk
 +    - CCM_MAX_HEAP_SIZE: 1024M
 +    - CCM_HEAP_NEWSIZE: 256M
 +    - REPEATED_TESTS_STOP_ON_FAILURE: false
 +    - REPEATED_UTESTS: null
 +    - REPEATED_UTESTS_COUNT: 500
 +    - REPEATED_UTESTS_FQLTOOL: null
 +    - REPEATED_UTESTS_FQLTOOL_COUNT: 500
 +    - REPEATED_UTESTS_LONG: null
 +    - REPEATED_UTESTS_LONG_COUNT: 100
 +    - REPEATED_UTESTS_STRESS: null
 +    - REPEATED_UTESTS_STRESS_COUNT: 500
 +    - REPEATED_SIMULATOR_DTESTS: null
 +    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
 +    - REPEATED_JVM_DTESTS: null
 +    - REPEATED_JVM_DTESTS_COUNT: 500
 +    - REPEATED_JVM_UPGRADE_DTESTS: null
 +    - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
 +    - REPEATED_DTESTS: null
 +    - REPEATED_DTESTS_COUNT: 500
 +    - REPEATED_UPGRADE_DTESTS: null
 +    - REPEATED_UPGRADE_DTESTS_COUNT: 25
 +    - REPEATED_ANT_TEST_TARGET: testsome
 +    - REPEATED_ANT_TEST_CLASS: null
 +    - REPEATED_ANT_TEST_METHODS: null
 +    - REPEATED_ANT_TEST_VNODES: false
 +    - REPEATED_ANT_TEST_COUNT: 500
-     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_cqlsh_dtests_py38:
++    - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
++    - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
++    - CASSANDRA_USE_JDK11: true
++  j8_utests_trie:
 +    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: Determine unit Tests to Run
 +        command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.8/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
++          # 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: Determine Tests to Run (j8_without_vnodes)
-         no_output_timeout: 5m
-         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.8/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j8_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --skip-resource-i [...]
++        name: Log Environment Information
++        command: |
++          echo '*** id ***'
++          id
++          echo '*** cat /proc/cpuinfo ***'
++          cat /proc/cpuinfo
++          echo '*** free -m ***'
++          free -m
++          echo '*** df -m ***'
++          df -m
++          echo '*** ifconfig -a ***'
++          ifconfig -a
++          echo '*** uname -a ***'
++          uname -a
++          echo '*** mount ***'
++          mount
++          echo '*** env ***'
++          env
++          echo '*** java ***'
++          which java
++          java -version
 +    - run:
-         name: Run dtests (j8_without_vnodes)
-         no_output_timeout: 15m
++        name: Run Unit Tests (testclasslist-trie)
 +        command: |
-           echo "cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt"
-           cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt
- 
-           source ~/env3.8/bin/activate
++          set -x
 +          export PATH=$JAVA_HOME/bin:$PATH
-           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.8' ]; then
-             export CQLSH_PYTHON=/usr/bin/python3.8
++          time mv ~/cassandra /tmp
++          cd /tmp/cassandra
++          if [ -d ~/dtest_jars ]; then
++            cp ~/dtest_jars/dtest* /tmp/cassandra/build/
 +          fi
- 
-           java -version
-           cd ~/cassandra-dtest
-           mkdir -p /tmp/dtest
- 
-           echo "env: $(env)"
-           echo "** done env"
-           mkdir -p /tmp/results/dtests
-           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt`
-           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j8_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
++          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-trie   -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/results
++        path: /tmp/cassandra/build/test/output/
 +    - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest_j8_without_vnodes
++        path: /tmp/cassandra/build/test/output
++        destination: junitxml
 +    - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_j8_without_vnodes_logs
++        path: /tmp/cassandra/build/test/logs
++        destination: logs
 +    environment:
 +    - ANT_HOME: /usr/share/ant
 +    - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - LANG: en_US.UTF-8
 +    - KEEP_TEST_DIR: true
 +    - DEFAULT_DIR: /home/cassandra/cassandra-dtest
 +    - PYTHONIOENCODING: utf-8
 +    - PYTHONUNBUFFERED: true
 +    - CASS_DRIVER_NO_EXTENSIONS: true
 +    - CASS_DRIVER_NO_CYTHON: true
 +    - CASSANDRA_SKIP_SYNC: true
 +    - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
 +    - DTEST_BRANCH: trunk
 +    - CCM_MAX_HEAP_SIZE: 1024M
 +    - CCM_HEAP_NEWSIZE: 256M
 +    - REPEATED_TESTS_STOP_ON_FAILURE: false
 +    - REPEATED_UTESTS: null
 +    - REPEATED_UTESTS_COUNT: 500
 +    - REPEATED_UTESTS_FQLTOOL: null
 +    - REPEATED_UTESTS_FQLTOOL_COUNT: 500
 +    - REPEATED_UTESTS_LONG: null
 +    - REPEATED_UTESTS_LONG_COUNT: 100
 +    - REPEATED_UTESTS_STRESS: null
 +    - REPEATED_UTESTS_STRESS_COUNT: 500
 +    - REPEATED_SIMULATOR_DTESTS: null
 +    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
 +    - REPEATED_JVM_DTESTS: null
 +    - REPEATED_JVM_DTESTS_COUNT: 500
 +    - REPEATED_JVM_UPGRADE_DTESTS: null
 +    - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
 +    - REPEATED_DTESTS: null
 +    - REPEATED_DTESTS_COUNT: 500
 +    - REPEATED_UPGRADE_DTESTS: null
 +    - REPEATED_UPGRADE_DTESTS_COUNT: 25
 +    - REPEATED_ANT_TEST_TARGET: testsome
 +    - REPEATED_ANT_TEST_CLASS: null
 +    - REPEATED_ANT_TEST_METHODS: null
 +    - REPEATED_ANT_TEST_VNODES: false
 +    - REPEATED_ANT_TEST_COUNT: 500
 +    - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_simulator_dtests_repeat:
+   j8_utests_stress_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: medium
@@@ -2413,7 -3647,7 +3972,7 @@@
      - run:
          name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and a [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and a [...]
      - store_test_results:
          path: /tmp/results/repeated_utests/output
      - store_artifacts:
@@@ -2911,7 -4056,7 +4381,7 @@@
      - run:
          name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_UPGRADE_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_UPGRADE_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified t [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_UPGRADE_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_UPGRADE_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified t [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_UPGRADE_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_UPGRADE_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified t [...]
      - store_test_results:
          path: /tmp/results/repeated_utests/output
      - store_artifacts:
@@@ -2976,99 -4121,99 +4446,189 @@@
      - 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: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.8/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
+         name: Determine Tests to Run (j11_with_vnodes)
+         no_output_timeout: 5m
+         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.8/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j11_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip [...]
+     - run:
+         name: Run dtests (j11_with_vnodes)
+         no_output_timeout: 15m
+         command: |
+           echo "cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt"
+           cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt
+ 
+           source ~/env3.8/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.8' ]; then
+             export CQLSH_PYTHON=/usr/bin/python3.8
+           fi
+ 
+           java -version
+           cd ~/cassandra-dtest
+           mkdir -p /tmp/dtest
+ 
+           echo "env: $(env)"
+           echo "** done env"
+           mkdir -p /tmp/results/dtests
+           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
+           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt`
+           set -o pipefail && cd ~/cassandra-dtest && pytest --use-vnodes --num-tokens=16 --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_with_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+     - store_test_results:
+         path: /tmp/results
+     - store_artifacts:
+         path: /tmp/dtest
+         destination: dtest_j11_with_vnodes
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_j11_with_vnodes_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
++  j11_utests_trie_repeat:
++    docker:
++    - image: apache/cassandra-testing-ubuntu2004-java11:latest
++    resource_class: medium
++    working_directory: ~/
++    shell: /bin/bash -eo pipefail -l
++    parallelism: 4
++    steps:
++    - attach_workspace:
++        at: /home/cassandra
++    - run:
++        name: Log Environment Information
 +        command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.8/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
-         name: Determine Tests to Run (j11_with_vnodes)
-         no_output_timeout: 5m
-         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.8/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j11_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip [...]
++          echo '*** id ***'
++          id
++          echo '*** cat /proc/cpuinfo ***'
++          cat /proc/cpuinfo
++          echo '*** free -m ***'
++          free -m
++          echo '*** df -m ***'
++          df -m
++          echo '*** ifconfig -a ***'
++          ifconfig -a
++          echo '*** uname -a ***'
++          uname -a
++          echo '*** mount ***'
++          mount
++          echo '*** env ***'
++          env
++          echo '*** java ***'
++          which java
++          java -version
 +    - run:
-         name: Run dtests (j11_with_vnodes)
++        name: Repeatedly run new or modifed JUnit tests
 +        no_output_timeout: 15m
-         command: |
-           echo "cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt"
-           cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt
- 
-           source ~/env3.8/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.8' ]; then
-             export CQLSH_PYTHON=/usr/bin/python3.8
-           fi
- 
-           java -version
-           cd ~/cassandra-dtest
-           mkdir -p /tmp/dtest
- 
-           echo "env: $(env)"
-           echo "** done env"
-           mkdir -p /tmp/results/dtests
-           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt`
-           set -o pipefail && cd ~/cassandra-dtest && pytest --use-vnodes --num-tokens=16 --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_with_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
 +    - store_test_results:
-         path: /tmp/results
++        path: /tmp/results/repeated_utests/output
 +    - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest_j11_with_vnodes
++        path: /tmp/results/repeated_utests/stdout
++        destination: stdout
 +    - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_j11_with_vnodes_logs
++        path: /tmp/results/repeated_utests/output
++        destination: junitxml
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/logs
++        destination: logs
 +    environment:
 +    - ANT_HOME: /usr/share/ant
 +    - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - LANG: en_US.UTF-8
 +    - KEEP_TEST_DIR: true
 +    - DEFAULT_DIR: /home/cassandra/cassandra-dtest
 +    - PYTHONIOENCODING: utf-8
 +    - PYTHONUNBUFFERED: true
 +    - CASS_DRIVER_NO_EXTENSIONS: true
 +    - CASS_DRIVER_NO_CYTHON: true
 +    - CASSANDRA_SKIP_SYNC: true
 +    - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
 +    - DTEST_BRANCH: trunk
 +    - CCM_MAX_HEAP_SIZE: 1024M
 +    - CCM_HEAP_NEWSIZE: 256M
 +    - REPEATED_TESTS_STOP_ON_FAILURE: false
 +    - REPEATED_UTESTS: null
 +    - REPEATED_UTESTS_COUNT: 500
 +    - REPEATED_UTESTS_FQLTOOL: null
 +    - REPEATED_UTESTS_FQLTOOL_COUNT: 500
 +    - REPEATED_UTESTS_LONG: null
 +    - REPEATED_UTESTS_LONG_COUNT: 100
 +    - REPEATED_UTESTS_STRESS: null
 +    - REPEATED_UTESTS_STRESS_COUNT: 500
 +    - REPEATED_SIMULATOR_DTESTS: null
 +    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
 +    - REPEATED_JVM_DTESTS: null
 +    - REPEATED_JVM_DTESTS_COUNT: 500
 +    - REPEATED_JVM_UPGRADE_DTESTS: null
 +    - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
 +    - REPEATED_DTESTS: null
 +    - REPEATED_DTESTS_COUNT: 500
 +    - REPEATED_UPGRADE_DTESTS: null
 +    - REPEATED_UPGRADE_DTESTS_COUNT: 25
 +    - REPEATED_ANT_TEST_TARGET: testsome
 +    - REPEATED_ANT_TEST_CLASS: null
 +    - REPEATED_ANT_TEST_METHODS: null
 +    - REPEATED_ANT_TEST_VNODES: false
 +    - REPEATED_ANT_TEST_COUNT: 500
 +    - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - CASSANDRA_USE_JDK11: true
    j11_jvm_dtests_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11:latest
@@@ -3104,7 -4249,7 +4664,7 @@@
      - run:
          name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
      - store_test_results:
          path: /tmp/results/repeated_utests/output
      - store_artifacts:
@@@ -3170,23 -4315,41 +4730,41 @@@
      - attach_workspace:
          at: /home/cassandra
      - run:
-         name: Run Unit Tests (stress-test)
+         name: Log Environment Information
          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
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and autom [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and autom [...]
      - store_test_results:
-         path: /tmp/cassandra/build/test/output/
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/cassandra/build/test/output
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
          destination: junitxml
      - store_artifacts:
-         path: /tmp/cassandra/build/test/logs
+         path: /tmp/results/repeated_utests/logs
          destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
@@@ -3500,7 -4663,7 +5078,7 @@@
      - run:
          name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
      - store_test_results:
          path: /tmp/results/repeated_utests/output
      - store_artifacts:
@@@ -3928,7 -5091,7 +5506,7 @@@
      - run:
          name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
      - store_test_results:
          path: /tmp/results/repeated_utests/output
      - store_artifacts:
@@@ -5071,28 -6124,19 +6540,19 @@@
            which java
            java -version
      - run:
-         name: Run Unit Tests (testclasslist-system-keyspace-directory)
-         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-system-keyspace-directory   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
+         name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
      - store_test_results:
-         path: /tmp/cassandra/build/test/output/
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/cassandra/build/test/output
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
          destination: junitxml
      - store_artifacts:
-         path: /tmp/cassandra/build/test/logs
+         path: /tmp/results/repeated_utests/logs
          destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
@@@ -5387,24 -6432,94 +6848,94 @@@
      - attach_workspace:
          at: /home/cassandra
      - run:
-         name: Determine unit Tests to Run
+         name: Log Environment Information
          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
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
+     - store_test_results:
+         path: /tmp/results/repeated_utests/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_utests_long_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
      - run:
          name: Log Environment Information
          command: |
@@@ -5428,28 -6543,19 +6959,19 @@@
            which java
            java -version
      - run:
-         name: Run Unit Tests (testclasslist-compression)
-         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-compression   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
+         name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and autom [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and autom [...]
      - store_test_results:
-         path: /tmp/cassandra/build/test/output/
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/cassandra/build/test/output
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
          destination: junitxml
      - store_artifacts:
-         path: /tmp/cassandra/build/test/logs
+         path: /tmp/results/repeated_utests/logs
          destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
@@@ -5641,41 -6748,77 +7164,89 @@@ workflows
          requires:
          - start_j11_unit_tests
          - j8_build
-     - start_utests_long:
+     - start_j8_utests_long:
          type: approval
-     - utests_long:
+     - j8_utests_long:
          requires:
-         - start_utests_long
+         - start_j8_utests_long
          - j8_build
-     - start_utests_compression:
+     - start_j11_utests_long:
          type: approval
-     - utests_compression:
+     - j11_utests_long:
          requires:
-         - start_utests_compression
+         - start_j11_utests_long
          - j8_build
-     - start_utests_trie:
+     - start_j8_utests_cdc:
          type: approval
-     - utests_trie:
+     - j8_utests_cdc:
          requires:
-         - start_utests_trie
+         - start_j8_utests_cdc
          - j8_build
-     - start_utests_stress:
+     - start_j11_utests_cdc:
          type: approval
-     - utests_stress:
+     - j11_utests_cdc:
          requires:
-         - start_utests_stress
+         - start_j11_utests_cdc
          - j8_build
-     - start_utests_fqltool:
+     - start_j8_utests_compression:
          type: approval
-     - utests_fqltool:
+     - j8_utests_compression:
          requires:
-         - start_utests_fqltool
+         - start_j8_utests_compression
          - j8_build
-     - start_utests_system_keyspace_directory:
+     - start_j11_utests_compression:
          type: approval
-     - utests_system_keyspace_directory:
+     - j11_utests_compression:
          requires:
-         - start_utests_system_keyspace_directory
+         - start_j11_utests_compression
+         - j8_build
++    - start_j8_utests_trie:
++        type: approval
++    - j8_utests_trie:
++        requires:
++        - start_j8_utests_trie
++        - j8_build
++    - start_j11_utests_trie:
++        type: approval
++    - j11_utests_trie:
++        requires:
++        - start_j11_utests_trie
++        - j8_build
+     - start_j8_utests_stress:
+         type: approval
+     - j8_utests_stress:
+         requires:
+         - start_j8_utests_stress
+         - j8_build
+     - start_j11_utests_stress:
+         type: approval
+     - j11_utests_stress:
+         requires:
+         - start_j11_utests_stress
+         - j8_build
+     - start_j8_utests_fqltool:
+         type: approval
+     - j8_utests_fqltool:
+         requires:
+         - start_j8_utests_fqltool
+         - j8_build
+     - start_j11_utests_fqltool:
+         type: approval
+     - j11_utests_fqltool:
+         requires:
+         - start_j11_utests_fqltool
+         - j8_build
+     - start_j8_utests_system_keyspace_directory:
+         type: approval
+     - j8_utests_system_keyspace_directory:
+         requires:
+         - start_j8_utests_system_keyspace_directory
+         - j8_build
+     - start_j11_utests_system_keyspace_directory:
+         type: approval
+     - j11_utests_system_keyspace_directory:
+         requires:
+         - start_j11_utests_system_keyspace_directory
          - j8_build
      - start_j8_dtest_jars_build:
          type: approval
@@@ -5792,15 -6953,13 +7381,23 @@@
          requires:
          - start_utests_compression
          - j8_build
 +    - start_utests_trie:
 +        type: approval
-     - utests_trie:
++    - j8_utests_trie:
++        requires:
++        - start_utests_trie
++        - j8_build
++    - j11_utests_trie:
 +        requires:
 +        - start_utests_trie
 +        - j8_build
      - start_utests_stress:
          type: approval
-     - utests_stress:
+     - j8_utests_stress:
+         requires:
+         - start_utests_stress
+         - j8_build
+     - j11_utests_stress:
          requires:
          - start_utests_stress
          - j8_build
@@@ -5925,6 -7094,42 +7532,48 @@@
          requires:
          - start_j11_cqlsh_tests
          - j11_build
+     - start_j11_utests_long:
+         type: approval
+     - j11_utests_long:
+         requires:
+         - start_j11_utests_long
+         - j11_build
+     - start_j11_utests_cdc:
+         type: approval
+     - j11_utests_cdc:
+         requires:
+         - start_j11_utests_cdc
+         - j11_build
+     - start_j11_utests_compression:
+         type: approval
+     - j11_utests_compression:
+         requires:
+         - start_j11_utests_compression
+         - j11_build
++    - start_j11_utests_trie:
++        type: approval
++    - j11_utests_trie:
++        requires:
++        - start_j11_utests_trie
++        - j11_build
+     - start_j11_utests_stress:
+         type: approval
+     - j11_utests_stress:
+         requires:
+         - start_j11_utests_stress
+         - j11_build
+     - start_j11_utests_fqltool:
+         type: approval
+     - j11_utests_fqltool:
+         requires:
+         - start_j11_utests_fqltool
+         - j11_build
+     - start_j11_utests_system_keyspace_directory:
+         type: approval
+     - j11_utests_system_keyspace_directory:
+         requires:
+         - start_j11_utests_system_keyspace_directory
+         - j11_build
    java11_pre-commit_tests:
      jobs:
      - start_pre-commit_tests:
@@@ -5965,3 -7170,39 +7614,45 @@@
      - j11_cqlsh_dtests_py38_vnode:
          requires:
          - j11_build
+     - start_utests_long:
+         type: approval
+     - j11_utests_long:
+         requires:
+         - start_utests_long
+         - j11_build
+     - start_utests_cdc:
+         type: approval
+     - j11_utests_cdc:
+         requires:
+         - start_utests_cdc
+         - j11_build
+     - start_utests_compression:
+         type: approval
+     - j11_utests_compression:
+         requires:
+         - start_utests_compression
+         - j11_build
++    - start_utests_trie:
++        type: approval
++    - j11_utests_trie:
++        requires:
++        - start_utests_trie
++        - j11_build
+     - start_utests_stress:
+         type: approval
+     - j11_utests_stress:
+         requires:
+         - start_utests_stress
+         - j11_build
+     - start_utests_fqltool:
+         type: approval
+     - j11_utests_fqltool:
+         requires:
+         - start_utests_fqltool
+         - j11_build
+     - start_utests_system_keyspace_directory:
+         type: approval
+     - j11_utests_system_keyspace_directory:
+         requires:
+         - start_utests_system_keyspace_directory
+         - j11_build
diff --cc .circleci/config.yml.HIGHRES
index d5f5d1c4a0,7c8c2ddc61..0e118c856d
--- a/.circleci/config.yml.HIGHRES
+++ b/.circleci/config.yml.HIGHRES
@@@ -259,7 -170,7 +170,7 @@@ jobs
      - run:
          name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and [...]
      - store_test_results:
          path: /tmp/results/repeated_utests/output
      - store_artifacts:
@@@ -726,28 -602,19 +602,19 @@@
            which java
            java -version
      - run:
-         name: Run Unit Tests (testclasslist)
-         command: |
-           set -x
-           export PATH=$JAVA_HOME/bin:$PATH
-           time mv ~/cassandra /tmp
-           cd /tmp/cassandra
-           if [ -d ~/dtest_jars ]; then
-             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
-           fi
-           test_timeout=$(grep 'name="test.unit.timeout"' build.xml | awk -F'"' '{print $4}' || true)
-           if [ -z "$test_timeout" ]; then
-             test_timeout=$(grep 'name="test.timeout"' build.xml | awk -F'"' '{print $4}')
-           fi
-           ant testclasslist   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
+         name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and a [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and a [...]
      - store_test_results:
-         path: /tmp/cassandra/build/test/output/
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/cassandra/build/test/output
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
          destination: junitxml
      - store_artifacts:
-         path: /tmp/cassandra/build/test/logs
+         path: /tmp/results/repeated_utests/logs
          destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
@@@ -792,67 -659,1730 +659,1820 @@@
      - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
      - CASSANDRA_USE_JDK11: true
-   j8_cqlsh_dtests_py3:
++  j8_utests_trie_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 --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
++          echo '*** id ***'
++          id
++          echo '*** cat /proc/cpuinfo ***'
++          cat /proc/cpuinfo
++          echo '*** free -m ***'
++          free -m
++          echo '*** df -m ***'
++          df -m
++          echo '*** ifconfig -a ***'
++          ifconfig -a
++          echo '*** uname -a ***'
++          uname -a
++          echo '*** mount ***'
++          mount
++          echo '*** env ***'
++          env
++          echo '*** java ***'
++          which java
++          java -version
++    - run:
++        name: Repeatedly run new or modifed JUnit tests
++        no_output_timeout: 15m
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++    - store_test_results:
++        path: /tmp/results/repeated_utests/output
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/stdout
++        destination: stdout
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/output
++        destination: junitxml
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/logs
++        destination: logs
++    environment:
++    - ANT_HOME: /usr/share/ant
++    - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
++    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
++    - LANG: en_US.UTF-8
++    - KEEP_TEST_DIR: true
++    - DEFAULT_DIR: /home/cassandra/cassandra-dtest
++    - PYTHONIOENCODING: utf-8
++    - PYTHONUNBUFFERED: true
++    - CASS_DRIVER_NO_EXTENSIONS: true
++    - CASS_DRIVER_NO_CYTHON: true
++    - CASSANDRA_SKIP_SYNC: true
++    - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
++    - DTEST_BRANCH: trunk
++    - CCM_MAX_HEAP_SIZE: 1024M
++    - CCM_HEAP_NEWSIZE: 256M
++    - REPEATED_TESTS_STOP_ON_FAILURE: false
++    - REPEATED_UTESTS: null
++    - REPEATED_UTESTS_COUNT: 500
++    - REPEATED_UTESTS_FQLTOOL: null
++    - REPEATED_UTESTS_FQLTOOL_COUNT: 500
++    - REPEATED_UTESTS_LONG: null
++    - REPEATED_UTESTS_LONG_COUNT: 100
++    - REPEATED_UTESTS_STRESS: null
++    - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
++    - REPEATED_JVM_DTESTS: null
++    - REPEATED_JVM_DTESTS_COUNT: 500
++    - REPEATED_JVM_UPGRADE_DTESTS: null
++    - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
++    - REPEATED_DTESTS: null
++    - REPEATED_DTESTS_COUNT: 500
++    - REPEATED_UPGRADE_DTESTS: null
++    - REPEATED_UPGRADE_DTESTS_COUNT: 25
++    - REPEATED_ANT_TEST_TARGET: testsome
++    - REPEATED_ANT_TEST_CLASS: null
++    - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
++    - REPEATED_ANT_TEST_COUNT: 500
++    - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
++    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_jvm_dtests_vnode:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: xlarge
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 5
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Determine distributed Tests to Run
+         command: |
+           # reminder: this code (along with all the steps) is independently executed on every circle container
+           # so the goal here is to get the circleci script to return the tests *this* container will run
+           # which we do via the `circleci` cli tool.
+ 
+           rm -fr ~/cassandra-dtest/upgrade_tests
+           echo "***java tests***"
+ 
+           # get all of our unit test filenames
+           set -eo pipefail && circleci tests glob "$HOME/cassandra/test/distributed/**/*.java" > /tmp/all_java_unit_tests.txt
+ 
+           # split up the unit tests into groups based on the number of containers we have
+           set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt
+           set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/distributed/;;g" | grep "Test\.java$" | grep -v upgrade > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
+           echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt"
+           cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
+         no_output_timeout: 15m
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Run Unit Tests (testclasslist)
+         command: |
+           set -x
+           export PATH=$JAVA_HOME/bin:$PATH
+           time mv ~/cassandra /tmp
+           cd /tmp/cassandra
+           if [ -d ~/dtest_jars ]; then
+             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
+           fi
+           test_timeout=$(grep 'name="test.distributed.timeout"' build.xml | awk -F'"' '{print $4}' || true)
+           if [ -z "$test_timeout" ]; then
+             test_timeout=$(grep 'name="test.timeout"' build.xml | awk -F'"' '{print $4}')
+           fi
+           ant testclasslist -Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16' -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=distributed
+         no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_utests_compression_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\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
+     - store_test_results:
+         path: /tmp/results/repeated_utests/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_unit_tests:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: xlarge
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 100
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: 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:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j8_cqlsh_dtests_py3:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: xlarge
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 100
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
+         name: Determine Tests to Run (j8_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"
+           cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt
+ 
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.6' ]; then
+             export CQLSH_PYTHON=/usr/bin/python3.6
+           fi
+ 
+           java -version
+           cd ~/cassandra-dtest
+           mkdir -p /tmp/dtest
+ 
+           echo "env: $(env)"
+           echo "** done env"
+           mkdir -p /tmp/results/dtests
+           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
+           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt`
+           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j8_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+     - store_test_results:
+         path: /tmp/results
+     - store_artifacts:
+         path: /tmp/dtest
+         destination: dtest_j8_without_vnodes
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_j8_without_vnodes_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_cqlsh_dtests_py38:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: xlarge
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 100
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.8/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
+         name: Determine Tests to Run (j11_without_vnodes)
+         no_output_timeout: 5m
+         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.8/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j11_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --skip-resource- [...]
+     - run:
+         name: Run dtests (j11_without_vnodes)
+         no_output_timeout: 15m
+         command: |
+           echo "cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt"
+           cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt
+ 
+           source ~/env3.8/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.8' ]; then
+             export CQLSH_PYTHON=/usr/bin/python3.8
+           fi
+ 
+           java -version
+           cd ~/cassandra-dtest
+           mkdir -p /tmp/dtest
+ 
+           echo "env: $(env)"
+           echo "** done env"
+           mkdir -p /tmp/results/dtests
+           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
+           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt`
+           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_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_j11_without_vnodes
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_j11_without_vnodes_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j11_utests_compression_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: xlarge
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 100
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
+     - store_test_results:
+         path: /tmp/results/repeated_utests/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j11_repeated_ant_test:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: xlarge
+     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-trie" || \
+                     $target == "test-system-keyspace-directory" || \
+                     $target == "fqltool-test" || \
+                     $target == "long-test" || \
+                     $target == "stress-test" || \
+                     $target == "test-simulator-dtest" ]]; then
+                 name="-Dtest.name=$class_name"
+               else
+                 name="-Dtest.name=$class_path"
+               fi
+ 
+               # Prepare the -Dtest.methods argument, which is optional
+               if [ "${REPEATED_ANT_TEST_METHODS}" == "<nil>" ]; then
+                 methods=""
+               else
+                 methods="-Dtest.methods=${REPEATED_ANT_TEST_METHODS}"
+               fi
+ 
+               # Prepare the JVM dtests vnodes argument, which is optional
+               vnodes_args=""
+               if ${REPEATED_ANT_TEST_VNODES}; then
+                 vnodes_args="-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'"
+               fi
+ 
+               # Run the test target as many times as requested collecting the exit code,
+               # stopping the iteration only if stop_on_failure is set.
+               exit_code="$?"
+               for i in $(seq -w 1 $count); do
+ 
+                 echo "Running test iteration $i of $count"
+ 
+                 # run the test
+                 status="passes"
+                 if !( set -o pipefail && ant $target $name $methods $vnodes_args -Dno-build-test=true | tee stdout.txt ); then
+                   status="fails"
+                   exit_code=1
+                 fi
+ 
+                 # move the stdout output file
+                 dest=/tmp/results/repeated_utest/stdout/${status}/${i}
+                 mkdir -p $dest
+                 mv stdout.txt $dest/${REPEATED_ANT_TEST_TARGET}-${REPEATED_ANT_TEST_CLASS}.txt
+ 
+                 # move the XML output files
+                 source=build/test/output
+                 dest=/tmp/results/repeated_utest/output/${status}/${i}
+                 mkdir -p $dest
+                 if [[ -d $source && -n "$(ls $source)" ]]; then
+                   mv $source/* $dest/
+                 fi
+ 
+                 # move the log files
+                 source=build/test/logs
+                 dest=/tmp/results/repeated_utest/logs/${status}/${i}
+                 mkdir -p $dest
+                 if [[ -d $source && -n "$(ls $source)" ]]; then
+                   mv $source/* $dest/
+                 fi
+ 
+                 # maybe stop iterations on test failure
+                 if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then
+                   break
+                 fi
+               done
+ 
+               (exit ${exit_code})
+             fi
+           fi
+     - store_test_results:
+         path: /tmp/results/repeated_utest/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utest/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utest/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utest/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j11_utests_system_keyspace_directory_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: xlarge
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 100
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
+     - store_test_results:
+         path: /tmp/results/repeated_utests/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j8_cqlsh_dtests_py3_vnode:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: xlarge
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 100
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
+         name: Determine Tests to Run (j8_with_vnodes)
+         no_output_timeout: 5m
+         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j8_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip- [...]
+     - run:
+         name: Run dtests (j8_with_vnodes)
+         no_output_timeout: 15m
+         command: |
+           echo "cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt"
+           cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt
+ 
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.6' ]; then
+             export CQLSH_PYTHON=/usr/bin/python3.6
+           fi
+ 
+           java -version
+           cd ~/cassandra-dtest
+           mkdir -p /tmp/dtest
+ 
+           echo "env: $(env)"
+           echo "** done env"
+           mkdir -p /tmp/results/dtests
+           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
+           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt`
+           set -o pipefail && cd ~/cassandra-dtest && pytest --use-vnodes --num-tokens=16 --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j8_with_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+     - store_test_results:
+         path: /tmp/results
+     - store_artifacts:
+         path: /tmp/dtest
+         destination: dtest_j8_with_vnodes
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_j8_with_vnodes_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_cqlsh_dtests_py3:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: xlarge
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 100
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
            pip3 freeze
      - run:
-         name: Determine Tests to Run (j8_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 [...]
+         name: Determine Tests to Run (j11_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 (j11_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --skip-resource- [...]
+     - run:
+         name: Run dtests (j11_without_vnodes)
+         no_output_timeout: 15m
+         command: |
+           echo "cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt"
+           cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt
+ 
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.6' ]; then
+             export CQLSH_PYTHON=/usr/bin/python3.6
+           fi
+ 
+           java -version
+           cd ~/cassandra-dtest
+           mkdir -p /tmp/dtest
+ 
+           echo "env: $(env)"
+           echo "** done env"
+           mkdir -p /tmp/results/dtests
+           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
+           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt`
+           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_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_j11_without_vnodes
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_j11_without_vnodes_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j11_utests_cdc:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: xlarge
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 100
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: 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-cdc)
+         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-cdc   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
+         no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j11_utests_fqltool:
+     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 (fqltool-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 fqltool-test
+         no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_utests_system_keyspace_directory:
+     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: 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-system-keyspace-directory)
+         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-system-keyspace-directory   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
+         no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_jvm_dtests_vnode:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: xlarge
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 5
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Determine distributed Tests to Run
+         command: |
+           # reminder: this code (along with all the steps) is independently executed on every circle container
+           # so the goal here is to get the circleci script to return the tests *this* container will run
+           # which we do via the `circleci` cli tool.
+ 
+           rm -fr ~/cassandra-dtest/upgrade_tests
+           echo "***java tests***"
+ 
+           # get all of our unit test filenames
+           set -eo pipefail && circleci tests glob "$HOME/cassandra/test/distributed/**/*.java" > /tmp/all_java_unit_tests.txt
+ 
+           # split up the unit tests into groups based on the number of containers we have
+           set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt
+           set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/distributed/;;g" | grep "Test\.java$" | grep -v upgrade > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
+           echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt"
+           cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
+         no_output_timeout: 15m
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Run Unit Tests (testclasslist)
+         command: |
+           set -x
+           export PATH=$JAVA_HOME/bin:$PATH
+           time mv ~/cassandra /tmp
+           cd /tmp/cassandra
+           if [ -d ~/dtest_jars ]; then
+             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
+           fi
+           test_timeout=$(grep 'name="test.distributed.timeout"' build.xml | awk -F'"' '{print $4}' || true)
+           if [ -z "$test_timeout" ]; then
+             test_timeout=$(grep 'name="test.timeout"' build.xml | awk -F'"' '{print $4}')
+           fi
+           ant testclasslist -Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16' -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=distributed
+         no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j8_simulator_dtests:
+     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: 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 Simulator Tests
+         command: |
+           set -x
+           export PATH=$JAVA_HOME/bin:$PATH
+           time mv ~/cassandra /tmp
+           cd /tmp/cassandra
+           if [ -d ~/dtest_jars ]; then
+             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
+           fi
+           ant test-simulator-dtest
+         no_output_timeout: 30m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_utests_compression:
+     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: Run dtests (j8_without_vnodes)
-         no_output_timeout: 15m
+         name: Determine unit Tests to Run
          command: |
-           echo "cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt"
-           cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt
+           # reminder: this code (along with all the steps) is independently executed on every circle container
+           # so the goal here is to get the circleci script to return the tests *this* container will run
+           # which we do via the `circleci` cli tool.
  
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.6' ]; then
-             export CQLSH_PYTHON=/usr/bin/python3.6
-           fi
+           rm -fr ~/cassandra-dtest/upgrade_tests
+           echo "***java tests***"
  
-           java -version
-           cd ~/cassandra-dtest
-           mkdir -p /tmp/dtest
+           # get all of our unit test filenames
+           set -eo pipefail && circleci tests glob "$HOME/cassandra/test/unit/**/*.java" > /tmp/all_java_unit_tests.txt
  
-           echo "env: $(env)"
-           echo "** done env"
-           mkdir -p /tmp/results/dtests
-           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt`
-           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j8_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+           # 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-compression)
+         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-compression   -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/results
+         path: /tmp/cassandra/build/test/output/
      - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest_j8_without_vnodes
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
      - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_j8_without_vnodes_logs
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
      - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
@@@ -906,56 -2436,114 +2526,114 @@@
      - 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 (long-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.8/bin/activate
            export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
-         name: Determine Tests to Run (j11_without_vnodes)
-         no_output_timeout: 5m
-         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.8/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j11_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --skip-resource- [...]
-     - run:
-         name: Run dtests (j11_without_vnodes)
+           time mv ~/cassandra /tmp
+           cd /tmp/cassandra
+           if [ -d ~/dtest_jars ]; then
+             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
+           fi
+           ant long-test
          no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   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 "cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt"
-           cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt
- 
-           source ~/env3.8/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.8' ]; then
-             export CQLSH_PYTHON=/usr/bin/python3.8
-           fi
- 
+           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
-           cd ~/cassandra-dtest
-           mkdir -p /tmp/dtest
- 
-           echo "env: $(env)"
-           echo "** done env"
-           mkdir -p /tmp/results/dtests
-           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt`
-           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
      - store_test_results:
-         path: /tmp/results
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest_j11_without_vnodes
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
      - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_j11_without_vnodes_logs
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
      - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
@@@ -1308,56 -2801,42 +2891,42 @@@
      - attach_workspace:
          at: /home/cassandra
      - run:
-         name: Clone Cassandra dtest Repository (via git)
-         command: |
-           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
-     - run:
-         name: Configure virtualenv and python Dependencies
-         command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
-         name: Determine Tests to Run (j11_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 (j11_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --skip-resource- [...]
-     - run:
-         name: Run dtests (j11_without_vnodes)
-         no_output_timeout: 15m
+         name: Log Environment Information
          command: |
-           echo "cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt"
-           cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt
- 
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.6' ]; then
-             export CQLSH_PYTHON=/usr/bin/python3.6
-           fi
- 
+           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
-           cd ~/cassandra-dtest
-           mkdir -p /tmp/dtest
- 
-           echo "env: $(env)"
-           echo "** done env"
-           mkdir -p /tmp/results/dtests
-           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt`
-           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
      - store_test_results:
-         path: /tmp/results
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest_j11_without_vnodes
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
      - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_j11_without_vnodes_logs
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
      - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
@@@ -1571,24 -3068,19 +3158,19 @@@
            which java
            java -version
      - run:
-         name: Run Simulator Tests
-         command: |
-           set -x
-           export PATH=$JAVA_HOME/bin:$PATH
-           time mv ~/cassandra /tmp
-           cd /tmp/cassandra
-           if [ -d ~/dtest_jars ]; then
-             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
-           fi
-           ant test-simulator-dtest
-         no_output_timeout: 30m
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and [...]
      - store_test_results:
-         path: /tmp/cassandra/build/test/output/
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/cassandra/build/test/output
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
          destination: junitxml
      - store_artifacts:
-         path: /tmp/cassandra/build/test/logs
+         path: /tmp/results/repeated_utests/logs
          destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
@@@ -1667,7 -3159,7 +3249,7 @@@
      - run:
          name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and autom [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
      - store_test_results:
          path: /tmp/results/repeated_utests/output
      - store_artifacts:
@@@ -1977,7 -3469,7 +3559,7 @@@
      - run:
          name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests [...]
      - store_test_results:
          path: /tmp/results/repeated_utests/output
      - store_artifacts:
@@@ -2064,85 -3556,20 +3646,20 @@@
            which java
            java -version
      - run:
-         name: Clone Cassandra dtest Repository (via git)
-         command: |
-           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
-     - run:
-         name: Configure virtualenv and python Dependencies
-         command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
-         name: Run repeated Python dtest
+         name: Repeatedly run new or modifed JUnit tests
          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 false; then
-                 vnodes_args="--use-vnodes --num-tokens=16"
-               fi
- 
-               upgrade_arg=""
-               if false; then
-                 upgrade_arg="--execute-upgrade-tests --upgrade-target-version-only --upgrade-version-selection all"
-               fi
- 
-               # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-               set -o pipefail && cd ~/cassandra-dtest && pytest $vnodes_args --count=$count $stop_on_failure_arg $upgrade_arg --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $tests_arg | tee /tmp/dtest/stdout.txt
-             fi
-           fi
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
      - store_test_results:
-         path: /tmp/results
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
      - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_logs
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
      - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
@@@ -2183,202 -3610,9 +3700,244 @@@
      - REPEATED_ANT_TEST_METHODS: null
      - REPEATED_ANT_TEST_VNODES: false
      - REPEATED_ANT_TEST_COUNT: 500
-     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - CASSANDRA_USE_JDK11: true
-   j8_jvm_dtests_vnode_repeat:
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
++  j11_utests_trie:
 +    docker:
-     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
++    - image: apache/cassandra-testing-ubuntu2004-java11:latest
 +    resource_class: xlarge
 +    working_directory: ~/
 +    shell: /bin/bash -eo pipefail -l
 +    parallelism: 100
 +    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: Repeatedly run new or modifed JUnit tests
++        name: Run Unit Tests (testclasslist-trie)
++        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-trie   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
 +        no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
 +    - store_test_results:
-         path: /tmp/results/repeated_utests/output
-     - store_artifacts:
-         path: /tmp/results/repeated_utests/stdout
-         destination: stdout
++        path: /tmp/cassandra/build/test/output/
 +    - store_artifacts:
-         path: /tmp/results/repeated_utests/output
++        path: /tmp/cassandra/build/test/output
 +        destination: junitxml
 +    - store_artifacts:
-         path: /tmp/results/repeated_utests/logs
++        path: /tmp/cassandra/build/test/logs
 +        destination: logs
 +    environment:
 +    - ANT_HOME: /usr/share/ant
 +    - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - LANG: en_US.UTF-8
 +    - KEEP_TEST_DIR: true
 +    - DEFAULT_DIR: /home/cassandra/cassandra-dtest
 +    - PYTHONIOENCODING: utf-8
 +    - PYTHONUNBUFFERED: true
 +    - CASS_DRIVER_NO_EXTENSIONS: true
 +    - CASS_DRIVER_NO_CYTHON: true
 +    - CASSANDRA_SKIP_SYNC: true
 +    - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
 +    - DTEST_BRANCH: trunk
 +    - CCM_MAX_HEAP_SIZE: 1024M
 +    - CCM_HEAP_NEWSIZE: 256M
 +    - REPEATED_TESTS_STOP_ON_FAILURE: false
 +    - REPEATED_UTESTS: null
 +    - REPEATED_UTESTS_COUNT: 500
 +    - REPEATED_UTESTS_FQLTOOL: null
 +    - REPEATED_UTESTS_FQLTOOL_COUNT: 500
 +    - REPEATED_UTESTS_LONG: null
 +    - REPEATED_UTESTS_LONG_COUNT: 100
 +    - REPEATED_UTESTS_STRESS: null
 +    - REPEATED_UTESTS_STRESS_COUNT: 500
 +    - REPEATED_SIMULATOR_DTESTS: null
 +    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
 +    - REPEATED_JVM_DTESTS: null
 +    - REPEATED_JVM_DTESTS_COUNT: 500
 +    - REPEATED_JVM_UPGRADE_DTESTS: null
 +    - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
 +    - REPEATED_DTESTS: null
 +    - REPEATED_DTESTS_COUNT: 500
 +    - REPEATED_UPGRADE_DTESTS: null
 +    - REPEATED_UPGRADE_DTESTS_COUNT: 25
 +    - REPEATED_ANT_TEST_TARGET: testsome
 +    - REPEATED_ANT_TEST_CLASS: null
 +    - REPEATED_ANT_TEST_METHODS: null
 +    - REPEATED_ANT_TEST_VNODES: false
 +    - REPEATED_ANT_TEST_COUNT: 500
-     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_cqlsh_dtests_py38:
++    - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
++    - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
++    - CASSANDRA_USE_JDK11: true
++  j8_utests_trie:
 +    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: Determine unit Tests to Run
 +        command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.8/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
++          # 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: Determine Tests to Run (j8_without_vnodes)
-         no_output_timeout: 5m
-         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.8/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j8_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --skip-resource-i [...]
++        name: Log Environment Information
++        command: |
++          echo '*** id ***'
++          id
++          echo '*** cat /proc/cpuinfo ***'
++          cat /proc/cpuinfo
++          echo '*** free -m ***'
++          free -m
++          echo '*** df -m ***'
++          df -m
++          echo '*** ifconfig -a ***'
++          ifconfig -a
++          echo '*** uname -a ***'
++          uname -a
++          echo '*** mount ***'
++          mount
++          echo '*** env ***'
++          env
++          echo '*** java ***'
++          which java
++          java -version
 +    - run:
-         name: Run dtests (j8_without_vnodes)
-         no_output_timeout: 15m
++        name: Run Unit Tests (testclasslist-trie)
 +        command: |
-           echo "cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt"
-           cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt
- 
-           source ~/env3.8/bin/activate
++          set -x
 +          export PATH=$JAVA_HOME/bin:$PATH
-           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.8' ]; then
-             export CQLSH_PYTHON=/usr/bin/python3.8
++          time mv ~/cassandra /tmp
++          cd /tmp/cassandra
++          if [ -d ~/dtest_jars ]; then
++            cp ~/dtest_jars/dtest* /tmp/cassandra/build/
 +          fi
- 
-           java -version
-           cd ~/cassandra-dtest
-           mkdir -p /tmp/dtest
- 
-           echo "env: $(env)"
-           echo "** done env"
-           mkdir -p /tmp/results/dtests
-           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt`
-           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j8_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
++          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-trie   -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/results
++        path: /tmp/cassandra/build/test/output/
 +    - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest_j8_without_vnodes
++        path: /tmp/cassandra/build/test/output
++        destination: junitxml
 +    - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_j8_without_vnodes_logs
++        path: /tmp/cassandra/build/test/logs
++        destination: logs
 +    environment:
 +    - ANT_HOME: /usr/share/ant
 +    - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - LANG: en_US.UTF-8
 +    - KEEP_TEST_DIR: true
 +    - DEFAULT_DIR: /home/cassandra/cassandra-dtest
 +    - PYTHONIOENCODING: utf-8
 +    - PYTHONUNBUFFERED: true
 +    - CASS_DRIVER_NO_EXTENSIONS: true
 +    - CASS_DRIVER_NO_CYTHON: true
 +    - CASSANDRA_SKIP_SYNC: true
 +    - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
 +    - DTEST_BRANCH: trunk
 +    - CCM_MAX_HEAP_SIZE: 1024M
 +    - CCM_HEAP_NEWSIZE: 256M
 +    - REPEATED_TESTS_STOP_ON_FAILURE: false
 +    - REPEATED_UTESTS: null
 +    - REPEATED_UTESTS_COUNT: 500
 +    - REPEATED_UTESTS_FQLTOOL: null
 +    - REPEATED_UTESTS_FQLTOOL_COUNT: 500
 +    - REPEATED_UTESTS_LONG: null
 +    - REPEATED_UTESTS_LONG_COUNT: 100
 +    - REPEATED_UTESTS_STRESS: null
 +    - REPEATED_UTESTS_STRESS_COUNT: 500
 +    - REPEATED_SIMULATOR_DTESTS: null
 +    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
 +    - REPEATED_JVM_DTESTS: null
 +    - REPEATED_JVM_DTESTS_COUNT: 500
 +    - REPEATED_JVM_UPGRADE_DTESTS: null
 +    - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
 +    - REPEATED_DTESTS: null
 +    - REPEATED_DTESTS_COUNT: 500
 +    - REPEATED_UPGRADE_DTESTS: null
 +    - REPEATED_UPGRADE_DTESTS_COUNT: 25
 +    - REPEATED_ANT_TEST_TARGET: testsome
 +    - REPEATED_ANT_TEST_CLASS: null
 +    - REPEATED_ANT_TEST_METHODS: null
 +    - REPEATED_ANT_TEST_VNODES: false
 +    - REPEATED_ANT_TEST_COUNT: 500
 +    - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-   j8_simulator_dtests_repeat:
+   j8_utests_stress_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
      resource_class: xlarge
@@@ -2413,7 -3647,7 +3972,7 @@@
      - run:
          name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and a [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and a [...]
      - store_test_results:
          path: /tmp/results/repeated_utests/output
      - store_artifacts:
@@@ -2911,7 -4056,7 +4381,7 @@@
      - run:
          name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_UPGRADE_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_UPGRADE_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified t [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_UPGRADE_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_UPGRADE_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified t [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_UPGRADE_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_UPGRADE_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified t [...]
      - store_test_results:
          path: /tmp/results/repeated_utests/output
      - store_artifacts:
@@@ -2980,95 -4125,95 +4450,185 @@@
          command: |
            git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
      - run:
-         name: Configure virtualenv and python Dependencies
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.8/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
+         name: Determine Tests to Run (j11_with_vnodes)
+         no_output_timeout: 5m
+         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.8/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j11_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip [...]
+     - run:
+         name: Run dtests (j11_with_vnodes)
+         no_output_timeout: 15m
+         command: |
+           echo "cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt"
+           cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt
+ 
+           source ~/env3.8/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.8' ]; then
+             export CQLSH_PYTHON=/usr/bin/python3.8
+           fi
+ 
+           java -version
+           cd ~/cassandra-dtest
+           mkdir -p /tmp/dtest
+ 
+           echo "env: $(env)"
+           echo "** done env"
+           mkdir -p /tmp/results/dtests
+           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
+           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt`
+           set -o pipefail && cd ~/cassandra-dtest && pytest --use-vnodes --num-tokens=16 --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_with_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+     - store_test_results:
+         path: /tmp/results
+     - store_artifacts:
+         path: /tmp/dtest
+         destination: dtest_j11_with_vnodes
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_j11_with_vnodes_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
++  j11_utests_trie_repeat:
++    docker:
++    - image: apache/cassandra-testing-ubuntu2004-java11:latest
++    resource_class: xlarge
++    working_directory: ~/
++    shell: /bin/bash -eo pipefail -l
++    parallelism: 100
++    steps:
++    - attach_workspace:
++        at: /home/cassandra
++    - run:
++        name: Log Environment Information
 +        command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.8/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
-         name: Determine Tests to Run (j11_with_vnodes)
-         no_output_timeout: 5m
-         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.8/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j11_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip [...]
++          echo '*** id ***'
++          id
++          echo '*** cat /proc/cpuinfo ***'
++          cat /proc/cpuinfo
++          echo '*** free -m ***'
++          free -m
++          echo '*** df -m ***'
++          df -m
++          echo '*** ifconfig -a ***'
++          ifconfig -a
++          echo '*** uname -a ***'
++          uname -a
++          echo '*** mount ***'
++          mount
++          echo '*** env ***'
++          env
++          echo '*** java ***'
++          which java
++          java -version
 +    - run:
-         name: Run dtests (j11_with_vnodes)
++        name: Repeatedly run new or modifed JUnit tests
 +        no_output_timeout: 15m
-         command: |
-           echo "cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt"
-           cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt
- 
-           source ~/env3.8/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.8' ]; then
-             export CQLSH_PYTHON=/usr/bin/python3.8
-           fi
- 
-           java -version
-           cd ~/cassandra-dtest
-           mkdir -p /tmp/dtest
- 
-           echo "env: $(env)"
-           echo "** done env"
-           mkdir -p /tmp/results/dtests
-           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt`
-           set -o pipefail && cd ~/cassandra-dtest && pytest --use-vnodes --num-tokens=16 --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_with_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
 +    - store_test_results:
-         path: /tmp/results
++        path: /tmp/results/repeated_utests/output
 +    - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest_j11_with_vnodes
++        path: /tmp/results/repeated_utests/stdout
++        destination: stdout
 +    - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_j11_with_vnodes_logs
++        path: /tmp/results/repeated_utests/output
++        destination: junitxml
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/logs
++        destination: logs
 +    environment:
 +    - ANT_HOME: /usr/share/ant
 +    - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - LANG: en_US.UTF-8
 +    - KEEP_TEST_DIR: true
 +    - DEFAULT_DIR: /home/cassandra/cassandra-dtest
 +    - PYTHONIOENCODING: utf-8
 +    - PYTHONUNBUFFERED: true
 +    - CASS_DRIVER_NO_EXTENSIONS: true
 +    - CASS_DRIVER_NO_CYTHON: true
 +    - CASSANDRA_SKIP_SYNC: true
 +    - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
 +    - DTEST_BRANCH: trunk
 +    - CCM_MAX_HEAP_SIZE: 1024M
 +    - CCM_HEAP_NEWSIZE: 256M
 +    - REPEATED_TESTS_STOP_ON_FAILURE: false
 +    - REPEATED_UTESTS: null
 +    - REPEATED_UTESTS_COUNT: 500
 +    - REPEATED_UTESTS_FQLTOOL: null
 +    - REPEATED_UTESTS_FQLTOOL_COUNT: 500
 +    - REPEATED_UTESTS_LONG: null
 +    - REPEATED_UTESTS_LONG_COUNT: 100
 +    - REPEATED_UTESTS_STRESS: null
 +    - REPEATED_UTESTS_STRESS_COUNT: 500
 +    - REPEATED_SIMULATOR_DTESTS: null
 +    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
 +    - REPEATED_JVM_DTESTS: null
 +    - REPEATED_JVM_DTESTS_COUNT: 500
 +    - REPEATED_JVM_UPGRADE_DTESTS: null
 +    - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
 +    - REPEATED_DTESTS: null
 +    - REPEATED_DTESTS_COUNT: 500
 +    - REPEATED_UPGRADE_DTESTS: null
 +    - REPEATED_UPGRADE_DTESTS_COUNT: 25
 +    - REPEATED_ANT_TEST_TARGET: testsome
 +    - REPEATED_ANT_TEST_CLASS: null
 +    - REPEATED_ANT_TEST_METHODS: null
 +    - REPEATED_ANT_TEST_VNODES: false
 +    - REPEATED_ANT_TEST_COUNT: 500
 +    - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - CASSANDRA_USE_JDK11: true
    j11_jvm_dtests_repeat:
      docker:
      - image: apache/cassandra-testing-ubuntu2004-java11:latest
@@@ -3104,7 -4249,7 +4664,7 @@@
      - run:
          name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
      - store_test_results:
          path: /tmp/results/repeated_utests/output
      - store_artifacts:
@@@ -3170,23 -4315,41 +4730,41 @@@
      - attach_workspace:
          at: /home/cassandra
      - run:
-         name: Run Unit Tests (stress-test)
+         name: Log Environment Information
          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
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and autom [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and autom [...]
      - store_test_results:
-         path: /tmp/cassandra/build/test/output/
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/cassandra/build/test/output
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
          destination: junitxml
      - store_artifacts:
-         path: /tmp/cassandra/build/test/logs
+         path: /tmp/results/repeated_utests/logs
          destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
@@@ -3500,7 -4663,7 +5078,7 @@@
      - run:
          name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
      - store_test_results:
          path: /tmp/results/repeated_utests/output
      - store_artifacts:
@@@ -3928,7 -5091,7 +5506,7 @@@
      - run:
          name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
      - store_test_results:
          path: /tmp/results/repeated_utests/output
      - store_artifacts:
@@@ -4954,28 -6124,19 +6540,19 @@@
            which java
            java -version
      - run:
-         name: Run Unit Tests (testclasslist-trie)
-         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-trie   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
+         name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
      - store_test_results:
-         path: /tmp/cassandra/build/test/output/
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/cassandra/build/test/output
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
          destination: junitxml
      - store_artifacts:
-         path: /tmp/cassandra/build/test/logs
+         path: /tmp/results/repeated_utests/logs
          destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
@@@ -5302,37 -6454,20 +6870,20 @@@
            which java
            java -version
      - run:
-         name: Clone Cassandra dtest Repository (via git)
-         command: |
-           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
-     - run:
-         name: Configure virtualenv and python Dependencies
-         command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
-         name: Determine Tests to Run (j11_with_vnodes)
-         no_output_timeout: 5m
-         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j11_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip [...]
-     - run:
-         name: Run dtests (j11_with_vnodes)
+         name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "echo \"cat /tmp/split_dtest_tests_j11_with_vnodes_final.txt\"\ncat /tmp/split_dtest_tests_j11_with_vnodes_final.txt\n\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\nif [ -n '' ]; then\n  export \nfi\n\njava -version\ncd ~/cassandra-dtest\nmkdir -p /tmp/dtest\n\necho \"env: $(env)\"\necho \"** done env\"\nmkdir -p /tmp/results/dtests\n# we need the \"set -o pipefail\" here so that the exit code that circleci will actually use is from pytest and not the [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
      - store_test_results:
-         path: /tmp/results
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest_j11_with_vnodes
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
      - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_j11_with_vnodes_logs
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
      - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
@@@ -5428,28 -6543,19 +6959,19 @@@
            which java
            java -version
      - run:
-         name: Run Unit Tests (testclasslist-compression)
-         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-compression   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
+         name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and autom [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and autom [...]
      - store_test_results:
-         path: /tmp/cassandra/build/test/output/
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/cassandra/build/test/output
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
          destination: junitxml
      - store_artifacts:
-         path: /tmp/cassandra/build/test/logs
+         path: /tmp/results/repeated_utests/logs
          destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
@@@ -5671,77 -6778,149 +7194,173 @@@ workflows
          requires:
          - start_j11_unit_tests_repeat
          - j8_build
-     - start_utests_long:
+     - start_j8_utests_long:
          type: approval
-     - utests_long:
+     - j8_utests_long:
          requires:
-         - start_utests_long
+         - start_j8_utests_long
          - j8_build
-     - start_utests_long_repeat:
+     - start_j11_utests_long:
          type: approval
-     - utests_long_repeat:
+     - j11_utests_long:
          requires:
-         - start_utests_long_repeat
+         - start_j11_utests_long
          - j8_build
-     - start_utests_compression:
+     - start_j8_utests_long_repeat:
          type: approval
-     - utests_compression:
+     - j8_utests_long_repeat:
          requires:
-         - start_utests_compression
+         - start_j8_utests_long_repeat
          - j8_build
-     - start_utests_compression_repeat:
+     - start_j11_utests_long_repeat:
          type: approval
-     - utests_compression_repeat:
+     - j11_utests_long_repeat:
          requires:
-         - start_utests_compression_repeat
+         - start_j11_utests_long_repeat
          - j8_build
-     - start_utests_trie:
+     - start_j8_utests_cdc:
          type: approval
-     - utests_trie:
+     - j8_utests_cdc:
          requires:
-         - start_utests_trie
+         - start_j8_utests_cdc
          - j8_build
-     - start_utests_trie_repeat:
+     - start_j11_utests_cdc:
          type: approval
-     - utests_trie_repeat:
+     - j11_utests_cdc:
          requires:
-         - start_utests_trie_repeat
+         - start_j11_utests_cdc
          - j8_build
-     - start_utests_stress:
+     - start_j8_utests_cdc_repeat:
          type: approval
-     - utests_stress:
+     - j8_utests_cdc_repeat:
          requires:
-         - start_utests_stress
+         - start_j8_utests_cdc_repeat
          - j8_build
-     - start_utests_stress_repeat:
+     - start_j11_utests_cdc_repeat:
          type: approval
-     - utests_stress_repeat:
+     - j11_utests_cdc_repeat:
          requires:
-         - start_utests_stress_repeat
+         - start_j11_utests_cdc_repeat
          - j8_build
-     - start_utests_fqltool:
+     - start_j8_utests_compression:
          type: approval
-     - utests_fqltool:
+     - j8_utests_compression:
          requires:
-         - start_utests_fqltool
+         - start_j8_utests_compression
          - j8_build
-     - start_utests_fqltool_repeat:
+     - start_j11_utests_compression:
          type: approval
-     - utests_fqltool_repeat:
+     - j11_utests_compression:
          requires:
-         - start_utests_fqltool_repeat
+         - start_j11_utests_compression
          - j8_build
-     - start_utests_system_keyspace_directory:
+     - start_j8_utests_compression_repeat:
          type: approval
-     - utests_system_keyspace_directory:
+     - j8_utests_compression_repeat:
          requires:
-         - start_utests_system_keyspace_directory
+         - start_j8_utests_compression_repeat
+         - j8_build
+     - start_j11_utests_compression_repeat:
+         type: approval
+     - j11_utests_compression_repeat:
+         requires:
+         - start_j11_utests_compression_repeat
+         - j8_build
++    - start_j8_utests_trie:
++        type: approval
++    - j8_utests_trie:
++        requires:
++        - start_j8_utests_trie
++        - j8_build
++    - start_j11_utests_trie:
++        type: approval
++    - j11_utests_trie:
++        requires:
++        - start_j11_utests_trie
++        - j8_build
++    - start_j8_utests_trie_repeat:
++        type: approval
++    - j8_utests_trie_repeat:
++        requires:
++        - start_j8_utests_trie_repeat
++        - j8_build
++    - start_j11_utests_trie_repeat:
++        type: approval
++    - j11_utests_trie_repeat:
++        requires:
++        - start_j11_utests_trie_repeat
++        - j8_build
+     - start_j8_utests_stress:
+         type: approval
+     - j8_utests_stress:
+         requires:
+         - start_j8_utests_stress
+         - j8_build
+     - start_j11_utests_stress:
+         type: approval
+     - j11_utests_stress:
+         requires:
+         - start_j11_utests_stress
+         - j8_build
+     - start_j8_utests_stress_repeat:
+         type: approval
+     - j8_utests_stress_repeat:
+         requires:
+         - start_j8_utests_stress_repeat
+         - j8_build
+     - start_j11_utests_stress_repeat:
+         type: approval
+     - j11_utests_stress_repeat:
+         requires:
+         - start_j11_utests_stress_repeat
+         - j8_build
+     - start_j8_utests_fqltool:
+         type: approval
+     - j8_utests_fqltool:
+         requires:
+         - start_j8_utests_fqltool
          - j8_build
-     - start_utests_system_keyspace_directory_repeat:
+     - start_j11_utests_fqltool:
          type: approval
-     - utests_system_keyspace_directory_repeat:
+     - j11_utests_fqltool:
          requires:
-         - start_utests_system_keyspace_directory_repeat
+         - start_j11_utests_fqltool
+         - j8_build
+     - start_j8_utests_fqltool_repeat:
+         type: approval
+     - j8_utests_fqltool_repeat:
+         requires:
+         - start_j8_utests_fqltool_repeat
+         - j8_build
+     - start_j11_utests_fqltool_repeat:
+         type: approval
+     - j11_utests_fqltool_repeat:
+         requires:
+         - start_j11_utests_fqltool_repeat
+         - j8_build
+     - start_j8_utests_system_keyspace_directory:
+         type: approval
+     - j8_utests_system_keyspace_directory:
+         requires:
+         - start_j8_utests_system_keyspace_directory
+         - j8_build
+     - start_j11_utests_system_keyspace_directory:
+         type: approval
+     - j11_utests_system_keyspace_directory:
+         requires:
+         - start_j11_utests_system_keyspace_directory
+         - j8_build
+     - start_j8_utests_system_keyspace_directory_repeat:
+         type: approval
+     - j8_utests_system_keyspace_directory_repeat:
+         requires:
+         - start_j8_utests_system_keyspace_directory_repeat
+         - j8_build
+     - start_j11_utests_system_keyspace_directory_repeat:
+         type: approval
+     - j11_utests_system_keyspace_directory_repeat:
+         requires:
+         - start_j11_utests_system_keyspace_directory_repeat
          - j8_build
      - start_j8_dtest_jars_build:
          type: approval
@@@ -5929,19 -7142,13 +7582,31 @@@
          requires:
          - start_utests_compression
          - j8_build
 +    - start_utests_trie:
 +        type: approval
-     - utests_trie:
++    - j8_utests_trie:
++        requires:
++        - start_utests_trie
++        - j8_build
++    - j11_utests_trie:
++        requires:
++        - start_utests_trie
++        - j8_build
++    - j8_utests_trie_repeat:
 +        requires:
 +        - start_utests_trie
 +        - j8_build
-     - utests_trie_repeat:
++    - j11_utests_trie_repeat:
 +        requires:
 +        - start_utests_trie
 +        - j8_build
      - start_utests_stress:
          type: approval
-     - utests_stress:
+     - j8_utests_stress:
+         requires:
+         - start_utests_stress
+         - j8_build
+     - j11_utests_stress:
          requires:
          - start_utests_stress
          - j8_build
@@@ -6114,6 -7343,78 +7801,90 @@@
          requires:
          - start_j11_cqlsh_tests
          - j11_build
+     - start_j11_utests_long:
+         type: approval
+     - j11_utests_long:
+         requires:
+         - start_j11_utests_long
+         - j11_build
+     - start_j11_utests_long_repeat:
+         type: approval
+     - j11_utests_long_repeat:
+         requires:
+         - start_j11_utests_long_repeat
+         - j11_build
+     - start_j11_utests_cdc:
+         type: approval
+     - j11_utests_cdc:
+         requires:
+         - start_j11_utests_cdc
+         - j11_build
+     - start_j11_utests_cdc_repeat:
+         type: approval
+     - j11_utests_cdc_repeat:
+         requires:
+         - start_j11_utests_cdc_repeat
+         - j11_build
+     - start_j11_utests_compression:
+         type: approval
+     - j11_utests_compression:
+         requires:
+         - start_j11_utests_compression
+         - j11_build
+     - start_j11_utests_compression_repeat:
+         type: approval
+     - j11_utests_compression_repeat:
+         requires:
+         - start_j11_utests_compression_repeat
+         - j11_build
++    - start_j11_utests_trie:
++        type: approval
++    - j11_utests_trie:
++        requires:
++        - start_j11_utests_trie
++        - j11_build
++    - start_j11_utests_trie_repeat:
++        type: approval
++    - j11_utests_trie_repeat:
++        requires:
++        - start_j11_utests_trie_repeat
++        - j11_build
+     - start_j11_utests_stress:
+         type: approval
+     - j11_utests_stress:
+         requires:
+         - start_j11_utests_stress
+         - j11_build
+     - start_j11_utests_stress_repeat:
+         type: approval
+     - j11_utests_stress_repeat:
+         requires:
+         - start_j11_utests_stress_repeat
+         - j11_build
+     - start_j11_utests_fqltool:
+         type: approval
+     - j11_utests_fqltool:
+         requires:
+         - start_j11_utests_fqltool
+         - j11_build
+     - start_j11_utests_fqltool_repeat:
+         type: approval
+     - j11_utests_fqltool_repeat:
+         requires:
+         - start_j11_utests_fqltool_repeat
+         - j11_build
+     - start_j11_utests_system_keyspace_directory:
+         type: approval
+     - j11_utests_system_keyspace_directory:
+         requires:
+         - start_j11_utests_system_keyspace_directory
+         - j11_build
+     - start_j11_utests_system_keyspace_directory_repeat:
+         type: approval
+     - j11_utests_system_keyspace_directory_repeat:
+         requires:
+         - start_j11_utests_system_keyspace_directory_repeat
+         - j11_build
      - start_j11_repeated_ant_test:
          type: approval
      - j11_repeated_ant_test:
@@@ -6187,3 -7488,63 +7958,73 @@@
      - j11_cqlsh_dtests_py38_vnode:
          requires:
          - j11_build
+     - start_utests_long:
+         type: approval
+     - j11_utests_long:
+         requires:
+         - start_utests_long
+         - j11_build
+     - j11_utests_long_repeat:
+         requires:
+         - start_utests_long
+         - j11_build
+     - start_utests_cdc:
+         type: approval
+     - j11_utests_cdc:
+         requires:
+         - start_utests_cdc
+         - j11_build
+     - j11_utests_cdc_repeat:
+         requires:
+         - start_utests_cdc
+         - j11_build
+     - start_utests_compression:
+         type: approval
+     - j11_utests_compression:
+         requires:
+         - start_utests_compression
+         - j11_build
+     - j11_utests_compression_repeat:
+         requires:
+         - start_utests_compression
+         - j11_build
++    - start_utests_trie:
++        type: approval
++    - j11_utests_trie:
++        requires:
++        - start_utests_trie
++        - j11_build
++    - j11_utests_trie_repeat:
++        requires:
++        - start_utests_trie
++        - j11_build
+     - start_utests_stress:
+         type: approval
+     - j11_utests_stress:
+         requires:
+         - start_utests_stress
+         - j11_build
+     - j11_utests_stress_repeat:
+         requires:
+         - start_utests_stress
+         - j11_build
+     - start_utests_fqltool:
+         type: approval
+     - j11_utests_fqltool:
+         requires:
+         - start_utests_fqltool
+         - j11_build
+     - j11_utests_fqltool_repeat:
+         requires:
+         - start_utests_fqltool
+         - j11_build
+     - start_utests_system_keyspace_directory:
+         type: approval
+     - j11_utests_system_keyspace_directory:
+         requires:
+         - start_utests_system_keyspace_directory
+         - j11_build
+     - j11_utests_system_keyspace_directory_repeat:
+         requires:
+         - start_utests_system_keyspace_directory
+         - j11_build
diff --cc .circleci/config.yml.LOWRES
index 9702bd0881,1455e61615..7cd51991ea
--- a/.circleci/config.yml.LOWRES
+++ b/.circleci/config.yml.LOWRES
@@@ -259,7 -170,7 +170,7 @@@ jobs
      - run:
          name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and [...]
      - store_test_results:
          path: /tmp/results/repeated_utests/output
      - store_artifacts:
@@@ -726,28 -602,19 +602,19 @@@
            which java
            java -version
      - run:
-         name: Run Unit Tests (testclasslist)
-         command: |
-           set -x
-           export PATH=$JAVA_HOME/bin:$PATH
-           time mv ~/cassandra /tmp
-           cd /tmp/cassandra
-           if [ -d ~/dtest_jars ]; then
-             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
-           fi
-           test_timeout=$(grep 'name="test.unit.timeout"' build.xml | awk -F'"' '{print $4}' || true)
-           if [ -z "$test_timeout" ]; then
-             test_timeout=$(grep 'name="test.timeout"' build.xml | awk -F'"' '{print $4}')
-           fi
-           ant testclasslist   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
+         name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and a [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and a [...]
      - store_test_results:
-         path: /tmp/cassandra/build/test/output/
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/cassandra/build/test/output
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
          destination: junitxml
      - store_artifacts:
-         path: /tmp/cassandra/build/test/logs
+         path: /tmp/results/repeated_utests/logs
          destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
@@@ -792,67 -659,1730 +659,1820 @@@
      - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
      - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
      - CASSANDRA_USE_JDK11: true
-   j8_cqlsh_dtests_py3:
++  j8_utests_trie_repeat:
 +    docker:
 +    - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
 +    resource_class: medium
 +    working_directory: ~/
 +    shell: /bin/bash -eo pipefail -l
 +    parallelism: 4
 +    steps:
 +    - attach_workspace:
 +        at: /home/cassandra
 +    - run:
-         name: Clone Cassandra dtest Repository (via git)
-         command: |
-           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
-     - run:
-         name: Configure virtualenv and python Dependencies
++        name: Log Environment Information
 +        command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
++          echo '*** id ***'
++          id
++          echo '*** cat /proc/cpuinfo ***'
++          cat /proc/cpuinfo
++          echo '*** free -m ***'
++          free -m
++          echo '*** df -m ***'
++          df -m
++          echo '*** ifconfig -a ***'
++          ifconfig -a
++          echo '*** uname -a ***'
++          uname -a
++          echo '*** mount ***'
++          mount
++          echo '*** env ***'
++          env
++          echo '*** java ***'
++          which java
++          java -version
++    - run:
++        name: Repeatedly run new or modifed JUnit tests
++        no_output_timeout: 15m
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++    - store_test_results:
++        path: /tmp/results/repeated_utests/output
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/stdout
++        destination: stdout
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/output
++        destination: junitxml
++    - store_artifacts:
++        path: /tmp/results/repeated_utests/logs
++        destination: logs
++    environment:
++    - ANT_HOME: /usr/share/ant
++    - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
++    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
++    - LANG: en_US.UTF-8
++    - KEEP_TEST_DIR: true
++    - DEFAULT_DIR: /home/cassandra/cassandra-dtest
++    - PYTHONIOENCODING: utf-8
++    - PYTHONUNBUFFERED: true
++    - CASS_DRIVER_NO_EXTENSIONS: true
++    - CASS_DRIVER_NO_CYTHON: true
++    - CASSANDRA_SKIP_SYNC: true
++    - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
++    - DTEST_BRANCH: trunk
++    - CCM_MAX_HEAP_SIZE: 1024M
++    - CCM_HEAP_NEWSIZE: 256M
++    - REPEATED_TESTS_STOP_ON_FAILURE: false
++    - REPEATED_UTESTS: null
++    - REPEATED_UTESTS_COUNT: 500
++    - REPEATED_UTESTS_FQLTOOL: null
++    - REPEATED_UTESTS_FQLTOOL_COUNT: 500
++    - REPEATED_UTESTS_LONG: null
++    - REPEATED_UTESTS_LONG_COUNT: 100
++    - REPEATED_UTESTS_STRESS: null
++    - REPEATED_UTESTS_STRESS_COUNT: 500
++    - REPEATED_SIMULATOR_DTESTS: null
++    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
++    - REPEATED_JVM_DTESTS: null
++    - REPEATED_JVM_DTESTS_COUNT: 500
++    - REPEATED_JVM_UPGRADE_DTESTS: null
++    - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
++    - REPEATED_DTESTS: null
++    - REPEATED_DTESTS_COUNT: 500
++    - REPEATED_UPGRADE_DTESTS: null
++    - REPEATED_UPGRADE_DTESTS_COUNT: 25
++    - REPEATED_ANT_TEST_TARGET: testsome
++    - REPEATED_ANT_TEST_CLASS: null
++    - REPEATED_ANT_TEST_METHODS: null
++    - REPEATED_ANT_TEST_VNODES: false
++    - REPEATED_ANT_TEST_COUNT: 500
++    - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
++    - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_jvm_dtests_vnode:
+     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: Determine distributed Tests to Run
+         command: |
+           # reminder: this code (along with all the steps) is independently executed on every circle container
+           # so the goal here is to get the circleci script to return the tests *this* container will run
+           # which we do via the `circleci` cli tool.
+ 
+           rm -fr ~/cassandra-dtest/upgrade_tests
+           echo "***java tests***"
+ 
+           # get all of our unit test filenames
+           set -eo pipefail && circleci tests glob "$HOME/cassandra/test/distributed/**/*.java" > /tmp/all_java_unit_tests.txt
+ 
+           # split up the unit tests into groups based on the number of containers we have
+           set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt
+           set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/distributed/;;g" | grep "Test\.java$" | grep -v upgrade > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
+           echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt"
+           cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
+         no_output_timeout: 15m
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Run Unit Tests (testclasslist)
+         command: |
+           set -x
+           export PATH=$JAVA_HOME/bin:$PATH
+           time mv ~/cassandra /tmp
+           cd /tmp/cassandra
+           if [ -d ~/dtest_jars ]; then
+             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
+           fi
+           test_timeout=$(grep 'name="test.distributed.timeout"' build.xml | awk -F'"' '{print $4}' || true)
+           if [ -z "$test_timeout" ]; then
+             test_timeout=$(grep 'name="test.timeout"' build.xml | awk -F'"' '{print $4}')
+           fi
+           ant testclasslist -Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16' -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=distributed
+         no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_utests_compression_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
+     - store_test_results:
+         path: /tmp/results/repeated_utests/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_unit_tests:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Determine 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:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j8_cqlsh_dtests_py3:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
          name: Determine Tests to Run (j8_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 [...]
+         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"
+           cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt
+ 
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.6' ]; then
+             export CQLSH_PYTHON=/usr/bin/python3.6
+           fi
+ 
+           java -version
+           cd ~/cassandra-dtest
+           mkdir -p /tmp/dtest
+ 
+           echo "env: $(env)"
+           echo "** done env"
+           mkdir -p /tmp/results/dtests
+           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
+           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt`
+           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j8_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+     - store_test_results:
+         path: /tmp/results
+     - store_artifacts:
+         path: /tmp/dtest
+         destination: dtest_j8_without_vnodes
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_j8_without_vnodes_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_cqlsh_dtests_py38:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.8/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
+         name: Determine Tests to Run (j11_without_vnodes)
+         no_output_timeout: 5m
+         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.8/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j11_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --skip-resource- [...]
+     - run:
+         name: Run dtests (j11_without_vnodes)
+         no_output_timeout: 15m
+         command: |
+           echo "cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt"
+           cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt
+ 
+           source ~/env3.8/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.8' ]; then
+             export CQLSH_PYTHON=/usr/bin/python3.8
+           fi
+ 
+           java -version
+           cd ~/cassandra-dtest
+           mkdir -p /tmp/dtest
+ 
+           echo "env: $(env)"
+           echo "** done env"
+           mkdir -p /tmp/results/dtests
+           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
+           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt`
+           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_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_j11_without_vnodes
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_j11_without_vnodes_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j11_utests_compression_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
+     - store_test_results:
+         path: /tmp/results/repeated_utests/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j11_repeated_ant_test:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     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-trie" || \
+                     $target == "test-system-keyspace-directory" || \
+                     $target == "fqltool-test" || \
+                     $target == "long-test" || \
+                     $target == "stress-test" || \
+                     $target == "test-simulator-dtest" ]]; then
+                 name="-Dtest.name=$class_name"
+               else
+                 name="-Dtest.name=$class_path"
+               fi
+ 
+               # Prepare the -Dtest.methods argument, which is optional
+               if [ "${REPEATED_ANT_TEST_METHODS}" == "<nil>" ]; then
+                 methods=""
+               else
+                 methods="-Dtest.methods=${REPEATED_ANT_TEST_METHODS}"
+               fi
+ 
+               # Prepare the JVM dtests vnodes argument, which is optional
+               vnodes_args=""
+               if ${REPEATED_ANT_TEST_VNODES}; then
+                 vnodes_args="-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'"
+               fi
+ 
+               # Run the test target as many times as requested collecting the exit code,
+               # stopping the iteration only if stop_on_failure is set.
+               exit_code="$?"
+               for i in $(seq -w 1 $count); do
+ 
+                 echo "Running test iteration $i of $count"
+ 
+                 # run the test
+                 status="passes"
+                 if !( set -o pipefail && ant $target $name $methods $vnodes_args -Dno-build-test=true | tee stdout.txt ); then
+                   status="fails"
+                   exit_code=1
+                 fi
+ 
+                 # move the stdout output file
+                 dest=/tmp/results/repeated_utest/stdout/${status}/${i}
+                 mkdir -p $dest
+                 mv stdout.txt $dest/${REPEATED_ANT_TEST_TARGET}-${REPEATED_ANT_TEST_CLASS}.txt
+ 
+                 # move the XML output files
+                 source=build/test/output
+                 dest=/tmp/results/repeated_utest/output/${status}/${i}
+                 mkdir -p $dest
+                 if [[ -d $source && -n "$(ls $source)" ]]; then
+                   mv $source/* $dest/
+                 fi
+ 
+                 # move the log files
+                 source=build/test/logs
+                 dest=/tmp/results/repeated_utest/logs/${status}/${i}
+                 mkdir -p $dest
+                 if [[ -d $source && -n "$(ls $source)" ]]; then
+                   mv $source/* $dest/
+                 fi
+ 
+                 # maybe stop iterations on test failure
+                 if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then
+                   break
+                 fi
+               done
+ 
+               (exit ${exit_code})
+             fi
+           fi
+     - store_test_results:
+         path: /tmp/results/repeated_utest/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utest/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utest/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utest/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j11_utests_system_keyspace_directory_repeat:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
+     - store_test_results:
+         path: /tmp/results/repeated_utests/output
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j8_cqlsh_dtests_py3_vnode:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
+         name: Determine Tests to Run (j8_with_vnodes)
+         no_output_timeout: 5m
+         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j8_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip- [...]
+     - run:
+         name: Run dtests (j8_with_vnodes)
+         no_output_timeout: 15m
+         command: |
+           echo "cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt"
+           cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt
+ 
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.6' ]; then
+             export CQLSH_PYTHON=/usr/bin/python3.6
+           fi
+ 
+           java -version
+           cd ~/cassandra-dtest
+           mkdir -p /tmp/dtest
+ 
+           echo "env: $(env)"
+           echo "** done env"
+           mkdir -p /tmp/results/dtests
+           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
+           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt`
+           set -o pipefail && cd ~/cassandra-dtest && pytest --use-vnodes --num-tokens=16 --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j8_with_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+     - store_test_results:
+         path: /tmp/results
+     - store_artifacts:
+         path: /tmp/dtest
+         destination: dtest_j8_with_vnodes
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_j8_with_vnodes_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_cqlsh_dtests_py3:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Clone Cassandra dtest Repository (via git)
+         command: |
+           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
+     - run:
+         name: Configure virtualenv and python Dependencies
+         command: |
+           # note, this should be super quick as all dependencies should be pre-installed in the docker image
+           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
+           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
+           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
+           pip3 uninstall -y cqlsh
+           pip3 freeze
+     - run:
+         name: Determine Tests to Run (j11_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 (j11_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --skip-resource- [...]
+     - run:
+         name: Run dtests (j11_without_vnodes)
+         no_output_timeout: 15m
+         command: |
+           echo "cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt"
+           cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt
+ 
+           source ~/env3.6/bin/activate
+           export PATH=$JAVA_HOME/bin:$PATH
+           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.6' ]; then
+             export CQLSH_PYTHON=/usr/bin/python3.6
+           fi
+ 
+           java -version
+           cd ~/cassandra-dtest
+           mkdir -p /tmp/dtest
+ 
+           echo "env: $(env)"
+           echo "** done env"
+           mkdir -p /tmp/results/dtests
+           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
+           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt`
+           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_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_j11_without_vnodes
+     - store_artifacts:
+         path: ~/cassandra-dtest/logs
+         destination: dtest_j11_without_vnodes_logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j11_utests_cdc:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 4
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Determine 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-cdc)
+         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-cdc   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
+         no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j11_utests_fqltool:
+     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 (fqltool-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 fqltool-test
+         no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_utests_system_keyspace_directory:
+     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-system-keyspace-directory)
+         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-system-keyspace-directory   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
+         no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j11_jvm_dtests_vnode:
+     docker:
+     - image: apache/cassandra-testing-ubuntu2004-java11:latest
+     resource_class: medium
+     working_directory: ~/
+     shell: /bin/bash -eo pipefail -l
+     parallelism: 1
+     steps:
+     - attach_workspace:
+         at: /home/cassandra
+     - run:
+         name: Determine distributed Tests to Run
+         command: |
+           # reminder: this code (along with all the steps) is independently executed on every circle container
+           # so the goal here is to get the circleci script to return the tests *this* container will run
+           # which we do via the `circleci` cli tool.
+ 
+           rm -fr ~/cassandra-dtest/upgrade_tests
+           echo "***java tests***"
+ 
+           # get all of our unit test filenames
+           set -eo pipefail && circleci tests glob "$HOME/cassandra/test/distributed/**/*.java" > /tmp/all_java_unit_tests.txt
+ 
+           # split up the unit tests into groups based on the number of containers we have
+           set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt
+           set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/distributed/;;g" | grep "Test\.java$" | grep -v upgrade > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
+           echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt"
+           cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
+         no_output_timeout: 15m
+     - run:
+         name: Log Environment Information
+         command: |
+           echo '*** id ***'
+           id
+           echo '*** cat /proc/cpuinfo ***'
+           cat /proc/cpuinfo
+           echo '*** free -m ***'
+           free -m
+           echo '*** df -m ***'
+           df -m
+           echo '*** ifconfig -a ***'
+           ifconfig -a
+           echo '*** uname -a ***'
+           uname -a
+           echo '*** mount ***'
+           mount
+           echo '*** env ***'
+           env
+           echo '*** java ***'
+           which java
+           java -version
+     - run:
+         name: Run Unit Tests (testclasslist)
+         command: |
+           set -x
+           export PATH=$JAVA_HOME/bin:$PATH
+           time mv ~/cassandra /tmp
+           cd /tmp/cassandra
+           if [ -d ~/dtest_jars ]; then
+             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
+           fi
+           test_timeout=$(grep 'name="test.distributed.timeout"' build.xml | awk -F'"' '{print $4}' || true)
+           if [ -z "$test_timeout" ]; then
+             test_timeout=$(grep 'name="test.timeout"' build.xml | awk -F'"' '{print $4}')
+           fi
+           ant testclasslist -Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16' -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=distributed
+         no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   j8_simulator_dtests:
+     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: 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 Simulator Tests
+         command: |
+           set -x
+           export PATH=$JAVA_HOME/bin:$PATH
+           time mv ~/cassandra /tmp
+           cd /tmp/cassandra
+           if [ -d ~/dtest_jars ]; then
+             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
+           fi
+           ant test-simulator-dtest
+         no_output_timeout: 30m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+   j8_utests_compression:
+     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: Run dtests (j8_without_vnodes)
-         no_output_timeout: 15m
+         name: Determine unit Tests to Run
          command: |
-           echo "cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt"
-           cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt
+           # reminder: this code (along with all the steps) is independently executed on every circle container
+           # so the goal here is to get the circleci script to return the tests *this* container will run
+           # which we do via the `circleci` cli tool.
  
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.6' ]; then
-             export CQLSH_PYTHON=/usr/bin/python3.6
-           fi
+           rm -fr ~/cassandra-dtest/upgrade_tests
+           echo "***java tests***"
  
-           java -version
-           cd ~/cassandra-dtest
-           mkdir -p /tmp/dtest
+           # get all of our unit test filenames
+           set -eo pipefail && circleci tests glob "$HOME/cassandra/test/unit/**/*.java" > /tmp/all_java_unit_tests.txt
  
-           echo "env: $(env)"
-           echo "** done env"
-           mkdir -p /tmp/results/dtests
-           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt`
-           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j8_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+           # 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-compression)
+         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-compression   -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/results
+         path: /tmp/cassandra/build/test/output/
      - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest_j8_without_vnodes
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
      - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_j8_without_vnodes_logs
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
      - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
@@@ -906,56 -2436,114 +2526,114 @@@
      - 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 (long-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.8/bin/activate
            export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
-         name: Determine Tests to Run (j11_without_vnodes)
-         no_output_timeout: 5m
-         command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.8/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n  export \nfi\n\necho \"***Collected DTests (j11_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --skip-resource- [...]
-     - run:
-         name: Run dtests (j11_without_vnodes)
+           time mv ~/cassandra /tmp
+           cd /tmp/cassandra
+           if [ -d ~/dtest_jars ]; then
+             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
+           fi
+           ant long-test
          no_output_timeout: 15m
+     - store_test_results:
+         path: /tmp/cassandra/build/test/output/
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/cassandra/build/test/logs
+         destination: logs
+     environment:
+     - ANT_HOME: /usr/share/ant
+     - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - LANG: en_US.UTF-8
+     - KEEP_TEST_DIR: true
+     - DEFAULT_DIR: /home/cassandra/cassandra-dtest
+     - PYTHONIOENCODING: utf-8
+     - PYTHONUNBUFFERED: true
+     - CASS_DRIVER_NO_EXTENSIONS: true
+     - CASS_DRIVER_NO_CYTHON: true
+     - CASSANDRA_SKIP_SYNC: true
+     - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
+     - DTEST_BRANCH: trunk
+     - CCM_MAX_HEAP_SIZE: 1024M
+     - CCM_HEAP_NEWSIZE: 256M
+     - REPEATED_TESTS_STOP_ON_FAILURE: false
+     - REPEATED_UTESTS: null
+     - REPEATED_UTESTS_COUNT: 500
+     - REPEATED_UTESTS_FQLTOOL: null
+     - REPEATED_UTESTS_FQLTOOL_COUNT: 500
+     - REPEATED_UTESTS_LONG: null
+     - REPEATED_UTESTS_LONG_COUNT: 100
+     - REPEATED_UTESTS_STRESS: null
+     - REPEATED_UTESTS_STRESS_COUNT: 500
+     - REPEATED_SIMULATOR_DTESTS: null
+     - REPEATED_SIMULATOR_DTESTS_COUNT: 500
+     - REPEATED_JVM_DTESTS: null
+     - REPEATED_JVM_DTESTS_COUNT: 500
+     - REPEATED_JVM_UPGRADE_DTESTS: null
+     - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
+     - REPEATED_DTESTS: null
+     - REPEATED_DTESTS_COUNT: 500
+     - REPEATED_UPGRADE_DTESTS: null
+     - REPEATED_UPGRADE_DTESTS_COUNT: 25
+     - REPEATED_ANT_TEST_TARGET: testsome
+     - REPEATED_ANT_TEST_CLASS: null
+     - REPEATED_ANT_TEST_METHODS: null
+     - REPEATED_ANT_TEST_VNODES: false
+     - REPEATED_ANT_TEST_COUNT: 500
+     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
+     - CASSANDRA_USE_JDK11: true
+   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 "cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt"
-           cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt
- 
-           source ~/env3.8/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.8' ]; then
-             export CQLSH_PYTHON=/usr/bin/python3.8
-           fi
- 
+           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
-           cd ~/cassandra-dtest
-           mkdir -p /tmp/dtest
- 
-           echo "env: $(env)"
-           echo "** done env"
-           mkdir -p /tmp/results/dtests
-           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt`
-           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
      - store_test_results:
-         path: /tmp/results
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest_j11_without_vnodes
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
      - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_j11_without_vnodes_logs
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
      - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
@@@ -1308,56 -2801,42 +2891,42 @@@
      - attach_workspace:
          at: /home/cassandra
      - run:
-         name: Clone Cassandra dtest Repository (via git)
-         command: |
-           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
-     - run:
-         name: Configure virtualenv and python Dependencies
-         command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
-         name: Determine Tests to Run (j11_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 (j11_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --skip-resource- [...]
-     - run:
-         name: Run dtests (j11_without_vnodes)
-         no_output_timeout: 15m
+         name: Log Environment Information
          command: |
-           echo "cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt"
-           cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt
- 
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           if [ -n 'CQLSH_PYTHON=/usr/bin/python3.6' ]; then
-             export CQLSH_PYTHON=/usr/bin/python3.6
-           fi
- 
+           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
-           cd ~/cassandra-dtest
-           mkdir -p /tmp/dtest
- 
-           echo "env: $(env)"
-           echo "** done env"
-           mkdir -p /tmp/results/dtests
-           # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-           export SPLIT_TESTS=`cat /tmp/split_dtest_tests_j11_without_vnodes_final.txt`
-           set -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result_j11_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
+     - run:
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
      - store_test_results:
-         path: /tmp/results
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest_j11_without_vnodes
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
      - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_j11_without_vnodes_logs
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
      - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
@@@ -1571,24 -3068,19 +3158,19 @@@
            which java
            java -version
      - run:
-         name: Run Simulator Tests
-         command: |
-           set -x
-           export PATH=$JAVA_HOME/bin:$PATH
-           time mv ~/cassandra /tmp
-           cd /tmp/cassandra
-           if [ -d ~/dtest_jars ]; then
-             cp ~/dtest_jars/dtest* /tmp/cassandra/build/
-           fi
-           ant test-simulator-dtest
-         no_output_timeout: 30m
+         name: Repeatedly run new or modifed JUnit tests
+         no_output_timeout: 15m
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and [...]
      - store_test_results:
-         path: /tmp/cassandra/build/test/output/
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/cassandra/build/test/output
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/output
          destination: junitxml
      - store_artifacts:
-         path: /tmp/cassandra/build/test/logs
+         path: /tmp/results/repeated_utests/logs
          destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
@@@ -1667,7 -3159,7 +3249,7 @@@
      - run:
          name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and autom [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
      - store_test_results:
          path: /tmp/results/repeated_utests/output
      - store_artifacts:
@@@ -1977,7 -3469,7 +3559,7 @@@
      - run:
          name: Repeatedly run new or modifed JUnit tests
          no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests [...]
      - store_test_results:
          path: /tmp/results/repeated_utests/output
      - store_artifacts:
@@@ -2064,85 -3556,20 +3646,20 @@@
            which java
            java -version
      - run:
-         name: Clone Cassandra dtest Repository (via git)
-         command: |
-           git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest
-     - run:
-         name: Configure virtualenv and python Dependencies
-         command: |
-           # note, this should be super quick as all dependencies should be pre-installed in the docker image
-           # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated
-           # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and
-           # rebuild the docker image! (it automatically pulls the latest requirements.txt on build)
-           source ~/env3.6/bin/activate
-           export PATH=$JAVA_HOME/bin:$PATH
-           pip3 install --exists-action w --upgrade -r ~/cassandra-dtest/requirements.txt
-           pip3 uninstall -y cqlsh
-           pip3 freeze
-     - run:
-         name: Run repeated Python dtest
+         name: Repeatedly run new or modifed JUnit tests
          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 false; then
-                 vnodes_args="--use-vnodes --num-tokens=16"
-               fi
- 
-               upgrade_arg=""
-               if false; then
-                 upgrade_arg="--execute-upgrade-tests --upgrade-target-version-only --upgrade-version-selection all"
-               fi
- 
-               # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee
-               set -o pipefail && cd ~/cassandra-dtest && pytest $vnodes_args --count=$count $stop_on_failure_arg $upgrade_arg --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $tests_arg | tee /tmp/dtest/stdout.txt
-             fi
-           fi
 -        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
++        command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automatically d [...]
      - store_test_results:
-         path: /tmp/results
+         path: /tmp/results/repeated_utests/output
      - store_artifacts:
-         path: /tmp/dtest
-         destination: dtest
+         path: /tmp/results/repeated_utests/stdout
+         destination: stdout
      - store_artifacts:
-         path: ~/cassandra-dtest/logs
-         destination: dtest_logs
+         path: /tmp/results/repeated_utests/output
+         destination: junitxml
+     - store_artifacts:
+         path: /tmp/results/repeated_utests/logs
+         destination: logs
      environment:
      - ANT_HOME: /usr/share/ant
      - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
@@@ -2183,202 -3610,9 +3700,244 @@@
      - REPEATED_ANT_TEST_METHODS: null
      - REPEATED_ANT_TEST_VNODES: false
      - REPEATED_ANT_TEST_COUNT: 500
-     - JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
-     - CASSANDRA_USE_JDK11: true
-   j8_jvm_dtests_vnode_repeat:
+     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
+     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
++  j11_utests_trie:
 +    docker:
-     - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
++    - image: apache/cassandra-testing-ubuntu2004-java11:latest
 +    resource_class: medium
 +    working_directory: ~/
 +    shell: /bin/bash -eo pipefail -l
 +    parallelism: 4
 +    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: Repeatedly run new or modifed JUnit tests
++        name: Run Unit Tests (testclasslist-trie)
++        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-trie   -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=unit
 +        no_output_timeout: 15m
-         command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n  cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n  count=$((count+1))\nfi\n\n# Put manually specified tests and automat [...]
 +    - store_test_results:
-         path: /tmp/results/repeated_utests/output
-     - store_artifacts:
-         path: /tmp/results/repeated_utests/stdout
-         destination: stdout
++        path: /tmp/cassandra/build/test/output/
 +    - store_artifacts:
-         path: /tmp/results/repeated_utests/output
++        path: /tmp/cassandra/build/test/output
 +        destination: junitxml
 +    - store_artifacts:
-         path: /tmp/results/repeated_utests/logs
++        path: /tmp/cassandra/build/test/logs
 +        destination: logs
 +    environment:
 +    - ANT_HOME: /usr/share/ant
 +    - JAVA11_HOME: /usr/lib/jvm/java-11-openjdk-amd64
 +    - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64
 +    - LANG: en_US.UTF-8
 +    - KEEP_TEST_DIR: true
 +    - DEFAULT_DIR: /home/cassandra/cassandra-dtest
 +    - PYTHONIOENCODING: utf-8
 +    - PYTHONUNBUFFERED: true
 +    - CASS_DRIVER_NO_EXTENSIONS: true
 +    - CASS_DRIVER_NO_CYTHON: true
 +    - CASSANDRA_SKIP_SYNC: true
 +    - DTEST_REPO: https://github.com/apache/cassandra-dtest.git
 +    - DTEST_BRANCH: trunk
 +    - CCM_MAX_HEAP_SIZE: 1024M
 +    - CCM_HEAP_NEWSIZE: 256M
 +    - REPEATED_TESTS_STOP_ON_FAILURE: false
 +    - REPEATED_UTESTS: null
 +    - REPEATED_UTESTS_COUNT: 500
 +    - REPEATED_UTESTS_FQLTOOL: null
 +    - REPEATED_UTESTS_FQLTOOL_COUNT: 500
 +    - REPEATED_UTESTS_LONG: null
 +    - REPEATED_UTESTS_LONG_COUNT: 100
 +    - REPEATED_UTESTS_STRESS: null
 +    - REPEATED_UTESTS_STRESS_COUNT: 500
 +    - REPEATED_SIMULATOR_DTESTS: null
 +    - REPEATED_SIMULATOR_DTESTS_COUNT: 500
 +    - REPEATED_JVM_DTESTS: null
 +    - REPEATED_JVM_DTESTS_COUNT: 500
 +    - REPEATED_JVM_UPGRADE_DTESTS: null
 +    - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
 +    - REPEATED_DTESTS: null
 +    - REPEATED_DTESTS_COUNT: 500
 +    - REPEATED_UPGRADE_DTESTS: null
 +    - REPEATED_UPGRADE_DTESTS_COUNT: 25
 +    - REPEATED_ANT_TEST_TARGET: testsome
 +    - REPEATED_ANT_TEST_CLASS: null
 +    - REPEATED_ANT_TEST_METHODS: null
 +    - REPEATED_ANT_TEST_VNODES: false
 +    - REPEATED_ANT_TEST_COUNT: 500
-     - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
-     - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
... 4616 lines suppressed ...


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