This is an automated email from the ASF dual-hosted git repository. adelapena pushed a commit to branch cassandra-3.11 in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit 7df905a4293af692b793b9364f2011f1c0a3a0d9 Merge: deede44af5 116ce3bc05 Author: Andrés de la Peña <a.penya.gar...@gmail.com> AuthorDate: Thu Nov 3 11:36:22 2022 +0000 Merge branch 'cassandra-3.0' into cassandra-3.11 .circleci/config-2_1.yml | 70 ++++-- .circleci/config-2_1.yml.high_res.patch | 6 +- .circleci/config-2_1.yml.mid_res.patch | 12 +- .circleci/config.yml | 403 +++++++++++++++++++++++++++++-- .circleci/config.yml.HIGHRES | 413 ++++++++++++++++++++++++++++++-- .circleci/config.yml.LOWRES | 413 ++++++++++++++++++++++++++++++-- .circleci/config.yml.MIDRES | 413 ++++++++++++++++++++++++++++++-- .circleci/generate.sh | 1 + 8 files changed, 1606 insertions(+), 125 deletions(-) diff --cc .circleci/config-2_1.yml index c3703d699d,48bce92a3a..92dd98d332 --- a/.circleci/config-2_1.yml +++ b/.circleci/config-2_1.yml @@@ -109,7 -101,7 +109,6 @@@ default_env_vars: &default_env_var # REPEATED_ANT_TEST_TARGET: test-jvm-dtest-some # REPEATED_ANT_TEST_TARGET: test-cdc # REPEATED_ANT_TEST_TARGET: test-compression -- # REPEATED_ANT_TEST_TARGET: test-system-keyspace-directory REPEATED_ANT_TEST_TARGET: testsome # The name of JUnit class to be run multiple times, for example: # REPEATED_ANT_TEST_CLASS: org.apache.cassandra.cql3.ViewTest @@@ -199,7 -191,7 +198,7 @@@ separate_jobs: &separate_job requires: - start_j8_jvm_dtests_repeat - build -- # specialized unit tests (all run using Java 8) ++ # specialized unit tests (all run on request) - start_utests_long: type: approval - utests_long: @@@ -212,6 -204,6 +211,18 @@@ requires: - start_utests_long_repeat - build ++ - start_utests_cdc: ++ type: approval ++ - utests_cdc: ++ requires: ++ - start_utests_cdc ++ - build ++ - start_utests_cdc_repeat: ++ type: approval ++ - utests_cdc_repeat: ++ requires: ++ - start_utests_cdc_repeat ++ - build - start_utests_compression: type: approval - utests_compression: @@@ -320,7 -301,7 +331,7 @@@ pre-commit_jobs: &pre-commit_job - j8_jvm_dtests_repeat: requires: - build -- # specialized unit tests (all run on request using Java 8) ++ # specialized unit tests (all run on request) - start_utests_long: type: approval - utests_long: @@@ -331,6 -312,6 +342,16 @@@ requires: - start_utests_long - build ++ - start_utests_cdc: ++ type: approval ++ - utests_cdc: ++ requires: ++ - start_utests_cdc ++ - build ++ - utests_cdc_repeat: ++ requires: ++ - start_utests_cdc ++ - build - start_utests_compression: type: approval - utests_compression: @@@ -481,6 -448,6 +502,16 @@@ jobs - run_junit_tests: target: long-test ++ utests_cdc: ++ <<: *j8_par_executor ++ steps: ++ - attach_workspace: ++ at: /home/cassandra ++ - create_junit_containers ++ - log_environment ++ - run_parallel_junit_tests: ++ target: testclasslist-cdc ++ utests_compression: <<: *j8_par_executor steps: @@@ -552,21 -511,21 +583,21 @@@ - log_environment - run_unit_tests_repeat -- utests_compression_repeat: ++ utests_cdc_repeat: <<: *j8_repeated_utest_executor steps: - attach_workspace: at: /home/cassandra - log_environment -- - run_utests_compression_repeat ++ - run_utests_cdc_repeat -- utests_system_keyspace_directory_repeat: ++ utests_compression_repeat: <<: *j8_repeated_utest_executor steps: - attach_workspace: at: /home/cassandra - log_environment -- - run_utests_system_keyspace_directory_repeat ++ - run_utests_compression_repeat utests_long_repeat: <<: *j8_repeated_utest_executor @@@ -984,18 -932,18 +1015,18 @@@ commands count: ${REPEATED_UTESTS_COUNT} stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE} -- run_utests_compression_repeat: ++ run_utests_cdc_repeat: steps: - run_repeated_utests: -- target: test-compression ++ target: test-cdc tests: ${REPEATED_UTESTS} count: ${REPEATED_UTESTS_COUNT} stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE} -- run_utests_system_keyspace_directory_repeat: ++ run_utests_compression_repeat: steps: - run_repeated_utests: -- target: test-system-keyspace-directory ++ target: test-compression tests: ${REPEATED_UTESTS} count: ${REPEATED_UTESTS_COUNT} stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE} @@@ -1064,7 -1004,14 +1095,16 @@@ # Put manually specified tests and automatically detected tests together, removing duplicates tests=$(echo <<parameters.tests>> | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" - + + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=<<parameters.target>> + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -1083,9 -1030,8 +1123,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -1205,9 -1151,8 +1244,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name="-Dtest.name=$class_name" else name="-Dtest.name=$class_path" diff --cc .circleci/config-2_1.yml.high_res.patch index d2996086de,bdc37a0307..6c1ca83ea4 --- a/.circleci/config-2_1.yml.high_res.patch +++ b/.circleci/config-2_1.yml.high_res.patch @@@ -1,5 -1,5 +1,5 @@@ - --- config-2_1.yml 2022-10-15 14:49:08.115591764 +0100 - +++ config-2_1.yml.HIGHRES 2022-10-15 14:50:05.887981105 +0100 ---- config-2_1.yml 2022-10-15 16:29:48.670020291 +0100 -+++ config-2_1.yml.HIGHRES 2022-10-15 16:30:17.885329362 +0100 ++--- config-2_1.yml 2022-10-27 10:16:44.059665934 +0100 +++++ config-2_1.yml.HIGHRES 2022-10-27 10:18:01.956045811 +0100 @@ -40,8 +40,8 @@ CASSANDRA_SKIP_SYNC: true DTEST_REPO: https://github.com/apache/cassandra-dtest.git @@@ -11,7 -11,7 +11,7 @@@ # Whether the repeated test iterations should stop on the first failure by default. REPEATED_TESTS_STOP_ON_FAILURE: false - @@ -126,46 +126,50 @@ -@@ -118,46 +118,50 @@ ++@@ -125,46 +125,50 @@ j8_par_executor: &j8_par_executor executor: name: java8-executor diff --cc .circleci/config-2_1.yml.mid_res.patch index 8eb567d5e4,05cf0c275e..8fce189ce8 --- 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-15 14:49:08.115591764 +0100 - +++ config-2_1.yml.MIDRES 2022-10-15 14:50:05.881594331 +0100 - @@ -127,45 +127,65 @@ ---- config-2_1.yml 2022-10-15 16:29:48.670020291 +0100 -+++ config-2_1.yml.MIDRES 2022-10-15 16:30:17.879007207 +0100 -@@ -119,45 +119,65 @@ ++--- config-2_1.yml 2022-10-27 10:16:44.059665934 +0100 +++++ config-2_1.yml.MIDRES 2022-10-27 10:18:01.949746099 +0100 ++@@ -126,45 +126,65 @@ executor: name: java8-executor #exec_resource_class: xlarge @@@ -73,8 -73,8 +73,8 @@@ separate_jobs: &separate_jobs jobs: - @@ -500,7 +520,7 @@ -@@ -459,7 +479,7 @@ - target: testclasslist-compression ++@@ -531,7 +551,7 @@ + target: stress-test j8_dtests_vnode: - <<: *j8_par_executor @@@ -82,7 -82,7 +82,7 @@@ steps: - attach_workspace: at: /home/cassandra - @@ -514,7 +534,7 @@ -@@ -473,7 +493,7 @@ ++@@ -545,7 +565,7 @@ pytest_extra_args: '--use-vnodes --num-tokens=32 --skip-resource-intensive-tests' j8_dtests: @@@ -91,7 -91,7 +91,7 @@@ steps: - attach_workspace: at: /home/cassandra - @@ -528,7 +548,7 @@ -@@ -487,7 +507,7 @@ ++@@ -559,7 +579,7 @@ pytest_extra_args: '--skip-resource-intensive-tests' j8_upgrade_dtests: diff --cc .circleci/config.yml index ed0689d749,84da5cfb0a..aa877ba101 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@@ -183,6 -181,13 +183,15 @@@ jobs tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=test-compression + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -201,9 -206,8 +210,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -288,183 -292,6 +296,191 @@@ - REPEATED_UTESTS_COUNT: 500 - REPEATED_UTESTS_LONG: null - REPEATED_UTESTS_LONG_COUNT: 100 + - REPEATED_UTESTS_STRESS: null + - REPEATED_UTESTS_STRESS_COUNT: 500 + - REPEATED_JVM_DTESTS: null + - REPEATED_JVM_DTESTS_COUNT: 500 + - REPEATED_JVM_UPGRADE_DTESTS: null + - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 + - REPEATED_DTESTS: null + - REPEATED_DTESTS_COUNT: 500 + - REPEATED_UPGRADE_DTESTS: null + - REPEATED_UPGRADE_DTESTS_COUNT: 25 + - REPEATED_ANT_TEST_TARGET: testsome + - REPEATED_ANT_TEST_CLASS: null + - REPEATED_ANT_TEST_METHODS: null + - REPEATED_ANT_TEST_COUNT: 500 + - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + utests_stress_repeat: + docker: + - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest + resource_class: medium + working_directory: ~/ + shell: /bin/bash -eo pipefail -l + parallelism: 4 + steps: + - attach_workspace: + at: /home/cassandra + - run: + name: Log Environment Information + command: | + echo '*** id ***' + id + echo '*** cat /proc/cpuinfo ***' + cat /proc/cpuinfo + echo '*** free -m ***' + free -m + echo '*** df -m ***' + df -m + echo '*** ifconfig -a ***' + ifconfig -a + echo '*** uname -a ***' + uname -a + echo '*** mount ***' + mount + echo '*** env ***' + env + echo '*** java ***' + which java + java -version + - run: + name: Repeatedly run new or modifed JUnit tests + no_output_timeout: 15m + command: | + set -x + export PATH=$JAVA_HOME/bin:$PATH + time mv ~/cassandra /tmp + cd /tmp/cassandra + if [ -d ~/dtest_jars ]; then + cp ~/dtest_jars/dtest* /tmp/cassandra/build/ + fi + + # Calculate the number of test iterations to be run by the current parallel runner. + count=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL)) + if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then + count=$((count+1)) + fi + + # Put manually specified tests and automatically detected tests together, removing duplicates + tests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) + echo "Tests to be repeated: ${tests}" + ++ # Prepare the testtag for the target, used by the test macro in build.xml to group the output files ++ target=stress-test-some ++ testtag="" ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then ++ testtag="compression" ++ fi ++ + # Run each test class as many times as requested. + exit_code="$?" + for test in $tests; do + + # Split class and method names from the test name + if [[ $test =~ "#" ]]; then + class=${test%"#"*} + method=${test#*"#"} + else + class=$test + method="" + fi + + # Prepare the -Dtest.name argument. + # It can be the fully qualified class name or the short class name, depending on the target. + if [[ $target == "test" || \ + $target == "test-cdc" || \ + $target == "test-compression" || \ - $target == "test-system-keyspace-directory" || \ + $target == "long-test" || \ + $target == "stress-test" ]]; then + name_arg="-Dtest.name=${class##*.}" + else + name_arg="-Dtest.name=$class" + fi + + # Prepare the -Dtest.methods argument, which is optional - if [ $method == "" ]; then ++ if [[ $method == "" ]]; then + methods_arg="" + else + methods_arg="-Dtest.methods=$method" + fi + + for i in $(seq -w 1 $count); do + echo "Running test $test, iteration $i of $count" + + # run the test + status="passes" + if !( set -o pipefail && \ + ant stress-test-some $name_arg $methods_arg -Dno-build-test=true | \ + tee stdout.txt \ + ); then + status="fails" + exit_code=1 + fi + + # move the stdout output file + dest=/tmp/results/repeated_utests/stdout/${status}/${i} + mkdir -p $dest + mv stdout.txt $dest/${test}.txt + + # move the XML output files - source=build/test/output ++ source=build/test/output/${testtag} + dest=/tmp/results/repeated_utests/output/${status}/${i} + mkdir -p $dest + if [[ -d $source && -n "$(ls $source)" ]]; then + mv $source/* $dest/ + fi + + # move the log files - source=build/test/logs ++ source=build/test/logs/${testtag} + dest=/tmp/results/repeated_utests/logs/${status}/${i} + mkdir -p $dest + if [[ -d $source && -n "$(ls $source)" ]]; then + mv $source/* $dest/ + fi + + # maybe stop iterations on test failure + if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then + break + fi + done + done + (exit ${exit_code}) + - store_test_results: + path: /tmp/results/repeated_utests/output + - store_artifacts: + path: /tmp/results/repeated_utests/stdout + destination: stdout + - store_artifacts: + path: /tmp/results/repeated_utests/output + destination: junitxml + - store_artifacts: + path: /tmp/results/repeated_utests/logs + destination: logs + environment: + - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - ANT_HOME: /usr/share/ant + - LANG: en_US.UTF-8 + - KEEP_TEST_DIR: true + - DEFAULT_DIR: /home/cassandra/cassandra-dtest + - PYTHONIOENCODING: utf-8 + - PYTHONUNBUFFERED: true + - CASS_DRIVER_NO_EXTENSIONS: true + - CASS_DRIVER_NO_CYTHON: true + - CASSANDRA_SKIP_SYNC: true + - DTEST_REPO: https://github.com/apache/cassandra-dtest.git + - DTEST_BRANCH: trunk + - CCM_MAX_HEAP_SIZE: 1024M + - CCM_HEAP_NEWSIZE: 256M + - REPEATED_TESTS_STOP_ON_FAILURE: false + - REPEATED_UTESTS: null + - REPEATED_UTESTS_COUNT: 500 + - REPEATED_UTESTS_LONG: null + - REPEATED_UTESTS_LONG_COUNT: 100 + - REPEATED_UTESTS_STRESS: null + - REPEATED_UTESTS_STRESS_COUNT: 500 - REPEATED_JVM_DTESTS: null - REPEATED_JVM_DTESTS_COUNT: 500 - REPEATED_JVM_UPGRADE_DTESTS: null @@@ -533,6 -360,13 +549,15 @@@ tests=$(echo ${REPEATED_UTESTS_LONG} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=long-testsome + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -551,9 -385,8 +576,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -708,6 -539,13 +732,15 @@@ tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=testsome + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -726,9 -564,8 +759,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -1351,6 -1178,13 +1383,15 @@@ tests=$(echo ${REPEATED_JVM_UPGRADE_DTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=test-jvm-dtest-some + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -1369,9 -1203,8 +1410,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -1428,78 -1261,13 +1468,189 @@@ - store_test_results: path: /tmp/results/repeated_utests/output - store_artifacts: - path: /tmp/results/repeated_utests/stdout - destination: stdout + path: /tmp/results/repeated_utests/stdout + destination: stdout + - store_artifacts: + path: /tmp/results/repeated_utests/output + destination: junitxml + - store_artifacts: + path: /tmp/results/repeated_utests/logs + destination: logs + environment: + - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - ANT_HOME: /usr/share/ant + - LANG: en_US.UTF-8 + - KEEP_TEST_DIR: true + - DEFAULT_DIR: /home/cassandra/cassandra-dtest + - PYTHONIOENCODING: utf-8 + - PYTHONUNBUFFERED: true + - CASS_DRIVER_NO_EXTENSIONS: true + - CASS_DRIVER_NO_CYTHON: true + - CASSANDRA_SKIP_SYNC: true + - DTEST_REPO: https://github.com/apache/cassandra-dtest.git + - DTEST_BRANCH: trunk + - CCM_MAX_HEAP_SIZE: 1024M + - CCM_HEAP_NEWSIZE: 256M + - REPEATED_TESTS_STOP_ON_FAILURE: false + - REPEATED_UTESTS: null + - REPEATED_UTESTS_COUNT: 500 + - REPEATED_UTESTS_LONG: null + - REPEATED_UTESTS_LONG_COUNT: 100 + - REPEATED_UTESTS_STRESS: null + - REPEATED_UTESTS_STRESS_COUNT: 500 + - REPEATED_JVM_DTESTS: null + - REPEATED_JVM_DTESTS_COUNT: 500 + - REPEATED_JVM_UPGRADE_DTESTS: null + - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 + - REPEATED_DTESTS: null + - REPEATED_DTESTS_COUNT: 500 + - REPEATED_UPGRADE_DTESTS: null + - REPEATED_UPGRADE_DTESTS_COUNT: 25 + - REPEATED_ANT_TEST_TARGET: testsome + - REPEATED_ANT_TEST_CLASS: null + - REPEATED_ANT_TEST_METHODS: null + - REPEATED_ANT_TEST_COUNT: 500 + - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 ++ utests_cdc: ++ 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-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: ++ - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 ++ - ANT_HOME: /usr/share/ant ++ - LANG: en_US.UTF-8 ++ - KEEP_TEST_DIR: true ++ - DEFAULT_DIR: /home/cassandra/cassandra-dtest ++ - PYTHONIOENCODING: utf-8 ++ - PYTHONUNBUFFERED: true ++ - CASS_DRIVER_NO_EXTENSIONS: true ++ - CASS_DRIVER_NO_CYTHON: true ++ - CASSANDRA_SKIP_SYNC: true ++ - DTEST_REPO: https://github.com/apache/cassandra-dtest.git ++ - DTEST_BRANCH: trunk ++ - CCM_MAX_HEAP_SIZE: 1024M ++ - CCM_HEAP_NEWSIZE: 256M ++ - REPEATED_TESTS_STOP_ON_FAILURE: false ++ - REPEATED_UTESTS: null ++ - REPEATED_UTESTS_COUNT: 500 ++ - REPEATED_UTESTS_LONG: null ++ - REPEATED_UTESTS_LONG_COUNT: 100 ++ - REPEATED_UTESTS_STRESS: null ++ - REPEATED_UTESTS_STRESS_COUNT: 500 ++ - REPEATED_JVM_DTESTS: null ++ - REPEATED_JVM_DTESTS_COUNT: 500 ++ - REPEATED_JVM_UPGRADE_DTESTS: null ++ - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 ++ - REPEATED_DTESTS: null ++ - REPEATED_DTESTS_COUNT: 500 ++ - REPEATED_UPGRADE_DTESTS: null ++ - REPEATED_UPGRADE_DTESTS_COUNT: 25 ++ - REPEATED_ANT_TEST_TARGET: testsome ++ - REPEATED_ANT_TEST_CLASS: null ++ - REPEATED_ANT_TEST_METHODS: null ++ - REPEATED_ANT_TEST_COUNT: 500 ++ - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 ++ - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + utests_stress: + docker: + - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest + resource_class: medium + working_directory: ~/ + shell: /bin/bash -eo pipefail -l + parallelism: 1 + steps: + - attach_workspace: + at: /home/cassandra + - run: + name: Run Unit Tests (stress-test) + command: | + export PATH=$JAVA_HOME/bin:$PATH + time mv ~/cassandra /tmp + cd /tmp/cassandra + if [ -d ~/dtest_jars ]; then + cp ~/dtest_jars/dtest* /tmp/cassandra/build/ + fi + ant stress-test -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=unit + no_output_timeout: 15m + - store_test_results: + path: /tmp/cassandra/build/test/output/ - store_artifacts: - path: /tmp/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: - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 @@@ -1856,6 -1616,13 +2007,15 @@@ tests=$(echo ${REPEATED_JVM_DTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=test-jvm-dtest-some + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -1874,9 -1641,8 +2034,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -2050,9 -1814,8 +2209,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name="-Dtest.name=$class_name" else name="-Dtest.name=$class_path" @@@ -2265,22 -2026,20 +2423,205 @@@ - REPEATED_UTESTS_COUNT: 500 - REPEATED_UTESTS_LONG: null - REPEATED_UTESTS_LONG_COUNT: 100 + - REPEATED_UTESTS_STRESS: null + - REPEATED_UTESTS_STRESS_COUNT: 500 + - REPEATED_JVM_DTESTS: null + - REPEATED_JVM_DTESTS_COUNT: 500 + - REPEATED_JVM_UPGRADE_DTESTS: null + - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 + - REPEATED_DTESTS: null + - REPEATED_DTESTS_COUNT: 500 + - REPEATED_UPGRADE_DTESTS: null + - REPEATED_UPGRADE_DTESTS_COUNT: 25 + - REPEATED_ANT_TEST_TARGET: testsome + - REPEATED_ANT_TEST_CLASS: null + - REPEATED_ANT_TEST_METHODS: null + - REPEATED_ANT_TEST_COUNT: 500 + - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 ++ utests_cdc_repeat: ++ docker: ++ - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest ++ resource_class: medium ++ working_directory: ~/ ++ shell: /bin/bash -eo pipefail -l ++ parallelism: 4 ++ steps: ++ - attach_workspace: ++ at: /home/cassandra ++ - run: ++ name: Log Environment Information ++ command: | ++ echo '*** id ***' ++ id ++ echo '*** cat /proc/cpuinfo ***' ++ cat /proc/cpuinfo ++ echo '*** free -m ***' ++ free -m ++ echo '*** df -m ***' ++ df -m ++ echo '*** ifconfig -a ***' ++ ifconfig -a ++ echo '*** uname -a ***' ++ uname -a ++ echo '*** mount ***' ++ mount ++ echo '*** env ***' ++ env ++ echo '*** java ***' ++ which java ++ java -version ++ - run: ++ name: Repeatedly run new or modifed JUnit tests ++ no_output_timeout: 15m ++ command: | ++ set -x ++ export PATH=$JAVA_HOME/bin:$PATH ++ time mv ~/cassandra /tmp ++ cd /tmp/cassandra ++ if [ -d ~/dtest_jars ]; then ++ cp ~/dtest_jars/dtest* /tmp/cassandra/build/ ++ fi ++ ++ # Calculate the number of test iterations to be run by the current parallel runner. ++ count=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL)) ++ if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then ++ count=$((count+1)) ++ fi ++ ++ # Put manually specified tests and automatically detected tests together, removing duplicates ++ tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) ++ echo "Tests to be repeated: ${tests}" ++ ++ # Prepare the testtag for the target, used by the test macro in build.xml to group the output files ++ target=test-cdc ++ testtag="" ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then ++ testtag="compression" ++ fi ++ ++ # Run each test class as many times as requested. ++ exit_code="$?" ++ for test in $tests; do ++ ++ # Split class and method names from the test name ++ if [[ $test =~ "#" ]]; then ++ class=${test%"#"*} ++ method=${test#*"#"} ++ else ++ class=$test ++ method="" ++ fi ++ ++ # Prepare the -Dtest.name argument. ++ # It can be the fully qualified class name or the short class name, depending on the target. ++ if [[ $target == "test" || \ ++ $target == "test-cdc" || \ ++ $target == "test-compression" || \ ++ $target == "long-test" || \ ++ $target == "stress-test" ]]; then ++ name_arg="-Dtest.name=${class##*.}" ++ else ++ name_arg="-Dtest.name=$class" ++ fi ++ ++ # Prepare the -Dtest.methods argument, which is optional ++ if [[ $method == "" ]]; then ++ methods_arg="" ++ else ++ methods_arg="-Dtest.methods=$method" ++ fi ++ ++ for i in $(seq -w 1 $count); do ++ echo "Running test $test, iteration $i of $count" ++ ++ # run the test ++ status="passes" ++ if !( set -o pipefail && \ ++ ant test-cdc $name_arg $methods_arg -Dno-build-test=true | \ ++ tee stdout.txt \ ++ ); then ++ status="fails" ++ exit_code=1 ++ fi ++ ++ # move the stdout output file ++ dest=/tmp/results/repeated_utests/stdout/${status}/${i} ++ mkdir -p $dest ++ mv stdout.txt $dest/${test}.txt ++ ++ # move the XML output files ++ source=build/test/output/${testtag} ++ dest=/tmp/results/repeated_utests/output/${status}/${i} ++ mkdir -p $dest ++ if [[ -d $source && -n "$(ls $source)" ]]; then ++ mv $source/* $dest/ ++ fi ++ ++ # move the log files ++ source=build/test/logs/${testtag} ++ dest=/tmp/results/repeated_utests/logs/${status}/${i} ++ mkdir -p $dest ++ if [[ -d $source && -n "$(ls $source)" ]]; then ++ mv $source/* $dest/ ++ fi ++ ++ # maybe stop iterations on test failure ++ if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then ++ break ++ fi ++ done ++ done ++ (exit ${exit_code}) ++ - store_test_results: ++ path: /tmp/results/repeated_utests/output ++ - store_artifacts: ++ path: /tmp/results/repeated_utests/stdout ++ destination: stdout ++ - store_artifacts: ++ path: /tmp/results/repeated_utests/output ++ destination: junitxml ++ - store_artifacts: ++ path: /tmp/results/repeated_utests/logs ++ destination: logs ++ environment: ++ - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 ++ - ANT_HOME: /usr/share/ant ++ - LANG: en_US.UTF-8 ++ - KEEP_TEST_DIR: true ++ - DEFAULT_DIR: /home/cassandra/cassandra-dtest ++ - PYTHONIOENCODING: utf-8 ++ - PYTHONUNBUFFERED: true ++ - CASS_DRIVER_NO_EXTENSIONS: true ++ - CASS_DRIVER_NO_CYTHON: true ++ - CASSANDRA_SKIP_SYNC: true ++ - DTEST_REPO: https://github.com/apache/cassandra-dtest.git ++ - DTEST_BRANCH: trunk ++ - CCM_MAX_HEAP_SIZE: 1024M ++ - CCM_HEAP_NEWSIZE: 256M ++ - REPEATED_TESTS_STOP_ON_FAILURE: false ++ - REPEATED_UTESTS: null ++ - REPEATED_UTESTS_COUNT: 500 ++ - REPEATED_UTESTS_LONG: null ++ - REPEATED_UTESTS_LONG_COUNT: 100 ++ - REPEATED_UTESTS_STRESS: null ++ - REPEATED_UTESTS_STRESS_COUNT: 500 + - REPEATED_JVM_DTESTS: null + - REPEATED_JVM_DTESTS_COUNT: 500 + - REPEATED_JVM_UPGRADE_DTESTS: null + - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 + - REPEATED_DTESTS: null + - REPEATED_DTESTS_COUNT: 500 + - REPEATED_UPGRADE_DTESTS: null + - REPEATED_UPGRADE_DTESTS_COUNT: 25 + - REPEATED_ANT_TEST_TARGET: testsome + - REPEATED_ANT_TEST_CLASS: null + - REPEATED_ANT_TEST_METHODS: null + - REPEATED_ANT_TEST_COUNT: 500 + - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 j8_jvm_dtests: docker: - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest @@@ -2692,6 -2443,6 +3033,12 @@@ workflows requires: - start_utests_long - build ++ - start_utests_cdc: ++ type: approval ++ - utests_cdc: ++ requires: ++ - start_utests_cdc ++ - build - start_utests_compression: type: approval - utests_compression: @@@ -2753,6 -2498,6 +3100,12 @@@ requires: - start_utests_long - build ++ - start_utests_cdc: ++ type: approval ++ - utests_cdc: ++ requires: ++ - start_utests_cdc ++ - build - start_utests_compression: type: approval - utests_compression: diff --cc .circleci/config.yml.HIGHRES index b832815cc3,cf4e5f4fcb..d35a97ece5 --- a/.circleci/config.yml.HIGHRES +++ b/.circleci/config.yml.HIGHRES @@@ -183,6 -181,13 +183,15 @@@ jobs tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=test-compression + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -201,9 -206,8 +210,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -288,183 -292,6 +296,191 @@@ - REPEATED_UTESTS_COUNT: 500 - REPEATED_UTESTS_LONG: null - REPEATED_UTESTS_LONG_COUNT: 100 + - REPEATED_UTESTS_STRESS: null + - REPEATED_UTESTS_STRESS_COUNT: 500 + - REPEATED_JVM_DTESTS: null + - REPEATED_JVM_DTESTS_COUNT: 500 + - REPEATED_JVM_UPGRADE_DTESTS: null + - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 + - REPEATED_DTESTS: null + - REPEATED_DTESTS_COUNT: 500 + - REPEATED_UPGRADE_DTESTS: null + - REPEATED_UPGRADE_DTESTS_COUNT: 25 + - REPEATED_ANT_TEST_TARGET: testsome + - REPEATED_ANT_TEST_CLASS: null + - REPEATED_ANT_TEST_METHODS: null + - REPEATED_ANT_TEST_COUNT: 500 + - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + utests_stress_repeat: + docker: + - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest + resource_class: xlarge + working_directory: ~/ + shell: /bin/bash -eo pipefail -l + parallelism: 100 + steps: + - attach_workspace: + at: /home/cassandra + - run: + name: Log Environment Information + command: | + echo '*** id ***' + id + echo '*** cat /proc/cpuinfo ***' + cat /proc/cpuinfo + echo '*** free -m ***' + free -m + echo '*** df -m ***' + df -m + echo '*** ifconfig -a ***' + ifconfig -a + echo '*** uname -a ***' + uname -a + echo '*** mount ***' + mount + echo '*** env ***' + env + echo '*** java ***' + which java + java -version + - run: + name: Repeatedly run new or modifed JUnit tests + no_output_timeout: 15m + command: | + set -x + export PATH=$JAVA_HOME/bin:$PATH + time mv ~/cassandra /tmp + cd /tmp/cassandra + if [ -d ~/dtest_jars ]; then + cp ~/dtest_jars/dtest* /tmp/cassandra/build/ + fi + + # Calculate the number of test iterations to be run by the current parallel runner. + count=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL)) + if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then + count=$((count+1)) + fi + + # Put manually specified tests and automatically detected tests together, removing duplicates + tests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) + echo "Tests to be repeated: ${tests}" + ++ # Prepare the testtag for the target, used by the test macro in build.xml to group the output files ++ target=stress-test-some ++ testtag="" ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then ++ testtag="compression" ++ fi ++ + # Run each test class as many times as requested. + exit_code="$?" + for test in $tests; do + + # Split class and method names from the test name + if [[ $test =~ "#" ]]; then + class=${test%"#"*} + method=${test#*"#"} + else + class=$test + method="" + fi + + # Prepare the -Dtest.name argument. + # It can be the fully qualified class name or the short class name, depending on the target. + if [[ $target == "test" || \ + $target == "test-cdc" || \ + $target == "test-compression" || \ - $target == "test-system-keyspace-directory" || \ + $target == "long-test" || \ + $target == "stress-test" ]]; then + name_arg="-Dtest.name=${class##*.}" + else + name_arg="-Dtest.name=$class" + fi + + # Prepare the -Dtest.methods argument, which is optional - if [ $method == "" ]; then ++ if [[ $method == "" ]]; then + methods_arg="" + else + methods_arg="-Dtest.methods=$method" + fi + + for i in $(seq -w 1 $count); do + echo "Running test $test, iteration $i of $count" + + # run the test + status="passes" + if !( set -o pipefail && \ + ant stress-test-some $name_arg $methods_arg -Dno-build-test=true | \ + tee stdout.txt \ + ); then + status="fails" + exit_code=1 + fi + + # move the stdout output file + dest=/tmp/results/repeated_utests/stdout/${status}/${i} + mkdir -p $dest + mv stdout.txt $dest/${test}.txt + + # move the XML output files - source=build/test/output ++ source=build/test/output/${testtag} + dest=/tmp/results/repeated_utests/output/${status}/${i} + mkdir -p $dest + if [[ -d $source && -n "$(ls $source)" ]]; then + mv $source/* $dest/ + fi + + # move the log files - source=build/test/logs ++ source=build/test/logs/${testtag} + dest=/tmp/results/repeated_utests/logs/${status}/${i} + mkdir -p $dest + if [[ -d $source && -n "$(ls $source)" ]]; then + mv $source/* $dest/ + fi + + # maybe stop iterations on test failure + if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then + break + fi + done + done + (exit ${exit_code}) + - store_test_results: + path: /tmp/results/repeated_utests/output + - store_artifacts: + path: /tmp/results/repeated_utests/stdout + destination: stdout + - store_artifacts: + path: /tmp/results/repeated_utests/output + destination: junitxml + - store_artifacts: + path: /tmp/results/repeated_utests/logs + destination: logs + environment: + - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - ANT_HOME: /usr/share/ant + - LANG: en_US.UTF-8 + - KEEP_TEST_DIR: true + - DEFAULT_DIR: /home/cassandra/cassandra-dtest + - PYTHONIOENCODING: utf-8 + - PYTHONUNBUFFERED: true + - CASS_DRIVER_NO_EXTENSIONS: true + - CASS_DRIVER_NO_CYTHON: true + - CASSANDRA_SKIP_SYNC: true + - DTEST_REPO: https://github.com/apache/cassandra-dtest.git + - DTEST_BRANCH: trunk + - CCM_MAX_HEAP_SIZE: 2048M + - CCM_HEAP_NEWSIZE: 512M + - REPEATED_TESTS_STOP_ON_FAILURE: false + - REPEATED_UTESTS: null + - REPEATED_UTESTS_COUNT: 500 + - REPEATED_UTESTS_LONG: null + - REPEATED_UTESTS_LONG_COUNT: 100 + - REPEATED_UTESTS_STRESS: null + - REPEATED_UTESTS_STRESS_COUNT: 500 - REPEATED_JVM_DTESTS: null - REPEATED_JVM_DTESTS_COUNT: 500 - REPEATED_JVM_UPGRADE_DTESTS: null @@@ -533,6 -360,13 +549,15 @@@ tests=$(echo ${REPEATED_UTESTS_LONG} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=long-testsome + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -551,9 -385,8 +576,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -708,6 -539,13 +732,15 @@@ tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=testsome + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -726,9 -564,8 +759,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -1351,6 -1178,13 +1383,15 @@@ tests=$(echo ${REPEATED_JVM_UPGRADE_DTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=test-jvm-dtest-some + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -1369,9 -1203,8 +1410,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -1472,7 -1303,116 +1512,118 @@@ - REPEATED_ANT_TEST_COUNT: 500 - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 - j8_unit_tests: ++ utests_cdc: + 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) ++ 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 -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=unit ++ 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: + - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - ANT_HOME: /usr/share/ant + - LANG: en_US.UTF-8 + - KEEP_TEST_DIR: true + - DEFAULT_DIR: /home/cassandra/cassandra-dtest + - PYTHONIOENCODING: utf-8 + - PYTHONUNBUFFERED: true + - CASS_DRIVER_NO_EXTENSIONS: true + - CASS_DRIVER_NO_CYTHON: true + - CASSANDRA_SKIP_SYNC: true + - DTEST_REPO: https://github.com/apache/cassandra-dtest.git + - DTEST_BRANCH: trunk + - CCM_MAX_HEAP_SIZE: 2048M + - CCM_HEAP_NEWSIZE: 512M + - REPEATED_TESTS_STOP_ON_FAILURE: false + - REPEATED_UTESTS: null + - REPEATED_UTESTS_COUNT: 500 + - REPEATED_UTESTS_LONG: null + - REPEATED_UTESTS_LONG_COUNT: 100 ++ - REPEATED_UTESTS_STRESS: null ++ - REPEATED_UTESTS_STRESS_COUNT: 500 + - REPEATED_JVM_DTESTS: null + - REPEATED_JVM_DTESTS_COUNT: 500 + - REPEATED_JVM_UPGRADE_DTESTS: null + - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 + - REPEATED_DTESTS: null + - REPEATED_DTESTS_COUNT: 500 + - REPEATED_UPGRADE_DTESTS: null + - REPEATED_UPGRADE_DTESTS_COUNT: 25 + - REPEATED_ANT_TEST_TARGET: testsome + - REPEATED_ANT_TEST_CLASS: null + - REPEATED_ANT_TEST_METHODS: null + - REPEATED_ANT_TEST_COUNT: 500 + - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 - j8_dtests: + utests_stress: docker: - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest resource_class: xlarge @@@ -1856,6 -1616,13 +2007,15 @@@ tests=$(echo ${REPEATED_JVM_DTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=test-jvm-dtest-some + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -1874,9 -1641,8 +2034,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -2050,9 -1814,8 +2209,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name="-Dtest.name=$class_name" else name="-Dtest.name=$class_path" @@@ -2265,22 -2026,20 +2423,205 @@@ - REPEATED_UTESTS_COUNT: 500 - REPEATED_UTESTS_LONG: null - REPEATED_UTESTS_LONG_COUNT: 100 + - REPEATED_UTESTS_STRESS: null + - REPEATED_UTESTS_STRESS_COUNT: 500 + - REPEATED_JVM_DTESTS: null + - REPEATED_JVM_DTESTS_COUNT: 500 + - REPEATED_JVM_UPGRADE_DTESTS: null + - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 + - REPEATED_DTESTS: null + - REPEATED_DTESTS_COUNT: 500 + - REPEATED_UPGRADE_DTESTS: null + - REPEATED_UPGRADE_DTESTS_COUNT: 25 + - REPEATED_ANT_TEST_TARGET: testsome + - REPEATED_ANT_TEST_CLASS: null + - REPEATED_ANT_TEST_METHODS: null + - REPEATED_ANT_TEST_COUNT: 500 + - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 ++ utests_cdc_repeat: ++ docker: ++ - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest ++ resource_class: xlarge ++ working_directory: ~/ ++ shell: /bin/bash -eo pipefail -l ++ parallelism: 100 ++ steps: ++ - attach_workspace: ++ at: /home/cassandra ++ - run: ++ name: Log Environment Information ++ command: | ++ echo '*** id ***' ++ id ++ echo '*** cat /proc/cpuinfo ***' ++ cat /proc/cpuinfo ++ echo '*** free -m ***' ++ free -m ++ echo '*** df -m ***' ++ df -m ++ echo '*** ifconfig -a ***' ++ ifconfig -a ++ echo '*** uname -a ***' ++ uname -a ++ echo '*** mount ***' ++ mount ++ echo '*** env ***' ++ env ++ echo '*** java ***' ++ which java ++ java -version ++ - run: ++ name: Repeatedly run new or modifed JUnit tests ++ no_output_timeout: 15m ++ command: | ++ set -x ++ export PATH=$JAVA_HOME/bin:$PATH ++ time mv ~/cassandra /tmp ++ cd /tmp/cassandra ++ if [ -d ~/dtest_jars ]; then ++ cp ~/dtest_jars/dtest* /tmp/cassandra/build/ ++ fi ++ ++ # Calculate the number of test iterations to be run by the current parallel runner. ++ count=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL)) ++ if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then ++ count=$((count+1)) ++ fi ++ ++ # Put manually specified tests and automatically detected tests together, removing duplicates ++ tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) ++ echo "Tests to be repeated: ${tests}" ++ ++ # Prepare the testtag for the target, used by the test macro in build.xml to group the output files ++ target=test-cdc ++ testtag="" ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then ++ testtag="compression" ++ fi ++ ++ # Run each test class as many times as requested. ++ exit_code="$?" ++ for test in $tests; do ++ ++ # Split class and method names from the test name ++ if [[ $test =~ "#" ]]; then ++ class=${test%"#"*} ++ method=${test#*"#"} ++ else ++ class=$test ++ method="" ++ fi ++ ++ # Prepare the -Dtest.name argument. ++ # It can be the fully qualified class name or the short class name, depending on the target. ++ if [[ $target == "test" || \ ++ $target == "test-cdc" || \ ++ $target == "test-compression" || \ ++ $target == "long-test" || \ ++ $target == "stress-test" ]]; then ++ name_arg="-Dtest.name=${class##*.}" ++ else ++ name_arg="-Dtest.name=$class" ++ fi ++ ++ # Prepare the -Dtest.methods argument, which is optional ++ if [[ $method == "" ]]; then ++ methods_arg="" ++ else ++ methods_arg="-Dtest.methods=$method" ++ fi ++ ++ for i in $(seq -w 1 $count); do ++ echo "Running test $test, iteration $i of $count" ++ ++ # run the test ++ status="passes" ++ if !( set -o pipefail && \ ++ ant test-cdc $name_arg $methods_arg -Dno-build-test=true | \ ++ tee stdout.txt \ ++ ); then ++ status="fails" ++ exit_code=1 ++ fi ++ ++ # move the stdout output file ++ dest=/tmp/results/repeated_utests/stdout/${status}/${i} ++ mkdir -p $dest ++ mv stdout.txt $dest/${test}.txt ++ ++ # move the XML output files ++ source=build/test/output/${testtag} ++ dest=/tmp/results/repeated_utests/output/${status}/${i} ++ mkdir -p $dest ++ if [[ -d $source && -n "$(ls $source)" ]]; then ++ mv $source/* $dest/ ++ fi ++ ++ # move the log files ++ source=build/test/logs/${testtag} ++ dest=/tmp/results/repeated_utests/logs/${status}/${i} ++ mkdir -p $dest ++ if [[ -d $source && -n "$(ls $source)" ]]; then ++ mv $source/* $dest/ ++ fi ++ ++ # maybe stop iterations on test failure ++ if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then ++ break ++ fi ++ done ++ done ++ (exit ${exit_code}) ++ - store_test_results: ++ path: /tmp/results/repeated_utests/output ++ - store_artifacts: ++ path: /tmp/results/repeated_utests/stdout ++ destination: stdout ++ - store_artifacts: ++ path: /tmp/results/repeated_utests/output ++ destination: junitxml ++ - store_artifacts: ++ path: /tmp/results/repeated_utests/logs ++ destination: logs ++ environment: ++ - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 ++ - ANT_HOME: /usr/share/ant ++ - LANG: en_US.UTF-8 ++ - KEEP_TEST_DIR: true ++ - DEFAULT_DIR: /home/cassandra/cassandra-dtest ++ - PYTHONIOENCODING: utf-8 ++ - PYTHONUNBUFFERED: true ++ - CASS_DRIVER_NO_EXTENSIONS: true ++ - CASS_DRIVER_NO_CYTHON: true ++ - CASSANDRA_SKIP_SYNC: true ++ - DTEST_REPO: https://github.com/apache/cassandra-dtest.git ++ - DTEST_BRANCH: trunk ++ - CCM_MAX_HEAP_SIZE: 2048M ++ - CCM_HEAP_NEWSIZE: 512M ++ - REPEATED_TESTS_STOP_ON_FAILURE: false ++ - REPEATED_UTESTS: null ++ - REPEATED_UTESTS_COUNT: 500 ++ - REPEATED_UTESTS_LONG: null ++ - REPEATED_UTESTS_LONG_COUNT: 100 ++ - REPEATED_UTESTS_STRESS: null ++ - REPEATED_UTESTS_STRESS_COUNT: 500 + - REPEATED_JVM_DTESTS: null + - REPEATED_JVM_DTESTS_COUNT: 500 + - REPEATED_JVM_UPGRADE_DTESTS: null + - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 + - REPEATED_DTESTS: null + - REPEATED_DTESTS_COUNT: 500 + - REPEATED_UPGRADE_DTESTS: null + - REPEATED_UPGRADE_DTESTS_COUNT: 25 + - REPEATED_ANT_TEST_TARGET: testsome + - REPEATED_ANT_TEST_CLASS: null + - REPEATED_ANT_TEST_METHODS: null + - REPEATED_ANT_TEST_COUNT: 500 + - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 j8_jvm_dtests: docker: - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest @@@ -2710,6 -2461,6 +3051,18 @@@ workflows requires: - start_utests_long_repeat - build ++ - start_utests_cdc: ++ type: approval ++ - utests_cdc: ++ requires: ++ - start_utests_cdc ++ - build ++ - start_utests_cdc_repeat: ++ type: approval ++ - utests_cdc_repeat: ++ requires: ++ - start_utests_cdc_repeat ++ - build - start_utests_compression: type: approval - utests_compression: @@@ -2823,6 -2562,6 +3176,16 @@@ requires: - start_utests_long - build ++ - start_utests_cdc: ++ type: approval ++ - utests_cdc: ++ requires: ++ - start_utests_cdc ++ - build ++ - utests_cdc_repeat: ++ requires: ++ - start_utests_cdc ++ - build - start_utests_compression: type: approval - utests_compression: diff --cc .circleci/config.yml.LOWRES index fcebba8dae,f611444ec2..7358442b26 --- a/.circleci/config.yml.LOWRES +++ b/.circleci/config.yml.LOWRES @@@ -183,6 -181,13 +183,15 @@@ jobs tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=test-compression + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -201,9 -206,8 +210,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -288,183 -292,6 +296,191 @@@ - REPEATED_UTESTS_COUNT: 500 - REPEATED_UTESTS_LONG: null - REPEATED_UTESTS_LONG_COUNT: 100 + - REPEATED_UTESTS_STRESS: null + - REPEATED_UTESTS_STRESS_COUNT: 500 + - REPEATED_JVM_DTESTS: null + - REPEATED_JVM_DTESTS_COUNT: 500 + - REPEATED_JVM_UPGRADE_DTESTS: null + - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 + - REPEATED_DTESTS: null + - REPEATED_DTESTS_COUNT: 500 + - REPEATED_UPGRADE_DTESTS: null + - REPEATED_UPGRADE_DTESTS_COUNT: 25 + - REPEATED_ANT_TEST_TARGET: testsome + - REPEATED_ANT_TEST_CLASS: null + - REPEATED_ANT_TEST_METHODS: null + - REPEATED_ANT_TEST_COUNT: 500 + - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + utests_stress_repeat: + docker: + - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest + resource_class: medium + working_directory: ~/ + shell: /bin/bash -eo pipefail -l + parallelism: 4 + steps: + - attach_workspace: + at: /home/cassandra + - run: + name: Log Environment Information + command: | + echo '*** id ***' + id + echo '*** cat /proc/cpuinfo ***' + cat /proc/cpuinfo + echo '*** free -m ***' + free -m + echo '*** df -m ***' + df -m + echo '*** ifconfig -a ***' + ifconfig -a + echo '*** uname -a ***' + uname -a + echo '*** mount ***' + mount + echo '*** env ***' + env + echo '*** java ***' + which java + java -version + - run: + name: Repeatedly run new or modifed JUnit tests + no_output_timeout: 15m + command: | + set -x + export PATH=$JAVA_HOME/bin:$PATH + time mv ~/cassandra /tmp + cd /tmp/cassandra + if [ -d ~/dtest_jars ]; then + cp ~/dtest_jars/dtest* /tmp/cassandra/build/ + fi + + # Calculate the number of test iterations to be run by the current parallel runner. + count=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL)) + if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then + count=$((count+1)) + fi + + # Put manually specified tests and automatically detected tests together, removing duplicates + tests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) + echo "Tests to be repeated: ${tests}" + ++ # Prepare the testtag for the target, used by the test macro in build.xml to group the output files ++ target=stress-test-some ++ testtag="" ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then ++ testtag="compression" ++ fi ++ + # Run each test class as many times as requested. + exit_code="$?" + for test in $tests; do + + # Split class and method names from the test name + if [[ $test =~ "#" ]]; then + class=${test%"#"*} + method=${test#*"#"} + else + class=$test + method="" + fi + + # Prepare the -Dtest.name argument. + # It can be the fully qualified class name or the short class name, depending on the target. + if [[ $target == "test" || \ + $target == "test-cdc" || \ + $target == "test-compression" || \ - $target == "test-system-keyspace-directory" || \ + $target == "long-test" || \ + $target == "stress-test" ]]; then + name_arg="-Dtest.name=${class##*.}" + else + name_arg="-Dtest.name=$class" + fi + + # Prepare the -Dtest.methods argument, which is optional - if [ $method == "" ]; then ++ if [[ $method == "" ]]; then + methods_arg="" + else + methods_arg="-Dtest.methods=$method" + fi + + for i in $(seq -w 1 $count); do + echo "Running test $test, iteration $i of $count" + + # run the test + status="passes" + if !( set -o pipefail && \ + ant stress-test-some $name_arg $methods_arg -Dno-build-test=true | \ + tee stdout.txt \ + ); then + status="fails" + exit_code=1 + fi + + # move the stdout output file + dest=/tmp/results/repeated_utests/stdout/${status}/${i} + mkdir -p $dest + mv stdout.txt $dest/${test}.txt + + # move the XML output files - source=build/test/output ++ source=build/test/output/${testtag} + dest=/tmp/results/repeated_utests/output/${status}/${i} + mkdir -p $dest + if [[ -d $source && -n "$(ls $source)" ]]; then + mv $source/* $dest/ + fi + + # move the log files - source=build/test/logs ++ source=build/test/logs/${testtag} + dest=/tmp/results/repeated_utests/logs/${status}/${i} + mkdir -p $dest + if [[ -d $source && -n "$(ls $source)" ]]; then + mv $source/* $dest/ + fi + + # maybe stop iterations on test failure + if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then + break + fi + done + done + (exit ${exit_code}) + - store_test_results: + path: /tmp/results/repeated_utests/output + - store_artifacts: + path: /tmp/results/repeated_utests/stdout + destination: stdout + - store_artifacts: + path: /tmp/results/repeated_utests/output + destination: junitxml + - store_artifacts: + path: /tmp/results/repeated_utests/logs + destination: logs + environment: + - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - ANT_HOME: /usr/share/ant + - LANG: en_US.UTF-8 + - KEEP_TEST_DIR: true + - DEFAULT_DIR: /home/cassandra/cassandra-dtest + - PYTHONIOENCODING: utf-8 + - PYTHONUNBUFFERED: true + - CASS_DRIVER_NO_EXTENSIONS: true + - CASS_DRIVER_NO_CYTHON: true + - CASSANDRA_SKIP_SYNC: true + - DTEST_REPO: https://github.com/apache/cassandra-dtest.git + - DTEST_BRANCH: trunk + - CCM_MAX_HEAP_SIZE: 1024M + - CCM_HEAP_NEWSIZE: 256M + - REPEATED_TESTS_STOP_ON_FAILURE: false + - REPEATED_UTESTS: null + - REPEATED_UTESTS_COUNT: 500 + - REPEATED_UTESTS_LONG: null + - REPEATED_UTESTS_LONG_COUNT: 100 + - REPEATED_UTESTS_STRESS: null + - REPEATED_UTESTS_STRESS_COUNT: 500 - REPEATED_JVM_DTESTS: null - REPEATED_JVM_DTESTS_COUNT: 500 - REPEATED_JVM_UPGRADE_DTESTS: null @@@ -533,6 -360,13 +549,15 @@@ tests=$(echo ${REPEATED_UTESTS_LONG} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=long-testsome + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -551,9 -385,8 +576,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -708,6 -539,13 +732,15 @@@ tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=testsome + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -726,9 -564,8 +759,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -1351,6 -1178,13 +1383,15 @@@ tests=$(echo ${REPEATED_JVM_UPGRADE_DTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=test-jvm-dtest-some + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -1369,9 -1203,8 +1410,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -1426,80 -1259,15 +1466,191 @@@ done (exit ${exit_code}) - store_test_results: - path: /tmp/results/repeated_utests/output - - store_artifacts: - path: /tmp/results/repeated_utests/stdout - destination: stdout + path: /tmp/results/repeated_utests/output + - store_artifacts: + path: /tmp/results/repeated_utests/stdout + destination: stdout + - store_artifacts: + path: /tmp/results/repeated_utests/output + destination: junitxml + - store_artifacts: + path: /tmp/results/repeated_utests/logs + destination: logs + environment: + - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - ANT_HOME: /usr/share/ant + - LANG: en_US.UTF-8 + - KEEP_TEST_DIR: true + - DEFAULT_DIR: /home/cassandra/cassandra-dtest + - PYTHONIOENCODING: utf-8 + - PYTHONUNBUFFERED: true + - CASS_DRIVER_NO_EXTENSIONS: true + - CASS_DRIVER_NO_CYTHON: true + - CASSANDRA_SKIP_SYNC: true + - DTEST_REPO: https://github.com/apache/cassandra-dtest.git + - DTEST_BRANCH: trunk + - CCM_MAX_HEAP_SIZE: 1024M + - CCM_HEAP_NEWSIZE: 256M + - REPEATED_TESTS_STOP_ON_FAILURE: false + - REPEATED_UTESTS: null + - REPEATED_UTESTS_COUNT: 500 + - REPEATED_UTESTS_LONG: null + - REPEATED_UTESTS_LONG_COUNT: 100 + - REPEATED_UTESTS_STRESS: null + - REPEATED_UTESTS_STRESS_COUNT: 500 + - REPEATED_JVM_DTESTS: null + - REPEATED_JVM_DTESTS_COUNT: 500 + - REPEATED_JVM_UPGRADE_DTESTS: null + - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 + - REPEATED_DTESTS: null + - REPEATED_DTESTS_COUNT: 500 + - REPEATED_UPGRADE_DTESTS: null + - REPEATED_UPGRADE_DTESTS_COUNT: 25 + - REPEATED_ANT_TEST_TARGET: testsome + - REPEATED_ANT_TEST_CLASS: null + - REPEATED_ANT_TEST_METHODS: null + - REPEATED_ANT_TEST_COUNT: 500 + - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 ++ utests_cdc: ++ 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-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: ++ - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 ++ - ANT_HOME: /usr/share/ant ++ - LANG: en_US.UTF-8 ++ - KEEP_TEST_DIR: true ++ - DEFAULT_DIR: /home/cassandra/cassandra-dtest ++ - PYTHONIOENCODING: utf-8 ++ - PYTHONUNBUFFERED: true ++ - CASS_DRIVER_NO_EXTENSIONS: true ++ - CASS_DRIVER_NO_CYTHON: true ++ - CASSANDRA_SKIP_SYNC: true ++ - DTEST_REPO: https://github.com/apache/cassandra-dtest.git ++ - DTEST_BRANCH: trunk ++ - CCM_MAX_HEAP_SIZE: 1024M ++ - CCM_HEAP_NEWSIZE: 256M ++ - REPEATED_TESTS_STOP_ON_FAILURE: false ++ - REPEATED_UTESTS: null ++ - REPEATED_UTESTS_COUNT: 500 ++ - REPEATED_UTESTS_LONG: null ++ - REPEATED_UTESTS_LONG_COUNT: 100 ++ - REPEATED_UTESTS_STRESS: null ++ - REPEATED_UTESTS_STRESS_COUNT: 500 ++ - REPEATED_JVM_DTESTS: null ++ - REPEATED_JVM_DTESTS_COUNT: 500 ++ - REPEATED_JVM_UPGRADE_DTESTS: null ++ - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 ++ - REPEATED_DTESTS: null ++ - REPEATED_DTESTS_COUNT: 500 ++ - REPEATED_UPGRADE_DTESTS: null ++ - REPEATED_UPGRADE_DTESTS_COUNT: 25 ++ - REPEATED_ANT_TEST_TARGET: testsome ++ - REPEATED_ANT_TEST_CLASS: null ++ - REPEATED_ANT_TEST_METHODS: null ++ - REPEATED_ANT_TEST_COUNT: 500 ++ - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 ++ - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + utests_stress: + docker: + - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest + resource_class: medium + working_directory: ~/ + shell: /bin/bash -eo pipefail -l + parallelism: 1 + steps: + - attach_workspace: + at: /home/cassandra + - run: + name: Run Unit Tests (stress-test) + command: | + export PATH=$JAVA_HOME/bin:$PATH + time mv ~/cassandra /tmp + cd /tmp/cassandra + if [ -d ~/dtest_jars ]; then + cp ~/dtest_jars/dtest* /tmp/cassandra/build/ + fi + ant stress-test -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=unit + no_output_timeout: 15m + - store_test_results: + path: /tmp/cassandra/build/test/output/ - store_artifacts: - path: /tmp/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: - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 @@@ -1856,6 -1616,13 +2007,15 @@@ tests=$(echo ${REPEATED_JVM_DTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=test-jvm-dtest-some + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -1874,9 -1641,8 +2034,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -2050,9 -1814,8 +2209,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name="-Dtest.name=$class_name" else name="-Dtest.name=$class_path" @@@ -2265,22 -2026,20 +2423,205 @@@ - REPEATED_UTESTS_COUNT: 500 - REPEATED_UTESTS_LONG: null - REPEATED_UTESTS_LONG_COUNT: 100 + - REPEATED_UTESTS_STRESS: null + - REPEATED_UTESTS_STRESS_COUNT: 500 + - REPEATED_JVM_DTESTS: null + - REPEATED_JVM_DTESTS_COUNT: 500 + - REPEATED_JVM_UPGRADE_DTESTS: null + - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 + - REPEATED_DTESTS: null + - REPEATED_DTESTS_COUNT: 500 + - REPEATED_UPGRADE_DTESTS: null + - REPEATED_UPGRADE_DTESTS_COUNT: 25 + - REPEATED_ANT_TEST_TARGET: testsome + - REPEATED_ANT_TEST_CLASS: null + - REPEATED_ANT_TEST_METHODS: null + - REPEATED_ANT_TEST_COUNT: 500 + - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 ++ utests_cdc_repeat: ++ docker: ++ - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest ++ resource_class: medium ++ working_directory: ~/ ++ shell: /bin/bash -eo pipefail -l ++ parallelism: 4 ++ steps: ++ - attach_workspace: ++ at: /home/cassandra ++ - run: ++ name: Log Environment Information ++ command: | ++ echo '*** id ***' ++ id ++ echo '*** cat /proc/cpuinfo ***' ++ cat /proc/cpuinfo ++ echo '*** free -m ***' ++ free -m ++ echo '*** df -m ***' ++ df -m ++ echo '*** ifconfig -a ***' ++ ifconfig -a ++ echo '*** uname -a ***' ++ uname -a ++ echo '*** mount ***' ++ mount ++ echo '*** env ***' ++ env ++ echo '*** java ***' ++ which java ++ java -version ++ - run: ++ name: Repeatedly run new or modifed JUnit tests ++ no_output_timeout: 15m ++ command: | ++ set -x ++ export PATH=$JAVA_HOME/bin:$PATH ++ time mv ~/cassandra /tmp ++ cd /tmp/cassandra ++ if [ -d ~/dtest_jars ]; then ++ cp ~/dtest_jars/dtest* /tmp/cassandra/build/ ++ fi ++ ++ # Calculate the number of test iterations to be run by the current parallel runner. ++ count=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL)) ++ if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then ++ count=$((count+1)) ++ fi ++ ++ # Put manually specified tests and automatically detected tests together, removing duplicates ++ tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) ++ echo "Tests to be repeated: ${tests}" ++ ++ # Prepare the testtag for the target, used by the test macro in build.xml to group the output files ++ target=test-cdc ++ testtag="" ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then ++ testtag="compression" ++ fi ++ ++ # Run each test class as many times as requested. ++ exit_code="$?" ++ for test in $tests; do ++ ++ # Split class and method names from the test name ++ if [[ $test =~ "#" ]]; then ++ class=${test%"#"*} ++ method=${test#*"#"} ++ else ++ class=$test ++ method="" ++ fi ++ ++ # Prepare the -Dtest.name argument. ++ # It can be the fully qualified class name or the short class name, depending on the target. ++ if [[ $target == "test" || \ ++ $target == "test-cdc" || \ ++ $target == "test-compression" || \ ++ $target == "long-test" || \ ++ $target == "stress-test" ]]; then ++ name_arg="-Dtest.name=${class##*.}" ++ else ++ name_arg="-Dtest.name=$class" ++ fi ++ ++ # Prepare the -Dtest.methods argument, which is optional ++ if [[ $method == "" ]]; then ++ methods_arg="" ++ else ++ methods_arg="-Dtest.methods=$method" ++ fi ++ ++ for i in $(seq -w 1 $count); do ++ echo "Running test $test, iteration $i of $count" ++ ++ # run the test ++ status="passes" ++ if !( set -o pipefail && \ ++ ant test-cdc $name_arg $methods_arg -Dno-build-test=true | \ ++ tee stdout.txt \ ++ ); then ++ status="fails" ++ exit_code=1 ++ fi ++ ++ # move the stdout output file ++ dest=/tmp/results/repeated_utests/stdout/${status}/${i} ++ mkdir -p $dest ++ mv stdout.txt $dest/${test}.txt ++ ++ # move the XML output files ++ source=build/test/output/${testtag} ++ dest=/tmp/results/repeated_utests/output/${status}/${i} ++ mkdir -p $dest ++ if [[ -d $source && -n "$(ls $source)" ]]; then ++ mv $source/* $dest/ ++ fi ++ ++ # move the log files ++ source=build/test/logs/${testtag} ++ dest=/tmp/results/repeated_utests/logs/${status}/${i} ++ mkdir -p $dest ++ if [[ -d $source && -n "$(ls $source)" ]]; then ++ mv $source/* $dest/ ++ fi ++ ++ # maybe stop iterations on test failure ++ if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then ++ break ++ fi ++ done ++ done ++ (exit ${exit_code}) ++ - store_test_results: ++ path: /tmp/results/repeated_utests/output ++ - store_artifacts: ++ path: /tmp/results/repeated_utests/stdout ++ destination: stdout ++ - store_artifacts: ++ path: /tmp/results/repeated_utests/output ++ destination: junitxml ++ - store_artifacts: ++ path: /tmp/results/repeated_utests/logs ++ destination: logs ++ environment: ++ - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 ++ - ANT_HOME: /usr/share/ant ++ - LANG: en_US.UTF-8 ++ - KEEP_TEST_DIR: true ++ - DEFAULT_DIR: /home/cassandra/cassandra-dtest ++ - PYTHONIOENCODING: utf-8 ++ - PYTHONUNBUFFERED: true ++ - CASS_DRIVER_NO_EXTENSIONS: true ++ - CASS_DRIVER_NO_CYTHON: true ++ - CASSANDRA_SKIP_SYNC: true ++ - DTEST_REPO: https://github.com/apache/cassandra-dtest.git ++ - DTEST_BRANCH: trunk ++ - CCM_MAX_HEAP_SIZE: 1024M ++ - CCM_HEAP_NEWSIZE: 256M ++ - REPEATED_TESTS_STOP_ON_FAILURE: false ++ - REPEATED_UTESTS: null ++ - REPEATED_UTESTS_COUNT: 500 ++ - REPEATED_UTESTS_LONG: null ++ - REPEATED_UTESTS_LONG_COUNT: 100 ++ - REPEATED_UTESTS_STRESS: null ++ - REPEATED_UTESTS_STRESS_COUNT: 500 + - REPEATED_JVM_DTESTS: null + - REPEATED_JVM_DTESTS_COUNT: 500 + - REPEATED_JVM_UPGRADE_DTESTS: null + - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 + - REPEATED_DTESTS: null + - REPEATED_DTESTS_COUNT: 500 + - REPEATED_UPGRADE_DTESTS: null + - REPEATED_UPGRADE_DTESTS_COUNT: 25 + - REPEATED_ANT_TEST_TARGET: testsome + - REPEATED_ANT_TEST_CLASS: null + - REPEATED_ANT_TEST_METHODS: null + - REPEATED_ANT_TEST_COUNT: 500 + - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 j8_jvm_dtests: docker: - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest @@@ -2710,6 -2461,6 +3051,18 @@@ workflows requires: - start_utests_long_repeat - build ++ - start_utests_cdc: ++ type: approval ++ - utests_cdc: ++ requires: ++ - start_utests_cdc ++ - build ++ - start_utests_cdc_repeat: ++ type: approval ++ - utests_cdc_repeat: ++ requires: ++ - start_utests_cdc_repeat ++ - build - start_utests_compression: type: approval - utests_compression: @@@ -2823,6 -2562,6 +3176,16 @@@ requires: - start_utests_long - build ++ - start_utests_cdc: ++ type: approval ++ - utests_cdc: ++ requires: ++ - start_utests_cdc ++ - build ++ - utests_cdc_repeat: ++ requires: ++ - start_utests_cdc ++ - build - start_utests_compression: type: approval - utests_compression: diff --cc .circleci/config.yml.MIDRES index 609d0a1026,85f8d70369..9051b2bfbe --- a/.circleci/config.yml.MIDRES +++ b/.circleci/config.yml.MIDRES @@@ -183,6 -181,13 +183,15 @@@ jobs tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=test-compression + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -201,9 -206,8 +210,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -288,183 -292,6 +296,191 @@@ - REPEATED_UTESTS_COUNT: 500 - REPEATED_UTESTS_LONG: null - REPEATED_UTESTS_LONG_COUNT: 100 + - REPEATED_UTESTS_STRESS: null + - REPEATED_UTESTS_STRESS_COUNT: 500 + - REPEATED_JVM_DTESTS: null + - REPEATED_JVM_DTESTS_COUNT: 500 + - REPEATED_JVM_UPGRADE_DTESTS: null + - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 + - REPEATED_DTESTS: null + - REPEATED_DTESTS_COUNT: 500 + - REPEATED_UPGRADE_DTESTS: null + - REPEATED_UPGRADE_DTESTS_COUNT: 25 + - REPEATED_ANT_TEST_TARGET: testsome + - REPEATED_ANT_TEST_CLASS: null + - REPEATED_ANT_TEST_METHODS: null + - REPEATED_ANT_TEST_COUNT: 500 + - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + utests_stress_repeat: + docker: + - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest + resource_class: medium + working_directory: ~/ + shell: /bin/bash -eo pipefail -l + parallelism: 25 + steps: + - attach_workspace: + at: /home/cassandra + - run: + name: Log Environment Information + command: | + echo '*** id ***' + id + echo '*** cat /proc/cpuinfo ***' + cat /proc/cpuinfo + echo '*** free -m ***' + free -m + echo '*** df -m ***' + df -m + echo '*** ifconfig -a ***' + ifconfig -a + echo '*** uname -a ***' + uname -a + echo '*** mount ***' + mount + echo '*** env ***' + env + echo '*** java ***' + which java + java -version + - run: + name: Repeatedly run new or modifed JUnit tests + no_output_timeout: 15m + command: | + set -x + export PATH=$JAVA_HOME/bin:$PATH + time mv ~/cassandra /tmp + cd /tmp/cassandra + if [ -d ~/dtest_jars ]; then + cp ~/dtest_jars/dtest* /tmp/cassandra/build/ + fi + + # Calculate the number of test iterations to be run by the current parallel runner. + count=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL)) + if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then + count=$((count+1)) + fi + + # Put manually specified tests and automatically detected tests together, removing duplicates + tests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) + echo "Tests to be repeated: ${tests}" + ++ # Prepare the testtag for the target, used by the test macro in build.xml to group the output files ++ target=stress-test-some ++ testtag="" ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then ++ testtag="compression" ++ fi ++ + # Run each test class as many times as requested. + exit_code="$?" + for test in $tests; do + + # Split class and method names from the test name + if [[ $test =~ "#" ]]; then + class=${test%"#"*} + method=${test#*"#"} + else + class=$test + method="" + fi + + # Prepare the -Dtest.name argument. + # It can be the fully qualified class name or the short class name, depending on the target. + if [[ $target == "test" || \ + $target == "test-cdc" || \ + $target == "test-compression" || \ - $target == "test-system-keyspace-directory" || \ + $target == "long-test" || \ + $target == "stress-test" ]]; then + name_arg="-Dtest.name=${class##*.}" + else + name_arg="-Dtest.name=$class" + fi + + # Prepare the -Dtest.methods argument, which is optional - if [ $method == "" ]; then ++ if [[ $method == "" ]]; then + methods_arg="" + else + methods_arg="-Dtest.methods=$method" + fi + + for i in $(seq -w 1 $count); do + echo "Running test $test, iteration $i of $count" + + # run the test + status="passes" + if !( set -o pipefail && \ + ant stress-test-some $name_arg $methods_arg -Dno-build-test=true | \ + tee stdout.txt \ + ); then + status="fails" + exit_code=1 + fi + + # move the stdout output file + dest=/tmp/results/repeated_utests/stdout/${status}/${i} + mkdir -p $dest + mv stdout.txt $dest/${test}.txt + + # move the XML output files - source=build/test/output ++ source=build/test/output/${testtag} + dest=/tmp/results/repeated_utests/output/${status}/${i} + mkdir -p $dest + if [[ -d $source && -n "$(ls $source)" ]]; then + mv $source/* $dest/ + fi + + # move the log files - source=build/test/logs ++ source=build/test/logs/${testtag} + dest=/tmp/results/repeated_utests/logs/${status}/${i} + mkdir -p $dest + if [[ -d $source && -n "$(ls $source)" ]]; then + mv $source/* $dest/ + fi + + # maybe stop iterations on test failure + if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then + break + fi + done + done + (exit ${exit_code}) + - store_test_results: + path: /tmp/results/repeated_utests/output + - store_artifacts: + path: /tmp/results/repeated_utests/stdout + destination: stdout + - store_artifacts: + path: /tmp/results/repeated_utests/output + destination: junitxml + - store_artifacts: + path: /tmp/results/repeated_utests/logs + destination: logs + environment: + - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - ANT_HOME: /usr/share/ant + - LANG: en_US.UTF-8 + - KEEP_TEST_DIR: true + - DEFAULT_DIR: /home/cassandra/cassandra-dtest + - PYTHONIOENCODING: utf-8 + - PYTHONUNBUFFERED: true + - CASS_DRIVER_NO_EXTENSIONS: true + - CASS_DRIVER_NO_CYTHON: true + - CASSANDRA_SKIP_SYNC: true + - DTEST_REPO: https://github.com/apache/cassandra-dtest.git + - DTEST_BRANCH: trunk + - CCM_MAX_HEAP_SIZE: 1024M + - CCM_HEAP_NEWSIZE: 256M + - REPEATED_TESTS_STOP_ON_FAILURE: false + - REPEATED_UTESTS: null + - REPEATED_UTESTS_COUNT: 500 + - REPEATED_UTESTS_LONG: null + - REPEATED_UTESTS_LONG_COUNT: 100 + - REPEATED_UTESTS_STRESS: null + - REPEATED_UTESTS_STRESS_COUNT: 500 - REPEATED_JVM_DTESTS: null - REPEATED_JVM_DTESTS_COUNT: 500 - REPEATED_JVM_UPGRADE_DTESTS: null @@@ -533,6 -360,13 +549,15 @@@ tests=$(echo ${REPEATED_UTESTS_LONG} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=long-testsome + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -551,9 -385,8 +576,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -708,6 -539,13 +732,15 @@@ tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=testsome + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -726,9 -564,8 +759,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -1351,6 -1178,13 +1383,15 @@@ tests=$(echo ${REPEATED_JVM_UPGRADE_DTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=test-jvm-dtest-some + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -1369,9 -1203,8 +1410,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -1472,13 -1303,122 +1512,124 @@@ - REPEATED_ANT_TEST_COUNT: 500 - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 - j8_unit_tests: ++ utests_cdc: + docker: + - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest + resource_class: medium + working_directory: ~/ + shell: /bin/bash -eo pipefail -l + parallelism: 25 + steps: + - attach_workspace: + at: /home/cassandra + - run: + name: 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) ++ 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 -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=unit ++ 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: + - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - ANT_HOME: /usr/share/ant + - LANG: en_US.UTF-8 + - KEEP_TEST_DIR: true + - DEFAULT_DIR: /home/cassandra/cassandra-dtest + - PYTHONIOENCODING: utf-8 + - PYTHONUNBUFFERED: true + - CASS_DRIVER_NO_EXTENSIONS: true + - CASS_DRIVER_NO_CYTHON: true + - CASSANDRA_SKIP_SYNC: true + - DTEST_REPO: https://github.com/apache/cassandra-dtest.git + - DTEST_BRANCH: trunk + - CCM_MAX_HEAP_SIZE: 1024M + - CCM_HEAP_NEWSIZE: 256M + - REPEATED_TESTS_STOP_ON_FAILURE: false + - REPEATED_UTESTS: null + - REPEATED_UTESTS_COUNT: 500 + - REPEATED_UTESTS_LONG: null + - REPEATED_UTESTS_LONG_COUNT: 100 ++ - REPEATED_UTESTS_STRESS: null ++ - REPEATED_UTESTS_STRESS_COUNT: 500 + - REPEATED_JVM_DTESTS: null + - REPEATED_JVM_DTESTS_COUNT: 500 + - REPEATED_JVM_UPGRADE_DTESTS: null + - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 + - REPEATED_DTESTS: null + - REPEATED_DTESTS_COUNT: 500 + - REPEATED_UPGRADE_DTESTS: null + - REPEATED_UPGRADE_DTESTS_COUNT: 25 + - REPEATED_ANT_TEST_TARGET: testsome + - REPEATED_ANT_TEST_CLASS: null + - REPEATED_ANT_TEST_METHODS: null + - REPEATED_ANT_TEST_COUNT: 500 + - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 - j8_dtests: + utests_stress: docker: - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest - resource_class: large + resource_class: medium working_directory: ~/ shell: /bin/bash -eo pipefail -l - parallelism: 50 + parallelism: 1 steps: - attach_workspace: at: /home/cassandra @@@ -1856,6 -1616,13 +2007,15 @@@ tests=$(echo ${REPEATED_JVM_DTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) echo "Tests to be repeated: ${tests}" + # Prepare the testtag for the target, used by the test macro in build.xml to group the output files + target=test-jvm-dtest-some + testtag="" - if [[ $target == "test-compression" ]]; then ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then + testtag="compression" + fi + # Run each test class as many times as requested. exit_code="$?" for test in $tests; do @@@ -1874,9 -1641,8 +2034,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name_arg="-Dtest.name=${class##*.}" else name_arg="-Dtest.name=$class" @@@ -2050,9 -1814,8 +2209,8 @@@ if [[ $target == "test" || \ $target == "test-cdc" || \ $target == "test-compression" || \ -- $target == "test-system-keyspace-directory" || \ - $target == "long-test" ]]; then + $target == "long-test" || \ + $target == "stress-test" ]]; then name="-Dtest.name=$class_name" else name="-Dtest.name=$class_path" @@@ -2281,13 -2040,13 +2439,196 @@@ - 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: ++ utests_cdc_repeat: + docker: + - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest + resource_class: medium + working_directory: ~/ + shell: /bin/bash -eo pipefail -l - parallelism: 1 ++ parallelism: 25 ++ steps: ++ - attach_workspace: ++ at: /home/cassandra ++ - run: ++ name: Log Environment Information ++ command: | ++ echo '*** id ***' ++ id ++ echo '*** cat /proc/cpuinfo ***' ++ cat /proc/cpuinfo ++ echo '*** free -m ***' ++ free -m ++ echo '*** df -m ***' ++ df -m ++ echo '*** ifconfig -a ***' ++ ifconfig -a ++ echo '*** uname -a ***' ++ uname -a ++ echo '*** mount ***' ++ mount ++ echo '*** env ***' ++ env ++ echo '*** java ***' ++ which java ++ java -version ++ - run: ++ name: Repeatedly run new or modifed JUnit tests ++ no_output_timeout: 15m ++ command: | ++ set -x ++ export PATH=$JAVA_HOME/bin:$PATH ++ time mv ~/cassandra /tmp ++ cd /tmp/cassandra ++ if [ -d ~/dtest_jars ]; then ++ cp ~/dtest_jars/dtest* /tmp/cassandra/build/ ++ fi ++ ++ # Calculate the number of test iterations to be run by the current parallel runner. ++ count=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL)) ++ if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then ++ count=$((count+1)) ++ fi ++ ++ # Put manually specified tests and automatically detected tests together, removing duplicates ++ tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) ++ echo "Tests to be repeated: ${tests}" ++ ++ # Prepare the testtag for the target, used by the test macro in build.xml to group the output files ++ target=test-cdc ++ testtag="" ++ if [[ $target == "test-cdc" ]]; then ++ testtag="cdc" ++ elif [[ $target == "test-compression" ]]; then ++ testtag="compression" ++ fi ++ ++ # Run each test class as many times as requested. ++ exit_code="$?" ++ for test in $tests; do ++ ++ # Split class and method names from the test name ++ if [[ $test =~ "#" ]]; then ++ class=${test%"#"*} ++ method=${test#*"#"} ++ else ++ class=$test ++ method="" ++ fi ++ ++ # Prepare the -Dtest.name argument. ++ # It can be the fully qualified class name or the short class name, depending on the target. ++ if [[ $target == "test" || \ ++ $target == "test-cdc" || \ ++ $target == "test-compression" || \ ++ $target == "long-test" || \ ++ $target == "stress-test" ]]; then ++ name_arg="-Dtest.name=${class##*.}" ++ else ++ name_arg="-Dtest.name=$class" ++ fi ++ ++ # Prepare the -Dtest.methods argument, which is optional ++ if [[ $method == "" ]]; then ++ methods_arg="" ++ else ++ methods_arg="-Dtest.methods=$method" ++ fi ++ ++ for i in $(seq -w 1 $count); do ++ echo "Running test $test, iteration $i of $count" ++ ++ # run the test ++ status="passes" ++ if !( set -o pipefail && \ ++ ant test-cdc $name_arg $methods_arg -Dno-build-test=true | \ ++ tee stdout.txt \ ++ ); then ++ status="fails" ++ exit_code=1 ++ fi ++ ++ # move the stdout output file ++ dest=/tmp/results/repeated_utests/stdout/${status}/${i} ++ mkdir -p $dest ++ mv stdout.txt $dest/${test}.txt ++ ++ # move the XML output files ++ source=build/test/output/${testtag} ++ dest=/tmp/results/repeated_utests/output/${status}/${i} ++ mkdir -p $dest ++ if [[ -d $source && -n "$(ls $source)" ]]; then ++ mv $source/* $dest/ ++ fi ++ ++ # move the log files ++ source=build/test/logs/${testtag} ++ dest=/tmp/results/repeated_utests/logs/${status}/${i} ++ mkdir -p $dest ++ if [[ -d $source && -n "$(ls $source)" ]]; then ++ mv $source/* $dest/ ++ fi ++ ++ # maybe stop iterations on test failure ++ if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then ++ break ++ fi ++ done ++ done ++ (exit ${exit_code}) ++ - store_test_results: ++ path: /tmp/results/repeated_utests/output ++ - store_artifacts: ++ path: /tmp/results/repeated_utests/stdout ++ destination: stdout ++ - store_artifacts: ++ path: /tmp/results/repeated_utests/output ++ destination: junitxml ++ - store_artifacts: ++ path: /tmp/results/repeated_utests/logs ++ destination: logs ++ environment: ++ - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 ++ - ANT_HOME: /usr/share/ant ++ - LANG: en_US.UTF-8 ++ - KEEP_TEST_DIR: true ++ - DEFAULT_DIR: /home/cassandra/cassandra-dtest ++ - PYTHONIOENCODING: utf-8 ++ - PYTHONUNBUFFERED: true ++ - CASS_DRIVER_NO_EXTENSIONS: true ++ - CASS_DRIVER_NO_CYTHON: true ++ - CASSANDRA_SKIP_SYNC: true ++ - DTEST_REPO: https://github.com/apache/cassandra-dtest.git ++ - DTEST_BRANCH: trunk ++ - CCM_MAX_HEAP_SIZE: 1024M ++ - CCM_HEAP_NEWSIZE: 256M ++ - REPEATED_TESTS_STOP_ON_FAILURE: false ++ - REPEATED_UTESTS: null ++ - REPEATED_UTESTS_COUNT: 500 ++ - REPEATED_UTESTS_LONG: null ++ - REPEATED_UTESTS_LONG_COUNT: 100 ++ - REPEATED_UTESTS_STRESS: null ++ - REPEATED_UTESTS_STRESS_COUNT: 500 ++ - REPEATED_JVM_DTESTS: null ++ - REPEATED_JVM_DTESTS_COUNT: 500 ++ - REPEATED_JVM_UPGRADE_DTESTS: null ++ - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 ++ - REPEATED_DTESTS: null ++ - REPEATED_DTESTS_COUNT: 500 ++ - REPEATED_UPGRADE_DTESTS: null ++ - REPEATED_UPGRADE_DTESTS_COUNT: 25 ++ - REPEATED_ANT_TEST_TARGET: testsome ++ - REPEATED_ANT_TEST_CLASS: null ++ - REPEATED_ANT_TEST_METHODS: null ++ - REPEATED_ANT_TEST_COUNT: 500 ++ - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 ++ - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 + j8_jvm_dtests: + docker: + - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest + resource_class: large + working_directory: ~/ + shell: /bin/bash -eo pipefail -l + parallelism: 10 steps: - attach_workspace: at: /home/cassandra @@@ -2710,6 -2461,6 +3051,18 @@@ workflows requires: - start_utests_long_repeat - build ++ - start_utests_cdc: ++ type: approval ++ - utests_cdc: ++ requires: ++ - start_utests_cdc ++ - build ++ - start_utests_cdc_repeat: ++ type: approval ++ - utests_cdc_repeat: ++ requires: ++ - start_utests_cdc_repeat ++ - build - start_utests_compression: type: approval - utests_compression: @@@ -2823,6 -2562,6 +3176,16 @@@ requires: - start_utests_long - build ++ - start_utests_cdc: ++ type: approval ++ - utests_cdc: ++ requires: ++ - start_utests_cdc ++ - build ++ - utests_cdc_repeat: ++ requires: ++ - start_utests_cdc ++ - build - start_utests_compression: type: approval - utests_compression: diff --cc .circleci/generate.sh index c636631f89,76fe9433c6..8c877b8e7b --- a/.circleci/generate.sh +++ b/.circleci/generate.sh @@@ -247,6 -242,6 +247,7 @@@ delete_job( if (! (echo "$env_vars" | grep -q "REPEATED_UTESTS=" )); then delete_job "j8_unit_tests_repeat" delete_job "j11_unit_tests_repeat" ++ delete_job "utests_cdc_repeat" delete_job "utests_compression_repeat" delete_job "utests_system_keyspace_directory_repeat" fi --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org