mirror of https://github.com/apache/cassandra
Extend maximum expiration date
patch by Berenguer Blasi; reviewed by Andrés de la Peña for CASSANDRA-14227
This commit is contained in:
parent
914484dfd8
commit
1adbea5a06
|
|
@ -170,7 +170,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -860,7 +860,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -1059,7 +1059,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -1265,7 +1265,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -1689,7 +1689,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -1818,6 +1818,7 @@ jobs:
|
||||||
$target == "test-cdc" || \
|
$target == "test-cdc" || \
|
||||||
$target == "test-compression" || \
|
$target == "test-compression" || \
|
||||||
$target == "test-trie" || \
|
$target == "test-trie" || \
|
||||||
|
$target == "test-oa" || \
|
||||||
$target == "test-system-keyspace-directory" || \
|
$target == "test-system-keyspace-directory" || \
|
||||||
$target == "fqltool-test" || \
|
$target == "fqltool-test" || \
|
||||||
$target == "long-test" || \
|
$target == "long-test" || \
|
||||||
|
|
@ -2494,7 +2495,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -2549,6 +2550,124 @@ jobs:
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- CASSANDRA_USE_JDK11: true
|
- CASSANDRA_USE_JDK11: true
|
||||||
|
j11_utests_oa:
|
||||||
|
docker:
|
||||||
|
- image: apache/cassandra-testing-ubuntu2004-java11:latest
|
||||||
|
resource_class: medium
|
||||||
|
working_directory: ~/
|
||||||
|
shell: /bin/bash -eo pipefail -l
|
||||||
|
parallelism: 4
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- run:
|
||||||
|
name: Determine unit Tests to Run
|
||||||
|
command: |
|
||||||
|
# reminder: this code (along with all the steps) is independently executed on every circle container
|
||||||
|
# so the goal here is to get the circleci script to return the tests *this* container will run
|
||||||
|
# which we do via the `circleci` cli tool.
|
||||||
|
|
||||||
|
rm -fr ~/cassandra-dtest/upgrade_tests
|
||||||
|
echo "***java tests***"
|
||||||
|
|
||||||
|
# get all of our unit test filenames
|
||||||
|
set -eo pipefail && circleci tests glob "$HOME/cassandra/test/unit/**/*.java" > /tmp/all_java_unit_tests.txt
|
||||||
|
|
||||||
|
# split up the unit tests into groups based on the number of containers we have
|
||||||
|
set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt
|
||||||
|
set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/unit/;;g" | grep "Test\.java$" > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
|
||||||
|
echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt"
|
||||||
|
cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
|
||||||
|
no_output_timeout: 15m
|
||||||
|
- run:
|
||||||
|
name: Log Environment Information
|
||||||
|
command: |
|
||||||
|
echo '*** id ***'
|
||||||
|
id
|
||||||
|
echo '*** cat /proc/cpuinfo ***'
|
||||||
|
cat /proc/cpuinfo
|
||||||
|
echo '*** free -m ***'
|
||||||
|
free -m
|
||||||
|
echo '*** df -m ***'
|
||||||
|
df -m
|
||||||
|
echo '*** ifconfig -a ***'
|
||||||
|
ifconfig -a
|
||||||
|
echo '*** uname -a ***'
|
||||||
|
uname -a
|
||||||
|
echo '*** mount ***'
|
||||||
|
mount
|
||||||
|
echo '*** env ***'
|
||||||
|
env
|
||||||
|
echo '*** java ***'
|
||||||
|
which java
|
||||||
|
java -version
|
||||||
|
- run:
|
||||||
|
name: Run Unit Tests (testclasslist-oa)
|
||||||
|
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-oa -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=unit -Dno-build-test=true
|
||||||
|
no_output_timeout: 15m
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/cassandra/build/test/output/
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_UPGRADE_DTESTS_COUNT: 25
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
- CASSANDRA_USE_JDK11: true
|
||||||
j8_cqlsh_dtests_py3_vnode:
|
j8_cqlsh_dtests_py3_vnode:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -3988,7 +4107,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -4587,7 +4706,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -4832,7 +4951,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -4921,7 +5040,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -5310,6 +5429,123 @@ jobs:
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- CASSANDRA_USE_JDK11: true
|
- CASSANDRA_USE_JDK11: true
|
||||||
|
j8_utests_oa:
|
||||||
|
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-oa)
|
||||||
|
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-oa -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=unit -Dno-build-test=true
|
||||||
|
no_output_timeout: 15m
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/cassandra/build/test/output/
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_UPGRADE_DTESTS_COUNT: 25
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
||||||
j8_simulator_dtests_repeat:
|
j8_simulator_dtests_repeat:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -5345,7 +5581,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_SIMULATOR_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-simulator-dtest\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-simulator-dtest $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_SIMULATOR_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-simulator-dtest\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-simulator-dtest $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -5543,7 +5779,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6108,7 +6344,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6629,7 +6865,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_UPGRADE_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_UPGRADE_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_UPGRADE_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_UPGRADE_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_UPGRADE_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_UPGRADE_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6827,7 +7063,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6917,7 +7153,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_SIMULATOR_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-simulator-dtest\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-simulator-dtest $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_SIMULATOR_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-simulator-dtest\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-simulator-dtest $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -7007,7 +7243,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -7206,7 +7442,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -7614,7 +7850,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -7776,6 +8012,95 @@ jobs:
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- CASSANDRA_USE_JDK11: true
|
- CASSANDRA_USE_JDK11: true
|
||||||
|
j8_utests_oa_repeat:
|
||||||
|
docker:
|
||||||
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
resource_class: medium
|
||||||
|
working_directory: ~/
|
||||||
|
shell: /bin/bash -eo pipefail -l
|
||||||
|
parallelism: 4
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- run:
|
||||||
|
name: Log Environment Information
|
||||||
|
command: |
|
||||||
|
echo '*** id ***'
|
||||||
|
id
|
||||||
|
echo '*** cat /proc/cpuinfo ***'
|
||||||
|
cat /proc/cpuinfo
|
||||||
|
echo '*** free -m ***'
|
||||||
|
free -m
|
||||||
|
echo '*** df -m ***'
|
||||||
|
df -m
|
||||||
|
echo '*** ifconfig -a ***'
|
||||||
|
ifconfig -a
|
||||||
|
echo '*** uname -a ***'
|
||||||
|
uname -a
|
||||||
|
echo '*** mount ***'
|
||||||
|
mount
|
||||||
|
echo '*** env ***'
|
||||||
|
env
|
||||||
|
echo '*** java ***'
|
||||||
|
which java
|
||||||
|
java -version
|
||||||
|
- run:
|
||||||
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
|
no_output_timeout: 15m
|
||||||
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-oa\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-oa $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/stdout
|
||||||
|
destination: stdout
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_UPGRADE_DTESTS_COUNT: 25
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
||||||
j8_dtests:
|
j8_dtests:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -7860,6 +8185,96 @@ jobs:
|
||||||
- REPEATED_ANT_TEST_COUNT: 500
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
||||||
|
j11_utests_oa_repeat:
|
||||||
|
docker:
|
||||||
|
- image: apache/cassandra-testing-ubuntu2004-java11:latest
|
||||||
|
resource_class: medium
|
||||||
|
working_directory: ~/
|
||||||
|
shell: /bin/bash -eo pipefail -l
|
||||||
|
parallelism: 4
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- run:
|
||||||
|
name: Log Environment Information
|
||||||
|
command: |
|
||||||
|
echo '*** id ***'
|
||||||
|
id
|
||||||
|
echo '*** cat /proc/cpuinfo ***'
|
||||||
|
cat /proc/cpuinfo
|
||||||
|
echo '*** free -m ***'
|
||||||
|
free -m
|
||||||
|
echo '*** df -m ***'
|
||||||
|
df -m
|
||||||
|
echo '*** ifconfig -a ***'
|
||||||
|
ifconfig -a
|
||||||
|
echo '*** uname -a ***'
|
||||||
|
uname -a
|
||||||
|
echo '*** mount ***'
|
||||||
|
mount
|
||||||
|
echo '*** env ***'
|
||||||
|
env
|
||||||
|
echo '*** java ***'
|
||||||
|
which java
|
||||||
|
java -version
|
||||||
|
- run:
|
||||||
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
|
no_output_timeout: 15m
|
||||||
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-oa\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-oa $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/stdout
|
||||||
|
destination: stdout
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_UPGRADE_DTESTS_COUNT: 25
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
- CASSANDRA_USE_JDK11: true
|
||||||
j8_dtests_vnode:
|
j8_dtests_vnode:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -8042,7 +8457,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -8277,6 +8692,7 @@ jobs:
|
||||||
$target == "test-cdc" || \
|
$target == "test-cdc" || \
|
||||||
$target == "test-compression" || \
|
$target == "test-compression" || \
|
||||||
$target == "test-trie" || \
|
$target == "test-trie" || \
|
||||||
|
$target == "test-oa" || \
|
||||||
$target == "test-system-keyspace-directory" || \
|
$target == "test-system-keyspace-directory" || \
|
||||||
$target == "fqltool-test" || \
|
$target == "fqltool-test" || \
|
||||||
$target == "long-test" || \
|
$target == "long-test" || \
|
||||||
|
|
@ -9191,7 +9607,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -9521,7 +9937,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -9742,7 +10158,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -9915,6 +10331,10 @@ workflows:
|
||||||
requires:
|
requires:
|
||||||
- start_j8_unit_tests
|
- start_j8_unit_tests
|
||||||
- j8_build
|
- j8_build
|
||||||
|
- j8_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j8_unit_tests
|
||||||
|
- j8_build
|
||||||
- start_j8_jvm_dtests:
|
- start_j8_jvm_dtests:
|
||||||
type: approval
|
type: approval
|
||||||
- j8_jvm_dtests:
|
- j8_jvm_dtests:
|
||||||
|
|
@ -9975,6 +10395,10 @@ workflows:
|
||||||
requires:
|
requires:
|
||||||
- start_j11_unit_tests
|
- start_j11_unit_tests
|
||||||
- j8_build
|
- j8_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j11_unit_tests
|
||||||
|
- j8_build
|
||||||
- start_j8_utests_long:
|
- start_j8_utests_long:
|
||||||
type: approval
|
type: approval
|
||||||
- j8_utests_long:
|
- j8_utests_long:
|
||||||
|
|
@ -10227,6 +10651,9 @@ workflows:
|
||||||
- j8_unit_tests:
|
- j8_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j8_build
|
- j8_build
|
||||||
|
- j8_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j8_build
|
||||||
- j8_simulator_dtests:
|
- j8_simulator_dtests:
|
||||||
requires:
|
requires:
|
||||||
- j8_build
|
- j8_build
|
||||||
|
|
@ -10257,6 +10684,9 @@ workflows:
|
||||||
- j11_unit_tests:
|
- j11_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j8_build
|
- j8_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j8_build
|
||||||
- start_utests_long:
|
- start_utests_long:
|
||||||
type: approval
|
type: approval
|
||||||
- j8_utests_long:
|
- j8_utests_long:
|
||||||
|
|
@ -10462,6 +10892,10 @@ workflows:
|
||||||
requires:
|
requires:
|
||||||
- start_j11_unit_tests
|
- start_j11_unit_tests
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j11_unit_tests
|
||||||
|
- j11_build
|
||||||
- start_j11_jvm_dtests:
|
- start_j11_jvm_dtests:
|
||||||
type: approval
|
type: approval
|
||||||
- j11_jvm_dtests:
|
- j11_jvm_dtests:
|
||||||
|
|
@ -10614,6 +11048,9 @@ workflows:
|
||||||
- j11_unit_tests:
|
- j11_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j11_build
|
||||||
- j11_jvm_dtests:
|
- j11_jvm_dtests:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
|
|
||||||
|
|
@ -170,7 +170,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -860,7 +860,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -1059,7 +1059,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -1265,7 +1265,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -1689,7 +1689,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -1818,6 +1818,7 @@ jobs:
|
||||||
$target == "test-cdc" || \
|
$target == "test-cdc" || \
|
||||||
$target == "test-compression" || \
|
$target == "test-compression" || \
|
||||||
$target == "test-trie" || \
|
$target == "test-trie" || \
|
||||||
|
$target == "test-oa" || \
|
||||||
$target == "test-system-keyspace-directory" || \
|
$target == "test-system-keyspace-directory" || \
|
||||||
$target == "fqltool-test" || \
|
$target == "fqltool-test" || \
|
||||||
$target == "long-test" || \
|
$target == "long-test" || \
|
||||||
|
|
@ -2494,7 +2495,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -2549,6 +2550,124 @@ jobs:
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- CASSANDRA_USE_JDK11: true
|
- CASSANDRA_USE_JDK11: true
|
||||||
|
j11_utests_oa:
|
||||||
|
docker:
|
||||||
|
- image: apache/cassandra-testing-ubuntu2004-java11:latest
|
||||||
|
resource_class: medium
|
||||||
|
working_directory: ~/
|
||||||
|
shell: /bin/bash -eo pipefail -l
|
||||||
|
parallelism: 4
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- run:
|
||||||
|
name: Determine unit Tests to Run
|
||||||
|
command: |
|
||||||
|
# reminder: this code (along with all the steps) is independently executed on every circle container
|
||||||
|
# so the goal here is to get the circleci script to return the tests *this* container will run
|
||||||
|
# which we do via the `circleci` cli tool.
|
||||||
|
|
||||||
|
rm -fr ~/cassandra-dtest/upgrade_tests
|
||||||
|
echo "***java tests***"
|
||||||
|
|
||||||
|
# get all of our unit test filenames
|
||||||
|
set -eo pipefail && circleci tests glob "$HOME/cassandra/test/unit/**/*.java" > /tmp/all_java_unit_tests.txt
|
||||||
|
|
||||||
|
# split up the unit tests into groups based on the number of containers we have
|
||||||
|
set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt
|
||||||
|
set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/unit/;;g" | grep "Test\.java$" > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
|
||||||
|
echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt"
|
||||||
|
cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
|
||||||
|
no_output_timeout: 15m
|
||||||
|
- run:
|
||||||
|
name: Log Environment Information
|
||||||
|
command: |
|
||||||
|
echo '*** id ***'
|
||||||
|
id
|
||||||
|
echo '*** cat /proc/cpuinfo ***'
|
||||||
|
cat /proc/cpuinfo
|
||||||
|
echo '*** free -m ***'
|
||||||
|
free -m
|
||||||
|
echo '*** df -m ***'
|
||||||
|
df -m
|
||||||
|
echo '*** ifconfig -a ***'
|
||||||
|
ifconfig -a
|
||||||
|
echo '*** uname -a ***'
|
||||||
|
uname -a
|
||||||
|
echo '*** mount ***'
|
||||||
|
mount
|
||||||
|
echo '*** env ***'
|
||||||
|
env
|
||||||
|
echo '*** java ***'
|
||||||
|
which java
|
||||||
|
java -version
|
||||||
|
- run:
|
||||||
|
name: Run Unit Tests (testclasslist-oa)
|
||||||
|
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-oa -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=unit -Dno-build-test=true
|
||||||
|
no_output_timeout: 15m
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/cassandra/build/test/output/
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_UPGRADE_DTESTS_COUNT: 25
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
- CASSANDRA_USE_JDK11: true
|
||||||
j8_cqlsh_dtests_py3_vnode:
|
j8_cqlsh_dtests_py3_vnode:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -3988,7 +4107,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -4587,7 +4706,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -4832,7 +4951,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -4921,7 +5040,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -5310,6 +5429,123 @@ jobs:
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- CASSANDRA_USE_JDK11: true
|
- CASSANDRA_USE_JDK11: true
|
||||||
|
j8_utests_oa:
|
||||||
|
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-oa)
|
||||||
|
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-oa -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=unit -Dno-build-test=true
|
||||||
|
no_output_timeout: 15m
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/cassandra/build/test/output/
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_UPGRADE_DTESTS_COUNT: 25
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
||||||
j8_simulator_dtests_repeat:
|
j8_simulator_dtests_repeat:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -5345,7 +5581,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_SIMULATOR_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-simulator-dtest\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-simulator-dtest $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_SIMULATOR_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-simulator-dtest\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-simulator-dtest $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -5543,7 +5779,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6108,7 +6344,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6629,7 +6865,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_UPGRADE_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_UPGRADE_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_UPGRADE_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_UPGRADE_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_UPGRADE_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_UPGRADE_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6827,7 +7063,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6917,7 +7153,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_SIMULATOR_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-simulator-dtest\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-simulator-dtest $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_SIMULATOR_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-simulator-dtest\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-simulator-dtest $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -7007,7 +7243,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -7206,7 +7442,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -7614,7 +7850,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -7776,6 +8012,95 @@ jobs:
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- CASSANDRA_USE_JDK11: true
|
- CASSANDRA_USE_JDK11: true
|
||||||
|
j8_utests_oa_repeat:
|
||||||
|
docker:
|
||||||
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
resource_class: medium
|
||||||
|
working_directory: ~/
|
||||||
|
shell: /bin/bash -eo pipefail -l
|
||||||
|
parallelism: 4
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- run:
|
||||||
|
name: Log Environment Information
|
||||||
|
command: |
|
||||||
|
echo '*** id ***'
|
||||||
|
id
|
||||||
|
echo '*** cat /proc/cpuinfo ***'
|
||||||
|
cat /proc/cpuinfo
|
||||||
|
echo '*** free -m ***'
|
||||||
|
free -m
|
||||||
|
echo '*** df -m ***'
|
||||||
|
df -m
|
||||||
|
echo '*** ifconfig -a ***'
|
||||||
|
ifconfig -a
|
||||||
|
echo '*** uname -a ***'
|
||||||
|
uname -a
|
||||||
|
echo '*** mount ***'
|
||||||
|
mount
|
||||||
|
echo '*** env ***'
|
||||||
|
env
|
||||||
|
echo '*** java ***'
|
||||||
|
which java
|
||||||
|
java -version
|
||||||
|
- run:
|
||||||
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
|
no_output_timeout: 15m
|
||||||
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-oa\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-oa $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/stdout
|
||||||
|
destination: stdout
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_UPGRADE_DTESTS_COUNT: 25
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
||||||
j8_dtests:
|
j8_dtests:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -7860,6 +8185,96 @@ jobs:
|
||||||
- REPEATED_ANT_TEST_COUNT: 500
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
||||||
|
j11_utests_oa_repeat:
|
||||||
|
docker:
|
||||||
|
- image: apache/cassandra-testing-ubuntu2004-java11:latest
|
||||||
|
resource_class: medium
|
||||||
|
working_directory: ~/
|
||||||
|
shell: /bin/bash -eo pipefail -l
|
||||||
|
parallelism: 4
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- run:
|
||||||
|
name: Log Environment Information
|
||||||
|
command: |
|
||||||
|
echo '*** id ***'
|
||||||
|
id
|
||||||
|
echo '*** cat /proc/cpuinfo ***'
|
||||||
|
cat /proc/cpuinfo
|
||||||
|
echo '*** free -m ***'
|
||||||
|
free -m
|
||||||
|
echo '*** df -m ***'
|
||||||
|
df -m
|
||||||
|
echo '*** ifconfig -a ***'
|
||||||
|
ifconfig -a
|
||||||
|
echo '*** uname -a ***'
|
||||||
|
uname -a
|
||||||
|
echo '*** mount ***'
|
||||||
|
mount
|
||||||
|
echo '*** env ***'
|
||||||
|
env
|
||||||
|
echo '*** java ***'
|
||||||
|
which java
|
||||||
|
java -version
|
||||||
|
- run:
|
||||||
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
|
no_output_timeout: 15m
|
||||||
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-oa\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-oa $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/stdout
|
||||||
|
destination: stdout
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_UPGRADE_DTESTS_COUNT: 25
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
- CASSANDRA_USE_JDK11: true
|
||||||
j8_dtests_vnode:
|
j8_dtests_vnode:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -8042,7 +8457,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -8277,6 +8692,7 @@ jobs:
|
||||||
$target == "test-cdc" || \
|
$target == "test-cdc" || \
|
||||||
$target == "test-compression" || \
|
$target == "test-compression" || \
|
||||||
$target == "test-trie" || \
|
$target == "test-trie" || \
|
||||||
|
$target == "test-oa" || \
|
||||||
$target == "test-system-keyspace-directory" || \
|
$target == "test-system-keyspace-directory" || \
|
||||||
$target == "fqltool-test" || \
|
$target == "fqltool-test" || \
|
||||||
$target == "long-test" || \
|
$target == "long-test" || \
|
||||||
|
|
@ -9191,7 +9607,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -9521,7 +9937,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -9742,7 +10158,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -9915,6 +10331,10 @@ workflows:
|
||||||
requires:
|
requires:
|
||||||
- start_j8_unit_tests
|
- start_j8_unit_tests
|
||||||
- j8_build
|
- j8_build
|
||||||
|
- j8_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j8_unit_tests
|
||||||
|
- j8_build
|
||||||
- start_j8_jvm_dtests:
|
- start_j8_jvm_dtests:
|
||||||
type: approval
|
type: approval
|
||||||
- j8_jvm_dtests:
|
- j8_jvm_dtests:
|
||||||
|
|
@ -9975,6 +10395,10 @@ workflows:
|
||||||
requires:
|
requires:
|
||||||
- start_j11_unit_tests
|
- start_j11_unit_tests
|
||||||
- j8_build
|
- j8_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j11_unit_tests
|
||||||
|
- j8_build
|
||||||
- start_j8_utests_long:
|
- start_j8_utests_long:
|
||||||
type: approval
|
type: approval
|
||||||
- j8_utests_long:
|
- j8_utests_long:
|
||||||
|
|
@ -10227,6 +10651,9 @@ workflows:
|
||||||
- j8_unit_tests:
|
- j8_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j8_build
|
- j8_build
|
||||||
|
- j8_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j8_build
|
||||||
- j8_simulator_dtests:
|
- j8_simulator_dtests:
|
||||||
requires:
|
requires:
|
||||||
- j8_build
|
- j8_build
|
||||||
|
|
@ -10257,6 +10684,9 @@ workflows:
|
||||||
- j11_unit_tests:
|
- j11_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j8_build
|
- j8_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j8_build
|
||||||
- start_utests_long:
|
- start_utests_long:
|
||||||
type: approval
|
type: approval
|
||||||
- j8_utests_long:
|
- j8_utests_long:
|
||||||
|
|
@ -10462,6 +10892,10 @@ workflows:
|
||||||
requires:
|
requires:
|
||||||
- start_j11_unit_tests
|
- start_j11_unit_tests
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j11_unit_tests
|
||||||
|
- j11_build
|
||||||
- start_j11_jvm_dtests:
|
- start_j11_jvm_dtests:
|
||||||
type: approval
|
type: approval
|
||||||
- j11_jvm_dtests:
|
- j11_jvm_dtests:
|
||||||
|
|
@ -10614,6 +11048,9 @@ workflows:
|
||||||
- j11_unit_tests:
|
- j11_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j11_build
|
||||||
- j11_jvm_dtests:
|
- j11_jvm_dtests:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
|
|
||||||
|
|
@ -170,7 +170,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -860,7 +860,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -1059,7 +1059,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -1265,7 +1265,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -1689,7 +1689,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -1818,6 +1818,7 @@ jobs:
|
||||||
$target == "test-cdc" || \
|
$target == "test-cdc" || \
|
||||||
$target == "test-compression" || \
|
$target == "test-compression" || \
|
||||||
$target == "test-trie" || \
|
$target == "test-trie" || \
|
||||||
|
$target == "test-oa" || \
|
||||||
$target == "test-system-keyspace-directory" || \
|
$target == "test-system-keyspace-directory" || \
|
||||||
$target == "fqltool-test" || \
|
$target == "fqltool-test" || \
|
||||||
$target == "long-test" || \
|
$target == "long-test" || \
|
||||||
|
|
@ -2494,7 +2495,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -2549,6 +2550,124 @@ jobs:
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- CASSANDRA_USE_JDK11: true
|
- CASSANDRA_USE_JDK11: true
|
||||||
|
j11_utests_oa:
|
||||||
|
docker:
|
||||||
|
- image: apache/cassandra-testing-ubuntu2004-java11: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-oa)
|
||||||
|
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-oa -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=unit -Dno-build-test=true
|
||||||
|
no_output_timeout: 15m
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/cassandra/build/test/output/
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_UPGRADE_DTESTS_COUNT: 25
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
- CASSANDRA_USE_JDK11: true
|
||||||
j8_cqlsh_dtests_py3_vnode:
|
j8_cqlsh_dtests_py3_vnode:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -3988,7 +4107,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -4587,7 +4706,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -4832,7 +4951,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -4921,7 +5040,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -5310,6 +5429,123 @@ jobs:
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- CASSANDRA_USE_JDK11: true
|
- CASSANDRA_USE_JDK11: true
|
||||||
|
j8_utests_oa:
|
||||||
|
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-oa)
|
||||||
|
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-oa -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=unit -Dno-build-test=true
|
||||||
|
no_output_timeout: 15m
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/cassandra/build/test/output/
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_UPGRADE_DTESTS_COUNT: 25
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
||||||
j8_simulator_dtests_repeat:
|
j8_simulator_dtests_repeat:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -5345,7 +5581,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_SIMULATOR_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-simulator-dtest\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-simulator-dtest $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_SIMULATOR_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-simulator-dtest\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-simulator-dtest $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -5543,7 +5779,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6108,7 +6344,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6629,7 +6865,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_UPGRADE_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_UPGRADE_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_UPGRADE_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_UPGRADE_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_UPGRADE_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_UPGRADE_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6827,7 +7063,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6917,7 +7153,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_SIMULATOR_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-simulator-dtest\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-simulator-dtest $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_SIMULATOR_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-simulator-dtest\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-simulator-dtest $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -7007,7 +7243,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -7206,7 +7442,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -7614,7 +7850,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -7776,6 +8012,95 @@ jobs:
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- CASSANDRA_USE_JDK11: true
|
- CASSANDRA_USE_JDK11: true
|
||||||
|
j8_utests_oa_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\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-oa\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-oa $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/stdout
|
||||||
|
destination: stdout
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_UPGRADE_DTESTS_COUNT: 25
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
||||||
j8_dtests:
|
j8_dtests:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -7860,6 +8185,96 @@ jobs:
|
||||||
- REPEATED_ANT_TEST_COUNT: 500
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64
|
||||||
|
j11_utests_oa_repeat:
|
||||||
|
docker:
|
||||||
|
- image: apache/cassandra-testing-ubuntu2004-java11: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\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-oa\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-oa $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/stdout
|
||||||
|
destination: stdout
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_UPGRADE_DTESTS: null
|
||||||
|
- REPEATED_UPGRADE_DTESTS_COUNT: 25
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
- CASSANDRA_USE_JDK11: true
|
||||||
j8_dtests_vnode:
|
j8_dtests_vnode:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -8042,7 +8457,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -8277,6 +8692,7 @@ jobs:
|
||||||
$target == "test-cdc" || \
|
$target == "test-cdc" || \
|
||||||
$target == "test-compression" || \
|
$target == "test-compression" || \
|
||||||
$target == "test-trie" || \
|
$target == "test-trie" || \
|
||||||
|
$target == "test-oa" || \
|
||||||
$target == "test-system-keyspace-directory" || \
|
$target == "test-system-keyspace-directory" || \
|
||||||
$target == "fqltool-test" || \
|
$target == "fqltool-test" || \
|
||||||
$target == "long-test" || \
|
$target == "long-test" || \
|
||||||
|
|
@ -9191,7 +9607,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -9521,7 +9937,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -9742,7 +10158,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -9915,6 +10331,10 @@ workflows:
|
||||||
requires:
|
requires:
|
||||||
- start_j8_unit_tests
|
- start_j8_unit_tests
|
||||||
- j8_build
|
- j8_build
|
||||||
|
- j8_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j8_unit_tests
|
||||||
|
- j8_build
|
||||||
- start_j8_jvm_dtests:
|
- start_j8_jvm_dtests:
|
||||||
type: approval
|
type: approval
|
||||||
- j8_jvm_dtests:
|
- j8_jvm_dtests:
|
||||||
|
|
@ -9975,6 +10395,10 @@ workflows:
|
||||||
requires:
|
requires:
|
||||||
- start_j11_unit_tests
|
- start_j11_unit_tests
|
||||||
- j8_build
|
- j8_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j11_unit_tests
|
||||||
|
- j8_build
|
||||||
- start_j8_utests_long:
|
- start_j8_utests_long:
|
||||||
type: approval
|
type: approval
|
||||||
- j8_utests_long:
|
- j8_utests_long:
|
||||||
|
|
@ -10227,6 +10651,9 @@ workflows:
|
||||||
- j8_unit_tests:
|
- j8_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j8_build
|
- j8_build
|
||||||
|
- j8_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j8_build
|
||||||
- j8_simulator_dtests:
|
- j8_simulator_dtests:
|
||||||
requires:
|
requires:
|
||||||
- j8_build
|
- j8_build
|
||||||
|
|
@ -10257,6 +10684,9 @@ workflows:
|
||||||
- j11_unit_tests:
|
- j11_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j8_build
|
- j8_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j8_build
|
||||||
- start_utests_long:
|
- start_utests_long:
|
||||||
type: approval
|
type: approval
|
||||||
- j8_utests_long:
|
- j8_utests_long:
|
||||||
|
|
@ -10462,6 +10892,10 @@ workflows:
|
||||||
requires:
|
requires:
|
||||||
- start_j11_unit_tests
|
- start_j11_unit_tests
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j11_unit_tests
|
||||||
|
- j11_build
|
||||||
- start_j11_jvm_dtests:
|
- start_j11_jvm_dtests:
|
||||||
type: approval
|
type: approval
|
||||||
- j11_jvm_dtests:
|
- j11_jvm_dtests:
|
||||||
|
|
@ -10614,6 +11048,9 @@ workflows:
|
||||||
- j11_unit_tests:
|
- j11_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j11_build
|
||||||
- j11_jvm_dtests:
|
- j11_jvm_dtests:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
|
|
||||||
|
|
@ -318,7 +318,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -403,7 +403,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -1491,7 +1491,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -1689,7 +1689,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -2477,7 +2477,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -2562,7 +2562,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -2612,6 +2612,119 @@ jobs:
|
||||||
- REPEATED_ANT_TEST_COUNT: 500
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
j17_utests_oa:
|
||||||
|
docker:
|
||||||
|
- image: apache/cassandra-testing-ubuntu2004-java11:latest
|
||||||
|
resource_class: medium
|
||||||
|
working_directory: ~/
|
||||||
|
shell: /bin/bash -eo pipefail -l
|
||||||
|
parallelism: 4
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- run:
|
||||||
|
name: Determine unit Tests to Run
|
||||||
|
command: |
|
||||||
|
# reminder: this code (along with all the steps) is independently executed on every circle container
|
||||||
|
# so the goal here is to get the circleci script to return the tests *this* container will run
|
||||||
|
# which we do via the `circleci` cli tool.
|
||||||
|
|
||||||
|
rm -fr ~/cassandra-dtest/upgrade_tests
|
||||||
|
echo "***java tests***"
|
||||||
|
|
||||||
|
# get all of our unit test filenames
|
||||||
|
set -eo pipefail && circleci tests glob "$HOME/cassandra/test/unit/**/*.java" > /tmp/all_java_unit_tests.txt
|
||||||
|
|
||||||
|
# split up the unit tests into groups based on the number of containers we have
|
||||||
|
set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt
|
||||||
|
set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/unit/;;g" | grep "Test\.java$" > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
|
||||||
|
echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt"
|
||||||
|
cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
|
||||||
|
no_output_timeout: 15m
|
||||||
|
- run:
|
||||||
|
name: Log Environment Information
|
||||||
|
command: |
|
||||||
|
echo '*** id ***'
|
||||||
|
id
|
||||||
|
echo '*** cat /proc/cpuinfo ***'
|
||||||
|
cat /proc/cpuinfo
|
||||||
|
echo '*** free -m ***'
|
||||||
|
free -m
|
||||||
|
echo '*** df -m ***'
|
||||||
|
df -m
|
||||||
|
echo '*** ifconfig -a ***'
|
||||||
|
ifconfig -a
|
||||||
|
echo '*** uname -a ***'
|
||||||
|
uname -a
|
||||||
|
echo '*** mount ***'
|
||||||
|
mount
|
||||||
|
echo '*** env ***'
|
||||||
|
env
|
||||||
|
echo '*** java ***'
|
||||||
|
which java
|
||||||
|
java -version
|
||||||
|
- run:
|
||||||
|
name: Run Unit Tests (testclasslist-oa)
|
||||||
|
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-oa -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=unit -Dno-build-test=true
|
||||||
|
no_output_timeout: 15m
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/cassandra/build/test/output/
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||||
j11_repeated_ant_test:
|
j11_repeated_ant_test:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -2686,6 +2799,7 @@ jobs:
|
||||||
$target == "test-cdc" || \
|
$target == "test-cdc" || \
|
||||||
$target == "test-compression" || \
|
$target == "test-compression" || \
|
||||||
$target == "test-trie" || \
|
$target == "test-trie" || \
|
||||||
|
$target == "test-oa" || \
|
||||||
$target == "test-system-keyspace-directory" || \
|
$target == "test-system-keyspace-directory" || \
|
||||||
$target == "fqltool-test" || \
|
$target == "fqltool-test" || \
|
||||||
$target == "long-test" || \
|
$target == "long-test" || \
|
||||||
|
|
@ -3342,7 +3456,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -3392,6 +3506,119 @@ jobs:
|
||||||
- REPEATED_ANT_TEST_COUNT: 500
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
j11_utests_oa:
|
||||||
|
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-oa)
|
||||||
|
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-oa -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=unit -Dno-build-test=true
|
||||||
|
no_output_timeout: 15m
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/cassandra/build/test/output/
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
j17_jvm_dtests:
|
j17_jvm_dtests:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11:latest
|
||||||
|
|
@ -3579,6 +3806,7 @@ jobs:
|
||||||
$target == "test-cdc" || \
|
$target == "test-cdc" || \
|
||||||
$target == "test-compression" || \
|
$target == "test-compression" || \
|
||||||
$target == "test-trie" || \
|
$target == "test-trie" || \
|
||||||
|
$target == "test-oa" || \
|
||||||
$target == "test-system-keyspace-directory" || \
|
$target == "test-system-keyspace-directory" || \
|
||||||
$target == "fqltool-test" || \
|
$target == "fqltool-test" || \
|
||||||
$target == "long-test" || \
|
$target == "long-test" || \
|
||||||
|
|
@ -4049,7 +4277,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -4509,7 +4737,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -4770,7 +4998,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -5198,7 +5426,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -5732,7 +5960,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6252,7 +6480,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6337,7 +6565,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_SIMULATOR_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-simulator-dtest\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-simulator-dtest $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_SIMULATOR_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-simulator-dtest\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-simulator-dtest $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6422,7 +6650,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -7274,7 +7502,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -7426,6 +7654,91 @@ jobs:
|
||||||
- REPEATED_ANT_TEST_COUNT: 500
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
j11_utests_oa_repeat:
|
||||||
|
docker:
|
||||||
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
resource_class: medium
|
||||||
|
working_directory: ~/
|
||||||
|
shell: /bin/bash -eo pipefail -l
|
||||||
|
parallelism: 4
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- run:
|
||||||
|
name: Log Environment Information
|
||||||
|
command: |
|
||||||
|
echo '*** id ***'
|
||||||
|
id
|
||||||
|
echo '*** cat /proc/cpuinfo ***'
|
||||||
|
cat /proc/cpuinfo
|
||||||
|
echo '*** free -m ***'
|
||||||
|
free -m
|
||||||
|
echo '*** df -m ***'
|
||||||
|
df -m
|
||||||
|
echo '*** ifconfig -a ***'
|
||||||
|
ifconfig -a
|
||||||
|
echo '*** uname -a ***'
|
||||||
|
uname -a
|
||||||
|
echo '*** mount ***'
|
||||||
|
mount
|
||||||
|
echo '*** env ***'
|
||||||
|
env
|
||||||
|
echo '*** java ***'
|
||||||
|
which java
|
||||||
|
java -version
|
||||||
|
- run:
|
||||||
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
|
no_output_timeout: 15m
|
||||||
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-oa\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-oa $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/stdout
|
||||||
|
destination: stdout
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
j11_cqlshlib_tests:
|
j11_cqlshlib_tests:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -7929,7 +8242,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -8094,7 +8407,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -8211,6 +8524,91 @@ jobs:
|
||||||
- REPEATED_ANT_TEST_COUNT: 500
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||||
|
j17_utests_oa_repeat:
|
||||||
|
docker:
|
||||||
|
- image: apache/cassandra-testing-ubuntu2004-java11:latest
|
||||||
|
resource_class: medium
|
||||||
|
working_directory: ~/
|
||||||
|
shell: /bin/bash -eo pipefail -l
|
||||||
|
parallelism: 4
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- run:
|
||||||
|
name: Log Environment Information
|
||||||
|
command: |
|
||||||
|
echo '*** id ***'
|
||||||
|
id
|
||||||
|
echo '*** cat /proc/cpuinfo ***'
|
||||||
|
cat /proc/cpuinfo
|
||||||
|
echo '*** free -m ***'
|
||||||
|
free -m
|
||||||
|
echo '*** df -m ***'
|
||||||
|
df -m
|
||||||
|
echo '*** ifconfig -a ***'
|
||||||
|
ifconfig -a
|
||||||
|
echo '*** uname -a ***'
|
||||||
|
uname -a
|
||||||
|
echo '*** mount ***'
|
||||||
|
mount
|
||||||
|
echo '*** env ***'
|
||||||
|
env
|
||||||
|
echo '*** java ***'
|
||||||
|
which java
|
||||||
|
java -version
|
||||||
|
- run:
|
||||||
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
|
no_output_timeout: 15m
|
||||||
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-oa\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-oa $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/stdout
|
||||||
|
destination: stdout
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||||
j11_dtests_vnode:
|
j11_dtests_vnode:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -8326,7 +8724,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -8641,7 +9039,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -8726,7 +9124,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -8791,6 +9189,10 @@ workflows:
|
||||||
requires:
|
requires:
|
||||||
- start_j11_unit_tests
|
- start_j11_unit_tests
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j11_unit_tests
|
||||||
|
- j11_build
|
||||||
- start_j11_jvm_dtests:
|
- start_j11_jvm_dtests:
|
||||||
type: approval
|
type: approval
|
||||||
- j11_jvm_dtests:
|
- j11_jvm_dtests:
|
||||||
|
|
@ -8851,6 +9253,10 @@ workflows:
|
||||||
requires:
|
requires:
|
||||||
- start_j17_unit_tests
|
- start_j17_unit_tests
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j17_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j17_unit_tests
|
||||||
|
- j11_build
|
||||||
- start_j11_utests_long:
|
- start_j11_utests_long:
|
||||||
type: approval
|
type: approval
|
||||||
- j11_utests_long:
|
- j11_utests_long:
|
||||||
|
|
@ -9085,6 +9491,9 @@ workflows:
|
||||||
- j11_unit_tests:
|
- j11_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j11_build
|
||||||
- j11_simulator_dtests:
|
- j11_simulator_dtests:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
|
@ -9115,6 +9524,9 @@ workflows:
|
||||||
- j17_unit_tests:
|
- j17_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j17_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j11_build
|
||||||
- start_utests_long:
|
- start_utests_long:
|
||||||
type: approval
|
type: approval
|
||||||
- j11_utests_long:
|
- j11_utests_long:
|
||||||
|
|
@ -9305,6 +9717,10 @@ workflows:
|
||||||
requires:
|
requires:
|
||||||
- start_j17_unit_tests
|
- start_j17_unit_tests
|
||||||
- j17_build
|
- j17_build
|
||||||
|
- j17_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j17_unit_tests
|
||||||
|
- j17_build
|
||||||
- start_j17_jvm_dtests:
|
- start_j17_jvm_dtests:
|
||||||
type: approval
|
type: approval
|
||||||
- j17_jvm_dtests:
|
- j17_jvm_dtests:
|
||||||
|
|
@ -9451,6 +9867,9 @@ workflows:
|
||||||
- j17_unit_tests:
|
- j17_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j17_build
|
- j17_build
|
||||||
|
- j17_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j17_build
|
||||||
- j17_jvm_dtests:
|
- j17_jvm_dtests:
|
||||||
requires:
|
requires:
|
||||||
- j17_build
|
- j17_build
|
||||||
|
|
|
||||||
|
|
@ -318,7 +318,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -403,7 +403,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -1491,7 +1491,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -1689,7 +1689,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -2477,7 +2477,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -2562,7 +2562,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -2612,6 +2612,119 @@ jobs:
|
||||||
- REPEATED_ANT_TEST_COUNT: 500
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
j17_utests_oa:
|
||||||
|
docker:
|
||||||
|
- image: apache/cassandra-testing-ubuntu2004-java11:latest
|
||||||
|
resource_class: medium
|
||||||
|
working_directory: ~/
|
||||||
|
shell: /bin/bash -eo pipefail -l
|
||||||
|
parallelism: 4
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- run:
|
||||||
|
name: Determine unit Tests to Run
|
||||||
|
command: |
|
||||||
|
# reminder: this code (along with all the steps) is independently executed on every circle container
|
||||||
|
# so the goal here is to get the circleci script to return the tests *this* container will run
|
||||||
|
# which we do via the `circleci` cli tool.
|
||||||
|
|
||||||
|
rm -fr ~/cassandra-dtest/upgrade_tests
|
||||||
|
echo "***java tests***"
|
||||||
|
|
||||||
|
# get all of our unit test filenames
|
||||||
|
set -eo pipefail && circleci tests glob "$HOME/cassandra/test/unit/**/*.java" > /tmp/all_java_unit_tests.txt
|
||||||
|
|
||||||
|
# split up the unit tests into groups based on the number of containers we have
|
||||||
|
set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt
|
||||||
|
set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/unit/;;g" | grep "Test\.java$" > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
|
||||||
|
echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt"
|
||||||
|
cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt
|
||||||
|
no_output_timeout: 15m
|
||||||
|
- run:
|
||||||
|
name: Log Environment Information
|
||||||
|
command: |
|
||||||
|
echo '*** id ***'
|
||||||
|
id
|
||||||
|
echo '*** cat /proc/cpuinfo ***'
|
||||||
|
cat /proc/cpuinfo
|
||||||
|
echo '*** free -m ***'
|
||||||
|
free -m
|
||||||
|
echo '*** df -m ***'
|
||||||
|
df -m
|
||||||
|
echo '*** ifconfig -a ***'
|
||||||
|
ifconfig -a
|
||||||
|
echo '*** uname -a ***'
|
||||||
|
uname -a
|
||||||
|
echo '*** mount ***'
|
||||||
|
mount
|
||||||
|
echo '*** env ***'
|
||||||
|
env
|
||||||
|
echo '*** java ***'
|
||||||
|
which java
|
||||||
|
java -version
|
||||||
|
- run:
|
||||||
|
name: Run Unit Tests (testclasslist-oa)
|
||||||
|
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-oa -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=unit -Dno-build-test=true
|
||||||
|
no_output_timeout: 15m
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/cassandra/build/test/output/
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||||
j11_repeated_ant_test:
|
j11_repeated_ant_test:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -2686,6 +2799,7 @@ jobs:
|
||||||
$target == "test-cdc" || \
|
$target == "test-cdc" || \
|
||||||
$target == "test-compression" || \
|
$target == "test-compression" || \
|
||||||
$target == "test-trie" || \
|
$target == "test-trie" || \
|
||||||
|
$target == "test-oa" || \
|
||||||
$target == "test-system-keyspace-directory" || \
|
$target == "test-system-keyspace-directory" || \
|
||||||
$target == "fqltool-test" || \
|
$target == "fqltool-test" || \
|
||||||
$target == "long-test" || \
|
$target == "long-test" || \
|
||||||
|
|
@ -3342,7 +3456,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -3392,6 +3506,119 @@ jobs:
|
||||||
- REPEATED_ANT_TEST_COUNT: 500
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
j11_utests_oa:
|
||||||
|
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-oa)
|
||||||
|
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-oa -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=unit -Dno-build-test=true
|
||||||
|
no_output_timeout: 15m
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/cassandra/build/test/output/
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
j17_jvm_dtests:
|
j17_jvm_dtests:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11:latest
|
||||||
|
|
@ -3579,6 +3806,7 @@ jobs:
|
||||||
$target == "test-cdc" || \
|
$target == "test-cdc" || \
|
||||||
$target == "test-compression" || \
|
$target == "test-compression" || \
|
||||||
$target == "test-trie" || \
|
$target == "test-trie" || \
|
||||||
|
$target == "test-oa" || \
|
||||||
$target == "test-system-keyspace-directory" || \
|
$target == "test-system-keyspace-directory" || \
|
||||||
$target == "fqltool-test" || \
|
$target == "fqltool-test" || \
|
||||||
$target == "long-test" || \
|
$target == "long-test" || \
|
||||||
|
|
@ -4049,7 +4277,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -4509,7 +4737,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -4770,7 +4998,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -5198,7 +5426,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -5732,7 +5960,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6252,7 +6480,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6337,7 +6565,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_SIMULATOR_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-simulator-dtest\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-simulator-dtest $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_SIMULATOR_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-simulator-dtest\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-simulator-dtest $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6422,7 +6650,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -7274,7 +7502,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -7426,6 +7654,91 @@ jobs:
|
||||||
- REPEATED_ANT_TEST_COUNT: 500
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
j11_utests_oa_repeat:
|
||||||
|
docker:
|
||||||
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
resource_class: medium
|
||||||
|
working_directory: ~/
|
||||||
|
shell: /bin/bash -eo pipefail -l
|
||||||
|
parallelism: 4
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- run:
|
||||||
|
name: Log Environment Information
|
||||||
|
command: |
|
||||||
|
echo '*** id ***'
|
||||||
|
id
|
||||||
|
echo '*** cat /proc/cpuinfo ***'
|
||||||
|
cat /proc/cpuinfo
|
||||||
|
echo '*** free -m ***'
|
||||||
|
free -m
|
||||||
|
echo '*** df -m ***'
|
||||||
|
df -m
|
||||||
|
echo '*** ifconfig -a ***'
|
||||||
|
ifconfig -a
|
||||||
|
echo '*** uname -a ***'
|
||||||
|
uname -a
|
||||||
|
echo '*** mount ***'
|
||||||
|
mount
|
||||||
|
echo '*** env ***'
|
||||||
|
env
|
||||||
|
echo '*** java ***'
|
||||||
|
which java
|
||||||
|
java -version
|
||||||
|
- run:
|
||||||
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
|
no_output_timeout: 15m
|
||||||
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-oa\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-oa $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/stdout
|
||||||
|
destination: stdout
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
j11_cqlshlib_tests:
|
j11_cqlshlib_tests:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -7929,7 +8242,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -8094,7 +8407,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -8211,6 +8524,91 @@ jobs:
|
||||||
- REPEATED_ANT_TEST_COUNT: 500
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||||
|
j17_utests_oa_repeat:
|
||||||
|
docker:
|
||||||
|
- image: apache/cassandra-testing-ubuntu2004-java11:latest
|
||||||
|
resource_class: medium
|
||||||
|
working_directory: ~/
|
||||||
|
shell: /bin/bash -eo pipefail -l
|
||||||
|
parallelism: 4
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- run:
|
||||||
|
name: Log Environment Information
|
||||||
|
command: |
|
||||||
|
echo '*** id ***'
|
||||||
|
id
|
||||||
|
echo '*** cat /proc/cpuinfo ***'
|
||||||
|
cat /proc/cpuinfo
|
||||||
|
echo '*** free -m ***'
|
||||||
|
free -m
|
||||||
|
echo '*** df -m ***'
|
||||||
|
df -m
|
||||||
|
echo '*** ifconfig -a ***'
|
||||||
|
ifconfig -a
|
||||||
|
echo '*** uname -a ***'
|
||||||
|
uname -a
|
||||||
|
echo '*** mount ***'
|
||||||
|
mount
|
||||||
|
echo '*** env ***'
|
||||||
|
env
|
||||||
|
echo '*** java ***'
|
||||||
|
which java
|
||||||
|
java -version
|
||||||
|
- run:
|
||||||
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
|
no_output_timeout: 15m
|
||||||
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-oa\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-oa $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/stdout
|
||||||
|
destination: stdout
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||||
j11_dtests_vnode:
|
j11_dtests_vnode:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -8326,7 +8724,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -8641,7 +9039,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -8726,7 +9124,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -8791,6 +9189,10 @@ workflows:
|
||||||
requires:
|
requires:
|
||||||
- start_j11_unit_tests
|
- start_j11_unit_tests
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j11_unit_tests
|
||||||
|
- j11_build
|
||||||
- start_j11_jvm_dtests:
|
- start_j11_jvm_dtests:
|
||||||
type: approval
|
type: approval
|
||||||
- j11_jvm_dtests:
|
- j11_jvm_dtests:
|
||||||
|
|
@ -8851,6 +9253,10 @@ workflows:
|
||||||
requires:
|
requires:
|
||||||
- start_j17_unit_tests
|
- start_j17_unit_tests
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j17_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j17_unit_tests
|
||||||
|
- j11_build
|
||||||
- start_j11_utests_long:
|
- start_j11_utests_long:
|
||||||
type: approval
|
type: approval
|
||||||
- j11_utests_long:
|
- j11_utests_long:
|
||||||
|
|
@ -9085,6 +9491,9 @@ workflows:
|
||||||
- j11_unit_tests:
|
- j11_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j11_build
|
||||||
- j11_simulator_dtests:
|
- j11_simulator_dtests:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
|
@ -9115,6 +9524,9 @@ workflows:
|
||||||
- j17_unit_tests:
|
- j17_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j17_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j11_build
|
||||||
- start_utests_long:
|
- start_utests_long:
|
||||||
type: approval
|
type: approval
|
||||||
- j11_utests_long:
|
- j11_utests_long:
|
||||||
|
|
@ -9305,6 +9717,10 @@ workflows:
|
||||||
requires:
|
requires:
|
||||||
- start_j17_unit_tests
|
- start_j17_unit_tests
|
||||||
- j17_build
|
- j17_build
|
||||||
|
- j17_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j17_unit_tests
|
||||||
|
- j17_build
|
||||||
- start_j17_jvm_dtests:
|
- start_j17_jvm_dtests:
|
||||||
type: approval
|
type: approval
|
||||||
- j17_jvm_dtests:
|
- j17_jvm_dtests:
|
||||||
|
|
@ -9451,6 +9867,9 @@ workflows:
|
||||||
- j17_unit_tests:
|
- j17_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j17_build
|
- j17_build
|
||||||
|
- j17_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j17_build
|
||||||
- j17_jvm_dtests:
|
- j17_jvm_dtests:
|
||||||
requires:
|
requires:
|
||||||
- j17_build
|
- j17_build
|
||||||
|
|
|
||||||
|
|
@ -318,7 +318,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -403,7 +403,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -1491,7 +1491,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -1689,7 +1689,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -2477,7 +2477,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_STRESS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_STRESS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_STRESS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=stress-test-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant stress-test-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -2562,7 +2562,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -2612,6 +2612,119 @@ jobs:
|
||||||
- REPEATED_ANT_TEST_COUNT: 500
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
j17_utests_oa:
|
||||||
|
docker:
|
||||||
|
- image: apache/cassandra-testing-ubuntu2004-java11: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-oa)
|
||||||
|
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-oa -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=unit -Dno-build-test=true
|
||||||
|
no_output_timeout: 15m
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/cassandra/build/test/output/
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||||
j11_repeated_ant_test:
|
j11_repeated_ant_test:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -2686,6 +2799,7 @@ jobs:
|
||||||
$target == "test-cdc" || \
|
$target == "test-cdc" || \
|
||||||
$target == "test-compression" || \
|
$target == "test-compression" || \
|
||||||
$target == "test-trie" || \
|
$target == "test-trie" || \
|
||||||
|
$target == "test-oa" || \
|
||||||
$target == "test-system-keyspace-directory" || \
|
$target == "test-system-keyspace-directory" || \
|
||||||
$target == "fqltool-test" || \
|
$target == "fqltool-test" || \
|
||||||
$target == "long-test" || \
|
$target == "long-test" || \
|
||||||
|
|
@ -3342,7 +3456,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-system-keyspace-directory\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-system-keyspace-directory $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -3392,6 +3506,119 @@ jobs:
|
||||||
- REPEATED_ANT_TEST_COUNT: 500
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
j11_utests_oa:
|
||||||
|
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-oa)
|
||||||
|
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-oa -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=unit -Dno-build-test=true
|
||||||
|
no_output_timeout: 15m
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/cassandra/build/test/output/
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/cassandra/build/test/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
j17_jvm_dtests:
|
j17_jvm_dtests:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11:latest
|
||||||
|
|
@ -3579,6 +3806,7 @@ jobs:
|
||||||
$target == "test-cdc" || \
|
$target == "test-cdc" || \
|
||||||
$target == "test-compression" || \
|
$target == "test-compression" || \
|
||||||
$target == "test-trie" || \
|
$target == "test-trie" || \
|
||||||
|
$target == "test-oa" || \
|
||||||
$target == "test-system-keyspace-directory" || \
|
$target == "test-system-keyspace-directory" || \
|
||||||
$target == "fqltool-test" || \
|
$target == "fqltool-test" || \
|
||||||
$target == "long-test" || \
|
$target == "long-test" || \
|
||||||
|
|
@ -4049,7 +4277,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -4509,7 +4737,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -4770,7 +4998,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-cdc\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-cdc $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -5198,7 +5426,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -5732,7 +5960,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-compression\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-compression $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6252,7 +6480,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-trie\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-trie $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6337,7 +6565,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_SIMULATOR_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-simulator-dtest\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-simulator-dtest $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_SIMULATOR_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_SIMULATOR_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_SIMULATOR_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-simulator-dtest\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-simulator-dtest $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -6422,7 +6650,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -7274,7 +7502,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=true\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -7426,6 +7654,91 @@ jobs:
|
||||||
- REPEATED_ANT_TEST_COUNT: 500
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
j11_utests_oa_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\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-oa\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-oa $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/stdout
|
||||||
|
destination: stdout
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-11-openjdk-amd64
|
||||||
j11_cqlshlib_tests:
|
j11_cqlshlib_tests:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -7929,7 +8242,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_FQLTOOL_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_FQLTOOL_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_FQLTOOL} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=fqltool-test\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant fqltool-test $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -8094,7 +8407,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -8211,6 +8524,91 @@ jobs:
|
||||||
- REPEATED_ANT_TEST_COUNT: 500
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
- JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
- JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||||
- JDK_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
- JDK_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||||
|
j17_utests_oa_repeat:
|
||||||
|
docker:
|
||||||
|
- image: apache/cassandra-testing-ubuntu2004-java11: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\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-oa\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-oa $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
|
- store_test_results:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/stdout
|
||||||
|
destination: stdout
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/output
|
||||||
|
destination: junitxml
|
||||||
|
- store_artifacts:
|
||||||
|
path: /tmp/results/repeated_utests/logs
|
||||||
|
destination: logs
|
||||||
|
environment:
|
||||||
|
- ANT_HOME: /usr/share/ant
|
||||||
|
- LANG: en_US.UTF-8
|
||||||
|
- KEEP_TEST_DIR: true
|
||||||
|
- DEFAULT_DIR: /home/cassandra/cassandra-dtest
|
||||||
|
- PYTHONIOENCODING: utf-8
|
||||||
|
- PYTHONUNBUFFERED: true
|
||||||
|
- CASS_DRIVER_NO_EXTENSIONS: true
|
||||||
|
- CASS_DRIVER_NO_CYTHON: true
|
||||||
|
- CASSANDRA_SKIP_SYNC: true
|
||||||
|
- DTEST_REPO: https://github.com/apache/cassandra-dtest.git
|
||||||
|
- DTEST_BRANCH: trunk
|
||||||
|
- CCM_MAX_HEAP_SIZE: 1024M
|
||||||
|
- CCM_HEAP_NEWSIZE: 256M
|
||||||
|
- REPEATED_TESTS_STOP_ON_FAILURE: false
|
||||||
|
- REPEATED_UTESTS: null
|
||||||
|
- REPEATED_UTESTS_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_FQLTOOL: null
|
||||||
|
- REPEATED_UTESTS_FQLTOOL_COUNT: 500
|
||||||
|
- REPEATED_UTESTS_LONG: null
|
||||||
|
- REPEATED_UTESTS_LONG_COUNT: 100
|
||||||
|
- REPEATED_UTESTS_STRESS: null
|
||||||
|
- REPEATED_UTESTS_STRESS_COUNT: 500
|
||||||
|
- REPEATED_SIMULATOR_DTESTS: null
|
||||||
|
- REPEATED_SIMULATOR_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_JVM_DTESTS: null
|
||||||
|
- REPEATED_JVM_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_DTESTS: null
|
||||||
|
- REPEATED_DTESTS_COUNT: 500
|
||||||
|
- REPEATED_LARGE_DTESTS: null
|
||||||
|
- REPEATED_LARGE_DTESTS_COUNT: 100
|
||||||
|
- REPEATED_ANT_TEST_TARGET: testsome
|
||||||
|
- REPEATED_ANT_TEST_CLASS: null
|
||||||
|
- REPEATED_ANT_TEST_METHODS: null
|
||||||
|
- REPEATED_ANT_TEST_VNODES: false
|
||||||
|
- REPEATED_ANT_TEST_COUNT: 500
|
||||||
|
- JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||||
|
- JDK_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||||
j11_dtests_vnode:
|
j11_dtests_vnode:
|
||||||
docker:
|
docker:
|
||||||
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
|
||||||
|
|
@ -8326,7 +8724,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_JVM_DTESTS} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=test-jvm-dtest-some\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant test-jvm-dtest-some $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -8641,7 +9039,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -8726,7 +9124,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Repeatedly run new or modifed JUnit tests
|
name: Repeatedly run new or modifed JUnit tests
|
||||||
no_output_timeout: 15m
|
no_output_timeout: 15m
|
||||||
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
command: "set -x\nexport PATH=$JAVA_HOME/bin:$PATH\ntime mv ~/cassandra /tmp\ncd /tmp/cassandra\nif [ -d ~/dtest_jars ]; then\n cp ~/dtest_jars/dtest* /tmp/cassandra/build/\nfi\n\n# Calculate the number of test iterations to be run by the current parallel runner.\ncount=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL))\nif (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then\n count=$((count+1))\nfi\n\n# Put manually specified tests and automatically detected tests together, removing duplicates\ntests=$(echo ${REPEATED_UTESTS_LONG} | sed -e \"s/<nil>//\" | sed -e \"s/ //\" | tr \",\" \"\\n\" | tr \" \" \"\\n\" | sort -n | uniq -u)\necho \"Tests to be repeated: ${tests}\"\n\n# Prepare the JVM dtests vnodes argument, which is optional.\nvnodes=false\nvnodes_args=\"\"\nif [ \"$vnodes\" = true ] ; then\n vnodes_args=\"-Dtest.jvm.args='-Dcassandra.dtest.num_tokens=16'\"\nfi\n\n# Prepare the testtag for the target, used by the test macro in build.xml to group the output files\ntarget=long-testsome\ntesttag=\"\"\nif [[ $target == \"test-cdc\" ]]; then\n testtag=\"cdc\"\nelif [[ $target == \"test-compression\" ]]; then\n testtag=\"compression\"\nelif [[ $target == \"test-system-keyspace-directory\" ]]; then\n testtag=\"system_keyspace_directory\"\nelif [[ $target == \"test-trie\" ]]; then\n testtag=\"trie\"\nelif [[ $target == \"test-oa\" ]]; then\n testtag=\"oa\"\nfi\n\n# Run each test class as many times as requested.\nexit_code=\"$?\"\nfor test in $tests; do\n\n # Split class and method names from the test name\n if [[ $test =~ \"#\" ]]; then\n class=${test%\"#\"*}\n method=${test#*\"#\"}\n else\n class=$test\n method=\"\"\n fi\n\n # Prepare the -Dtest.name argument.\n # It can be the fully qualified class name or the short class name, depending on the target.\n if [[ $target == \"test\" || \\\n $target == \"test-cdc\" || \\\n $target == \"test-compression\" || \\\n $target == \"test-trie\" || \\\n $target == \"test-oa\" || \\\n $target == \"test-system-keyspace-directory\" || \\\n $target == \"fqltool-test\" || \\\n $target == \"long-test\" || \\\n $target == \"stress-test\" || \\\n $target == \"test-simulator-dtest\" ]]; then\n name_arg=\"-Dtest.name=${class##*.}\"\n else\n name_arg=\"-Dtest.name=$class\"\n fi\n\n # Prepare the -Dtest.methods argument, which is optional\n if [[ $method == \"\" ]]; then\n methods_arg=\"\"\n else\n methods_arg=\"-Dtest.methods=$method\"\n fi\n\n for i in $(seq -w 1 $count); do\n echo \"Running test $test, iteration $i of $count\"\n\n # run the test\n status=\"passes\"\n if !( set -o pipefail && \\\n ant long-testsome $name_arg $methods_arg $vnodes_args -Dno-build-test=true | \\\n tee stdout.txt \\\n ); then\n status=\"fails\"\n exit_code=1\n fi\n\n # move the stdout output file\n dest=/tmp/results/repeated_utests/stdout/${status}/${i}\n mkdir -p $dest\n mv stdout.txt $dest/${test}.txt\n\n # move the XML output files\n source=build/test/output/${testtag}\n dest=/tmp/results/repeated_utests/output/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n\n # move the log files\n source=build/test/logs/${testtag}\n dest=/tmp/results/repeated_utests/logs/${status}/${i}\n mkdir -p $dest\n if [[ -d $source && -n \"$(ls $source)\" ]]; then\n mv $source/* $dest/\n fi\n \n # maybe stop iterations on test failure\n if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then\n break\n fi\n done\ndone\n(exit ${exit_code})\n"
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: /tmp/results/repeated_utests/output
|
path: /tmp/results/repeated_utests/output
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
@ -8791,6 +9189,10 @@ workflows:
|
||||||
requires:
|
requires:
|
||||||
- start_j11_unit_tests
|
- start_j11_unit_tests
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j11_unit_tests
|
||||||
|
- j11_build
|
||||||
- start_j11_jvm_dtests:
|
- start_j11_jvm_dtests:
|
||||||
type: approval
|
type: approval
|
||||||
- j11_jvm_dtests:
|
- j11_jvm_dtests:
|
||||||
|
|
@ -8851,6 +9253,10 @@ workflows:
|
||||||
requires:
|
requires:
|
||||||
- start_j17_unit_tests
|
- start_j17_unit_tests
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j17_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j17_unit_tests
|
||||||
|
- j11_build
|
||||||
- start_j11_utests_long:
|
- start_j11_utests_long:
|
||||||
type: approval
|
type: approval
|
||||||
- j11_utests_long:
|
- j11_utests_long:
|
||||||
|
|
@ -9085,6 +9491,9 @@ workflows:
|
||||||
- j11_unit_tests:
|
- j11_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j11_build
|
||||||
- j11_simulator_dtests:
|
- j11_simulator_dtests:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
|
@ -9115,6 +9524,9 @@ workflows:
|
||||||
- j17_unit_tests:
|
- j17_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j17_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j11_build
|
||||||
- start_utests_long:
|
- start_utests_long:
|
||||||
type: approval
|
type: approval
|
||||||
- j11_utests_long:
|
- j11_utests_long:
|
||||||
|
|
@ -9305,6 +9717,10 @@ workflows:
|
||||||
requires:
|
requires:
|
||||||
- start_j17_unit_tests
|
- start_j17_unit_tests
|
||||||
- j17_build
|
- j17_build
|
||||||
|
- j17_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j17_unit_tests
|
||||||
|
- j17_build
|
||||||
- start_j17_jvm_dtests:
|
- start_j17_jvm_dtests:
|
||||||
type: approval
|
type: approval
|
||||||
- j17_jvm_dtests:
|
- j17_jvm_dtests:
|
||||||
|
|
@ -9451,6 +9867,9 @@ workflows:
|
||||||
- j17_unit_tests:
|
- j17_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j17_build
|
- j17_build
|
||||||
|
- j17_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j17_build
|
||||||
- j17_jvm_dtests:
|
- j17_jvm_dtests:
|
||||||
requires:
|
requires:
|
||||||
- j17_build
|
- j17_build
|
||||||
|
|
|
||||||
|
|
@ -135,6 +135,7 @@ default_env_vars: &default_env_vars
|
||||||
# REPEATED_ANT_TEST_TARGET: test-cdc
|
# REPEATED_ANT_TEST_TARGET: test-cdc
|
||||||
# REPEATED_ANT_TEST_TARGET: test-compression
|
# REPEATED_ANT_TEST_TARGET: test-compression
|
||||||
# REPEATED_ANT_TEST_TARGET: test-trie
|
# REPEATED_ANT_TEST_TARGET: test-trie
|
||||||
|
# REPEATED_ANT_TEST_TARGET: test-oa
|
||||||
# REPEATED_ANT_TEST_TARGET: test-system-keyspace-directory
|
# REPEATED_ANT_TEST_TARGET: test-system-keyspace-directory
|
||||||
REPEATED_ANT_TEST_TARGET: testsome
|
REPEATED_ANT_TEST_TARGET: testsome
|
||||||
# The name of JUnit class to be run multiple times, for example:
|
# The name of JUnit class to be run multiple times, for example:
|
||||||
|
|
@ -257,6 +258,22 @@ j8_separate_jobs: &j8_separate_jobs
|
||||||
requires:
|
requires:
|
||||||
- start_j8_unit_tests
|
- start_j8_unit_tests
|
||||||
- j8_build
|
- j8_build
|
||||||
|
- j8_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j8_unit_tests
|
||||||
|
- j8_build
|
||||||
|
- start_j8_utests_oa_repeat:
|
||||||
|
type: approval
|
||||||
|
- j8_utests_oa_repeat:
|
||||||
|
requires:
|
||||||
|
- start_j8_utests_oa_repeat
|
||||||
|
- j8_build
|
||||||
|
- start_j11_utests_oa_repeat:
|
||||||
|
type: approval
|
||||||
|
- j11_utests_oa_repeat:
|
||||||
|
requires:
|
||||||
|
- start_j11_utests_oa_repeat
|
||||||
|
- j8_build
|
||||||
- start_j8_unit_tests_repeat:
|
- start_j8_unit_tests_repeat:
|
||||||
type: approval
|
type: approval
|
||||||
- j8_unit_tests_repeat:
|
- j8_unit_tests_repeat:
|
||||||
|
|
@ -354,6 +371,10 @@ j8_separate_jobs: &j8_separate_jobs
|
||||||
requires:
|
requires:
|
||||||
- start_j11_unit_tests
|
- start_j11_unit_tests
|
||||||
- j8_build
|
- j8_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j11_unit_tests
|
||||||
|
- j8_build
|
||||||
- start_j11_unit_tests_repeat:
|
- start_j11_unit_tests_repeat:
|
||||||
type: approval
|
type: approval
|
||||||
- j11_unit_tests_repeat:
|
- j11_unit_tests_repeat:
|
||||||
|
|
@ -798,6 +819,15 @@ j8_pre-commit_jobs: &j8_pre-commit_jobs
|
||||||
- j8_unit_tests:
|
- j8_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j8_build
|
- j8_build
|
||||||
|
- j8_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j8_build
|
||||||
|
- j8_utests_oa_repeat:
|
||||||
|
requires:
|
||||||
|
- j8_build
|
||||||
|
- j11_utests_oa_repeat:
|
||||||
|
requires:
|
||||||
|
- j8_build
|
||||||
- j8_unit_tests_repeat:
|
- j8_unit_tests_repeat:
|
||||||
requires:
|
requires:
|
||||||
- j8_build
|
- j8_build
|
||||||
|
|
@ -847,6 +877,9 @@ j8_pre-commit_jobs: &j8_pre-commit_jobs
|
||||||
- j11_unit_tests:
|
- j11_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j8_build
|
- j8_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j8_build
|
||||||
- j11_unit_tests_repeat:
|
- j11_unit_tests_repeat:
|
||||||
requires:
|
requires:
|
||||||
- j8_build
|
- j8_build
|
||||||
|
|
@ -1164,6 +1197,16 @@ j11_separate_jobs: &j11_separate_jobs
|
||||||
requires:
|
requires:
|
||||||
- start_j11_unit_tests
|
- start_j11_unit_tests
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j11_unit_tests
|
||||||
|
- j11_build
|
||||||
|
- start_j11_utests_oa_repeat:
|
||||||
|
type: approval
|
||||||
|
- j11_utests_oa_repeat:
|
||||||
|
requires:
|
||||||
|
- start_j11_utests_oa_repeat
|
||||||
|
- j11_build
|
||||||
- start_j11_unit_tests_repeat:
|
- start_j11_unit_tests_repeat:
|
||||||
type: approval
|
type: approval
|
||||||
- j11_unit_tests_repeat:
|
- j11_unit_tests_repeat:
|
||||||
|
|
@ -1423,6 +1466,12 @@ j11_pre-commit_jobs: &j11_pre-commit_jobs
|
||||||
- j11_unit_tests:
|
- j11_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j11_build
|
||||||
|
- j11_utests_oa_repeat:
|
||||||
|
requires:
|
||||||
|
- j11_build
|
||||||
- j11_unit_tests_repeat:
|
- j11_unit_tests_repeat:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
|
@ -1678,6 +1727,16 @@ jobs:
|
||||||
- log_environment
|
- log_environment
|
||||||
- run_parallel_junit_tests
|
- run_parallel_junit_tests
|
||||||
|
|
||||||
|
j8_utests_oa:
|
||||||
|
<<: *j8_par_executor
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- create_junit_containers
|
||||||
|
- log_environment
|
||||||
|
- run_parallel_junit_tests:
|
||||||
|
target: "testclasslist-oa"
|
||||||
|
|
||||||
j8_simulator_dtests:
|
j8_simulator_dtests:
|
||||||
<<: *j8_small_executor
|
<<: *j8_small_executor
|
||||||
steps:
|
steps:
|
||||||
|
|
@ -1772,6 +1831,16 @@ jobs:
|
||||||
- log_environment
|
- log_environment
|
||||||
- run_parallel_junit_tests
|
- run_parallel_junit_tests
|
||||||
|
|
||||||
|
j11_utests_oa:
|
||||||
|
<<: *j11_par_executor
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- create_junit_containers
|
||||||
|
- log_environment
|
||||||
|
- run_parallel_junit_tests:
|
||||||
|
target: "testclasslist-oa"
|
||||||
|
|
||||||
j8_cqlshlib_tests:
|
j8_cqlshlib_tests:
|
||||||
<<: *j8_small_executor
|
<<: *j8_small_executor
|
||||||
steps:
|
steps:
|
||||||
|
|
@ -2454,6 +2523,22 @@ jobs:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
- log_environment
|
- log_environment
|
||||||
- run_utests_trie_repeat
|
- run_utests_trie_repeat
|
||||||
|
|
||||||
|
j8_utests_oa_repeat:
|
||||||
|
<<: *j8_repeated_utest_executor
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- log_environment
|
||||||
|
- run_utests_oa_repeat
|
||||||
|
|
||||||
|
j11_utests_oa_repeat:
|
||||||
|
<<: *j11_repeated_utest_executor
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- log_environment
|
||||||
|
- run_utests_oa_repeat
|
||||||
|
|
||||||
j8_utests_system_keyspace_directory_repeat:
|
j8_utests_system_keyspace_directory_repeat:
|
||||||
<<: *j8_repeated_utest_executor
|
<<: *j8_repeated_utest_executor
|
||||||
|
|
@ -3194,6 +3279,14 @@ commands:
|
||||||
tests: ${REPEATED_UTESTS}
|
tests: ${REPEATED_UTESTS}
|
||||||
count: ${REPEATED_UTESTS_COUNT}
|
count: ${REPEATED_UTESTS_COUNT}
|
||||||
stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
|
stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
|
||||||
|
|
||||||
|
run_utests_oa_repeat:
|
||||||
|
steps:
|
||||||
|
- run_repeated_utests:
|
||||||
|
target: test-oa
|
||||||
|
tests: ${REPEATED_UTESTS}
|
||||||
|
count: ${REPEATED_UTESTS_COUNT}
|
||||||
|
stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
|
||||||
|
|
||||||
run_utests_system_keyspace_directory_repeat:
|
run_utests_system_keyspace_directory_repeat:
|
||||||
steps:
|
steps:
|
||||||
|
|
@ -3316,6 +3409,8 @@ commands:
|
||||||
testtag="system_keyspace_directory"
|
testtag="system_keyspace_directory"
|
||||||
elif [[ $target == "test-trie" ]]; then
|
elif [[ $target == "test-trie" ]]; then
|
||||||
testtag="trie"
|
testtag="trie"
|
||||||
|
elif [[ $target == "test-oa" ]]; then
|
||||||
|
testtag="oa"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Run each test class as many times as requested.
|
# Run each test class as many times as requested.
|
||||||
|
|
@ -3337,6 +3432,7 @@ commands:
|
||||||
$target == "test-cdc" || \
|
$target == "test-cdc" || \
|
||||||
$target == "test-compression" || \
|
$target == "test-compression" || \
|
||||||
$target == "test-trie" || \
|
$target == "test-trie" || \
|
||||||
|
$target == "test-oa" || \
|
||||||
$target == "test-system-keyspace-directory" || \
|
$target == "test-system-keyspace-directory" || \
|
||||||
$target == "fqltool-test" || \
|
$target == "fqltool-test" || \
|
||||||
$target == "long-test" || \
|
$target == "long-test" || \
|
||||||
|
|
@ -3464,6 +3560,7 @@ commands:
|
||||||
$target == "test-cdc" || \
|
$target == "test-cdc" || \
|
||||||
$target == "test-compression" || \
|
$target == "test-compression" || \
|
||||||
$target == "test-trie" || \
|
$target == "test-trie" || \
|
||||||
|
$target == "test-oa" || \
|
||||||
$target == "test-system-keyspace-directory" || \
|
$target == "test-system-keyspace-directory" || \
|
||||||
$target == "fqltool-test" || \
|
$target == "fqltool-test" || \
|
||||||
$target == "long-test" || \
|
$target == "long-test" || \
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
--- config_template.yml 2023-03-10 09:47:05.552165036 -0600
|
--- a/config_template.yml
|
||||||
+++ config_template.yml.PAID 2023-03-10 09:51:21.174071576 -0600
|
+++ b/config_template.yml.PAID
|
||||||
@@ -156,14 +156,14 @@
|
@@ -157,14 +157,14 @@ default_env_vars: &default_env_vars
|
||||||
j8_par_executor: &j8_par_executor
|
j8_par_executor: &j8_par_executor
|
||||||
executor:
|
executor:
|
||||||
name: java8-executor
|
name: java8-executor
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
j8_small_executor: &j8_small_executor
|
j8_small_executor: &j8_small_executor
|
||||||
executor:
|
executor:
|
||||||
@@ -171,29 +171,41 @@
|
@@ -172,29 +172,41 @@ j8_small_executor: &j8_small_executor
|
||||||
exec_resource_class: medium
|
exec_resource_class: medium
|
||||||
parallelism: 1
|
parallelism: 1
|
||||||
|
|
||||||
|
|
@ -68,7 +68,7 @@
|
||||||
|
|
||||||
j11_small_executor: &j11_small_executor
|
j11_small_executor: &j11_small_executor
|
||||||
executor:
|
executor:
|
||||||
@@ -204,44 +216,56 @@
|
@@ -205,44 +217,56 @@ j11_small_executor: &j11_small_executor
|
||||||
j11_medium_par_executor: &j11_medium_par_executor
|
j11_medium_par_executor: &j11_medium_par_executor
|
||||||
executor:
|
executor:
|
||||||
name: java11-executor
|
name: java11-executor
|
||||||
|
|
@ -134,7 +134,7 @@
|
||||||
|
|
||||||
j8_separate_jobs: &j8_separate_jobs
|
j8_separate_jobs: &j8_separate_jobs
|
||||||
jobs:
|
jobs:
|
||||||
@@ -1929,7 +1953,7 @@
|
@@ -1998,7 +2022,7 @@ jobs:
|
||||||
target: testclasslist-system-keyspace-directory
|
target: testclasslist-system-keyspace-directory
|
||||||
|
|
||||||
j8_dtests_vnode:
|
j8_dtests_vnode:
|
||||||
|
|
@ -143,7 +143,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -1943,7 +1967,7 @@
|
@@ -2012,7 +2036,7 @@ jobs:
|
||||||
pytest_extra_args: '--use-vnodes --num-tokens=16 --skip-resource-intensive-tests'
|
pytest_extra_args: '--use-vnodes --num-tokens=16 --skip-resource-intensive-tests'
|
||||||
|
|
||||||
j8_dtests_offheap:
|
j8_dtests_offheap:
|
||||||
|
|
@ -152,7 +152,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -1957,7 +1981,7 @@
|
@@ -2026,7 +2050,7 @@ jobs:
|
||||||
pytest_extra_args: '--use-vnodes --num-tokens=16 --use-off-heap-memtables --skip-resource-intensive-tests'
|
pytest_extra_args: '--use-vnodes --num-tokens=16 --use-off-heap-memtables --skip-resource-intensive-tests'
|
||||||
|
|
||||||
j11_dtests_vnode:
|
j11_dtests_vnode:
|
||||||
|
|
@ -161,7 +161,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -1972,7 +1996,7 @@
|
@@ -2041,7 +2065,7 @@ jobs:
|
||||||
pytest_extra_args: '--use-vnodes --num-tokens=16 --skip-resource-intensive-tests'
|
pytest_extra_args: '--use-vnodes --num-tokens=16 --skip-resource-intensive-tests'
|
||||||
|
|
||||||
j11_dtests_offheap:
|
j11_dtests_offheap:
|
||||||
|
|
@ -170,7 +170,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -1987,7 +2011,7 @@
|
@@ -2056,7 +2080,7 @@ jobs:
|
||||||
pytest_extra_args: '--use-vnodes --num-tokens=16 --use-off-heap-memtables --skip-resource-intensive-tests'
|
pytest_extra_args: '--use-vnodes --num-tokens=16 --use-off-heap-memtables --skip-resource-intensive-tests'
|
||||||
|
|
||||||
j8_dtests:
|
j8_dtests:
|
||||||
|
|
@ -179,7 +179,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2001,7 +2025,7 @@
|
@@ -2070,7 +2094,7 @@ jobs:
|
||||||
pytest_extra_args: '--skip-resource-intensive-tests'
|
pytest_extra_args: '--skip-resource-intensive-tests'
|
||||||
|
|
||||||
j11_dtests:
|
j11_dtests:
|
||||||
|
|
@ -188,7 +188,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2016,7 +2040,7 @@
|
@@ -2085,7 +2109,7 @@ jobs:
|
||||||
pytest_extra_args: '--skip-resource-intensive-tests'
|
pytest_extra_args: '--skip-resource-intensive-tests'
|
||||||
|
|
||||||
j8_upgrade_dtests:
|
j8_upgrade_dtests:
|
||||||
|
|
@ -197,7 +197,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2030,7 +2054,7 @@
|
@@ -2099,7 +2123,7 @@ jobs:
|
||||||
pytest_extra_args: '--execute-upgrade-tests-only --upgrade-target-version-only --upgrade-version-selection all'
|
pytest_extra_args: '--execute-upgrade-tests-only --upgrade-target-version-only --upgrade-version-selection all'
|
||||||
|
|
||||||
j8_cqlsh_dtests_py3_vnode:
|
j8_cqlsh_dtests_py3_vnode:
|
||||||
|
|
@ -206,7 +206,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2045,7 +2069,7 @@
|
@@ -2114,7 +2138,7 @@ jobs:
|
||||||
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
||||||
|
|
||||||
j8_cqlsh_dtests_py3_offheap:
|
j8_cqlsh_dtests_py3_offheap:
|
||||||
|
|
@ -215,7 +215,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2060,7 +2084,7 @@
|
@@ -2129,7 +2153,7 @@ jobs:
|
||||||
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
||||||
|
|
||||||
j8_cqlsh_dtests_py38_vnode:
|
j8_cqlsh_dtests_py38_vnode:
|
||||||
|
|
@ -224,7 +224,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2078,7 +2102,7 @@
|
@@ -2147,7 +2171,7 @@ jobs:
|
||||||
python_version: '3.8'
|
python_version: '3.8'
|
||||||
|
|
||||||
j8_cqlsh_dtests_py311_vnode:
|
j8_cqlsh_dtests_py311_vnode:
|
||||||
|
|
@ -233,7 +233,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2096,7 +2120,7 @@
|
@@ -2165,7 +2189,7 @@ jobs:
|
||||||
python_version: '3.11'
|
python_version: '3.11'
|
||||||
|
|
||||||
j8_cqlsh_dtests_py38_offheap:
|
j8_cqlsh_dtests_py38_offheap:
|
||||||
|
|
@ -242,7 +242,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2114,7 +2138,7 @@
|
@@ -2183,7 +2207,7 @@ jobs:
|
||||||
python_version: '3.8'
|
python_version: '3.8'
|
||||||
|
|
||||||
j8_cqlsh_dtests_py311_offheap:
|
j8_cqlsh_dtests_py311_offheap:
|
||||||
|
|
@ -251,7 +251,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2132,7 +2156,7 @@
|
@@ -2201,7 +2225,7 @@ jobs:
|
||||||
python_version: '3.11'
|
python_version: '3.11'
|
||||||
|
|
||||||
j8_cqlsh_dtests_py3:
|
j8_cqlsh_dtests_py3:
|
||||||
|
|
@ -260,7 +260,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2147,7 +2171,7 @@
|
@@ -2216,7 +2240,7 @@ jobs:
|
||||||
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
||||||
|
|
||||||
j8_cqlsh_dtests_py38:
|
j8_cqlsh_dtests_py38:
|
||||||
|
|
@ -269,7 +269,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2165,7 +2189,7 @@
|
@@ -2234,7 +2258,7 @@ jobs:
|
||||||
python_version: '3.8'
|
python_version: '3.8'
|
||||||
|
|
||||||
j8_cqlsh_dtests_py311:
|
j8_cqlsh_dtests_py311:
|
||||||
|
|
@ -278,7 +278,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2183,7 +2207,7 @@
|
@@ -2252,7 +2276,7 @@ jobs:
|
||||||
python_version: '3.11'
|
python_version: '3.11'
|
||||||
|
|
||||||
j11_cqlsh_dtests_py3_vnode:
|
j11_cqlsh_dtests_py3_vnode:
|
||||||
|
|
@ -287,7 +287,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2198,7 +2222,7 @@
|
@@ -2267,7 +2291,7 @@ jobs:
|
||||||
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
||||||
|
|
||||||
j11_cqlsh_dtests_py3_offheap:
|
j11_cqlsh_dtests_py3_offheap:
|
||||||
|
|
@ -296,7 +296,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2213,7 +2237,7 @@
|
@@ -2282,7 +2306,7 @@ jobs:
|
||||||
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
||||||
|
|
||||||
j11_cqlsh_dtests_py38_vnode:
|
j11_cqlsh_dtests_py38_vnode:
|
||||||
|
|
@ -305,7 +305,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2231,7 +2255,7 @@
|
@@ -2300,7 +2324,7 @@ jobs:
|
||||||
python_version: '3.8'
|
python_version: '3.8'
|
||||||
|
|
||||||
j11_cqlsh_dtests_py311_vnode:
|
j11_cqlsh_dtests_py311_vnode:
|
||||||
|
|
@ -314,7 +314,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2249,7 +2273,7 @@
|
@@ -2318,7 +2342,7 @@ jobs:
|
||||||
python_version: '3.11'
|
python_version: '3.11'
|
||||||
|
|
||||||
j11_cqlsh_dtests_py38_offheap:
|
j11_cqlsh_dtests_py38_offheap:
|
||||||
|
|
@ -323,7 +323,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2267,7 +2291,7 @@
|
@@ -2336,7 +2360,7 @@ jobs:
|
||||||
python_version: '3.8'
|
python_version: '3.8'
|
||||||
|
|
||||||
j11_cqlsh_dtests_py311_offheap:
|
j11_cqlsh_dtests_py311_offheap:
|
||||||
|
|
@ -332,7 +332,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2285,7 +2309,7 @@
|
@@ -2354,7 +2378,7 @@ jobs:
|
||||||
python_version: '3.11'
|
python_version: '3.11'
|
||||||
|
|
||||||
j11_cqlsh_dtests_py3:
|
j11_cqlsh_dtests_py3:
|
||||||
|
|
@ -341,7 +341,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2300,7 +2324,7 @@
|
@@ -2369,7 +2393,7 @@ jobs:
|
||||||
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
||||||
|
|
||||||
j11_cqlsh_dtests_py38:
|
j11_cqlsh_dtests_py38:
|
||||||
|
|
@ -350,7 +350,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2318,7 +2342,7 @@
|
@@ -2387,7 +2411,7 @@ jobs:
|
||||||
python_version: '3.8'
|
python_version: '3.8'
|
||||||
|
|
||||||
j11_cqlsh_dtests_py311:
|
j11_cqlsh_dtests_py311:
|
||||||
|
|
@ -359,7 +359,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2336,7 +2360,7 @@
|
@@ -2405,7 +2429,7 @@ jobs:
|
||||||
python_version: '3.11'
|
python_version: '3.11'
|
||||||
|
|
||||||
j8_dtests_large_vnode:
|
j8_dtests_large_vnode:
|
||||||
|
|
@ -368,7 +368,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2350,7 +2374,7 @@
|
@@ -2419,7 +2443,7 @@ jobs:
|
||||||
pytest_extra_args: '--use-vnodes --num-tokens=16 --only-resource-intensive-tests --force-resource-intensive-tests'
|
pytest_extra_args: '--use-vnodes --num-tokens=16 --only-resource-intensive-tests --force-resource-intensive-tests'
|
||||||
|
|
||||||
j8_dtests_large:
|
j8_dtests_large:
|
||||||
|
|
@ -377,7 +377,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2364,7 +2388,7 @@
|
@@ -2433,7 +2457,7 @@ jobs:
|
||||||
pytest_extra_args: '--only-resource-intensive-tests --force-resource-intensive-tests'
|
pytest_extra_args: '--only-resource-intensive-tests --force-resource-intensive-tests'
|
||||||
|
|
||||||
j11_dtests_large_vnode:
|
j11_dtests_large_vnode:
|
||||||
|
|
@ -386,7 +386,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2378,7 +2402,7 @@
|
@@ -2447,7 +2471,7 @@ jobs:
|
||||||
pytest_extra_args: '--use-vnodes --num-tokens=16 --only-resource-intensive-tests --force-resource-intensive-tests'
|
pytest_extra_args: '--use-vnodes --num-tokens=16 --only-resource-intensive-tests --force-resource-intensive-tests'
|
||||||
|
|
||||||
j11_dtests_large:
|
j11_dtests_large:
|
||||||
|
|
|
||||||
|
|
@ -119,6 +119,7 @@ default_env_vars: &default_env_vars
|
||||||
# REPEATED_ANT_TEST_TARGET: test-cdc
|
# REPEATED_ANT_TEST_TARGET: test-cdc
|
||||||
# REPEATED_ANT_TEST_TARGET: test-compression
|
# REPEATED_ANT_TEST_TARGET: test-compression
|
||||||
# REPEATED_ANT_TEST_TARGET: test-trie
|
# REPEATED_ANT_TEST_TARGET: test-trie
|
||||||
|
# REPEATED_ANT_TEST_TARGET: test-oa
|
||||||
# REPEATED_ANT_TEST_TARGET: test-system-keyspace-directory
|
# REPEATED_ANT_TEST_TARGET: test-system-keyspace-directory
|
||||||
REPEATED_ANT_TEST_TARGET: testsome
|
REPEATED_ANT_TEST_TARGET: testsome
|
||||||
# The name of JUnit class to be run multiple times, for example:
|
# The name of JUnit class to be run multiple times, for example:
|
||||||
|
|
@ -232,6 +233,22 @@ j11_separate_jobs: &j11_separate_jobs
|
||||||
requires:
|
requires:
|
||||||
- start_j11_unit_tests
|
- start_j11_unit_tests
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j11_unit_tests
|
||||||
|
- j11_build
|
||||||
|
- start_j11_utests_oa_repeat:
|
||||||
|
type: approval
|
||||||
|
- j11_utests_oa_repeat:
|
||||||
|
requires:
|
||||||
|
- start_j11_utests_oa_repeat
|
||||||
|
- j11_build
|
||||||
|
- start_j17_utests_oa_repeat:
|
||||||
|
type: approval
|
||||||
|
- j17_utests_oa_repeat:
|
||||||
|
requires:
|
||||||
|
- start_j17_utests_oa_repeat
|
||||||
|
- j11_build
|
||||||
- start_j11_unit_tests_repeat:
|
- start_j11_unit_tests_repeat:
|
||||||
type: approval
|
type: approval
|
||||||
- j11_unit_tests_repeat:
|
- j11_unit_tests_repeat:
|
||||||
|
|
@ -329,6 +346,10 @@ j11_separate_jobs: &j11_separate_jobs
|
||||||
requires:
|
requires:
|
||||||
- start_j17_unit_tests
|
- start_j17_unit_tests
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j17_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j17_unit_tests
|
||||||
|
- j11_build
|
||||||
- start_j17_unit_tests_repeat:
|
- start_j17_unit_tests_repeat:
|
||||||
type: approval
|
type: approval
|
||||||
- j17_unit_tests_repeat:
|
- j17_unit_tests_repeat:
|
||||||
|
|
@ -741,6 +762,15 @@ j11_pre-commit_jobs: &j11_pre-commit_jobs
|
||||||
- j11_unit_tests:
|
- j11_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j11_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j11_build
|
||||||
|
- j11_utests_oa_repeat:
|
||||||
|
requires:
|
||||||
|
- j11_build
|
||||||
|
- j17_utests_oa_repeat:
|
||||||
|
requires:
|
||||||
|
- j11_build
|
||||||
- j11_unit_tests_repeat:
|
- j11_unit_tests_repeat:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
|
@ -790,6 +820,9 @@ j11_pre-commit_jobs: &j11_pre-commit_jobs
|
||||||
- j17_unit_tests:
|
- j17_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
- j17_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j11_build
|
||||||
- j17_unit_tests_repeat:
|
- j17_unit_tests_repeat:
|
||||||
requires:
|
requires:
|
||||||
- j11_build
|
- j11_build
|
||||||
|
|
@ -1084,6 +1117,16 @@ j17_separate_jobs: &j17_separate_jobs
|
||||||
requires:
|
requires:
|
||||||
- start_j17_unit_tests
|
- start_j17_unit_tests
|
||||||
- j17_build
|
- j17_build
|
||||||
|
- j17_utests_oa:
|
||||||
|
requires:
|
||||||
|
- start_j17_unit_tests
|
||||||
|
- j17_build
|
||||||
|
- start_j17_utests_oa_repeat:
|
||||||
|
type: approval
|
||||||
|
- j17_utests_oa_repeat:
|
||||||
|
requires:
|
||||||
|
- start_j17_utests_oa_repeat
|
||||||
|
- j17_build
|
||||||
- start_j17_unit_tests_repeat:
|
- start_j17_unit_tests_repeat:
|
||||||
type: approval
|
type: approval
|
||||||
- j17_unit_tests_repeat:
|
- j17_unit_tests_repeat:
|
||||||
|
|
@ -1331,6 +1374,12 @@ j17_pre-commit_jobs: &j17_pre-commit_jobs
|
||||||
- j17_unit_tests:
|
- j17_unit_tests:
|
||||||
requires:
|
requires:
|
||||||
- j17_build
|
- j17_build
|
||||||
|
- j17_utests_oa:
|
||||||
|
requires:
|
||||||
|
- j17_build
|
||||||
|
- j17_utests_oa_repeat:
|
||||||
|
requires:
|
||||||
|
- j17_build
|
||||||
- j17_unit_tests_repeat:
|
- j17_unit_tests_repeat:
|
||||||
requires:
|
requires:
|
||||||
- j17_build
|
- j17_build
|
||||||
|
|
@ -1579,6 +1628,16 @@ jobs:
|
||||||
- log_environment
|
- log_environment
|
||||||
- run_parallel_junit_tests
|
- run_parallel_junit_tests
|
||||||
|
|
||||||
|
j11_utests_oa:
|
||||||
|
<<: *j11_par_executor
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- create_junit_containers
|
||||||
|
- log_environment
|
||||||
|
- run_parallel_junit_tests:
|
||||||
|
target: "testclasslist-oa"
|
||||||
|
|
||||||
j11_simulator_dtests:
|
j11_simulator_dtests:
|
||||||
<<: *j11_small_executor
|
<<: *j11_small_executor
|
||||||
steps:
|
steps:
|
||||||
|
|
@ -1651,6 +1710,16 @@ jobs:
|
||||||
- log_environment
|
- log_environment
|
||||||
- run_parallel_junit_tests
|
- run_parallel_junit_tests
|
||||||
|
|
||||||
|
j17_utests_oa:
|
||||||
|
<<: *j17_par_executor
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- create_junit_containers
|
||||||
|
- log_environment
|
||||||
|
- run_parallel_junit_tests:
|
||||||
|
target: "testclasslist-oa"
|
||||||
|
|
||||||
j11_cqlshlib_tests:
|
j11_cqlshlib_tests:
|
||||||
<<: *j11_small_executor
|
<<: *j11_small_executor
|
||||||
steps:
|
steps:
|
||||||
|
|
@ -2320,6 +2389,22 @@ jobs:
|
||||||
- log_environment
|
- log_environment
|
||||||
- run_utests_trie_repeat
|
- run_utests_trie_repeat
|
||||||
|
|
||||||
|
j11_utests_oa_repeat:
|
||||||
|
<<: *j11_repeated_utest_executor
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- log_environment
|
||||||
|
- run_utests_oa_repeat
|
||||||
|
|
||||||
|
j17_utests_oa_repeat:
|
||||||
|
<<: *j17_repeated_utest_executor
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /home/cassandra
|
||||||
|
- log_environment
|
||||||
|
- run_utests_oa_repeat
|
||||||
|
|
||||||
j11_utests_system_keyspace_directory_repeat:
|
j11_utests_system_keyspace_directory_repeat:
|
||||||
<<: *j11_repeated_utest_executor
|
<<: *j11_repeated_utest_executor
|
||||||
steps:
|
steps:
|
||||||
|
|
@ -3030,6 +3115,14 @@ commands:
|
||||||
count: ${REPEATED_UTESTS_COUNT}
|
count: ${REPEATED_UTESTS_COUNT}
|
||||||
stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
|
stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
|
||||||
|
|
||||||
|
run_utests_oa_repeat:
|
||||||
|
steps:
|
||||||
|
- run_repeated_utests:
|
||||||
|
target: test-oa
|
||||||
|
tests: ${REPEATED_UTESTS}
|
||||||
|
count: ${REPEATED_UTESTS_COUNT}
|
||||||
|
stop_on_failure: ${REPEATED_TESTS_STOP_ON_FAILURE}
|
||||||
|
|
||||||
run_utests_system_keyspace_directory_repeat:
|
run_utests_system_keyspace_directory_repeat:
|
||||||
steps:
|
steps:
|
||||||
- run_repeated_utests:
|
- run_repeated_utests:
|
||||||
|
|
@ -3142,6 +3235,8 @@ commands:
|
||||||
testtag="system_keyspace_directory"
|
testtag="system_keyspace_directory"
|
||||||
elif [[ $target == "test-trie" ]]; then
|
elif [[ $target == "test-trie" ]]; then
|
||||||
testtag="trie"
|
testtag="trie"
|
||||||
|
elif [[ $target == "test-oa" ]]; then
|
||||||
|
testtag="oa"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Run each test class as many times as requested.
|
# Run each test class as many times as requested.
|
||||||
|
|
@ -3163,6 +3258,7 @@ commands:
|
||||||
$target == "test-cdc" || \
|
$target == "test-cdc" || \
|
||||||
$target == "test-compression" || \
|
$target == "test-compression" || \
|
||||||
$target == "test-trie" || \
|
$target == "test-trie" || \
|
||||||
|
$target == "test-oa" || \
|
||||||
$target == "test-system-keyspace-directory" || \
|
$target == "test-system-keyspace-directory" || \
|
||||||
$target == "fqltool-test" || \
|
$target == "fqltool-test" || \
|
||||||
$target == "long-test" || \
|
$target == "long-test" || \
|
||||||
|
|
@ -3290,6 +3386,7 @@ commands:
|
||||||
$target == "test-cdc" || \
|
$target == "test-cdc" || \
|
||||||
$target == "test-compression" || \
|
$target == "test-compression" || \
|
||||||
$target == "test-trie" || \
|
$target == "test-trie" || \
|
||||||
|
$target == "test-oa" || \
|
||||||
$target == "test-system-keyspace-directory" || \
|
$target == "test-system-keyspace-directory" || \
|
||||||
$target == "fqltool-test" || \
|
$target == "fqltool-test" || \
|
||||||
$target == "long-test" || \
|
$target == "long-test" || \
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
--- config_template_11_and_17.yml 2023-03-15 21:34:57.000000000 -0400
|
--- a/config_template_11_and_17.yml
|
||||||
+++ config_template_11_and_17.yml.PAID 2023-03-15 21:37:25.000000000 -0400
|
+++ b/config_template_11_and_17.yml.PAID
|
||||||
@@ -140,14 +140,14 @@
|
@@ -141,14 +141,14 @@ default_env_vars: &default_env_vars
|
||||||
j11_par_executor: &j11_par_executor
|
j11_par_executor: &j11_par_executor
|
||||||
executor:
|
executor:
|
||||||
name: java11-executor
|
name: java11-executor
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
j11_small_executor: &j11_small_executor
|
j11_small_executor: &j11_small_executor
|
||||||
executor:
|
executor:
|
||||||
@@ -155,30 +155,41 @@
|
@@ -156,30 +156,41 @@ j11_small_executor: &j11_small_executor
|
||||||
exec_resource_class: medium
|
exec_resource_class: medium
|
||||||
parallelism: 1
|
parallelism: 1
|
||||||
|
|
||||||
|
|
@ -68,7 +68,7 @@
|
||||||
|
|
||||||
j17_small_executor: &j17_small_executor
|
j17_small_executor: &j17_small_executor
|
||||||
executor:
|
executor:
|
||||||
@@ -189,34 +200,44 @@
|
@@ -190,34 +201,44 @@ j17_small_executor: &j17_small_executor
|
||||||
j17_medium_par_executor: &j17_medium_par_executor
|
j17_medium_par_executor: &j17_medium_par_executor
|
||||||
executor:
|
executor:
|
||||||
name: java17-executor
|
name: java17-executor
|
||||||
|
|
@ -120,7 +120,7 @@
|
||||||
|
|
||||||
j11_separate_jobs: &j11_separate_jobs
|
j11_separate_jobs: &j11_separate_jobs
|
||||||
jobs:
|
jobs:
|
||||||
@@ -1808,7 +1829,7 @@
|
@@ -1877,7 +1898,7 @@ jobs:
|
||||||
target: testclasslist-system-keyspace-directory
|
target: testclasslist-system-keyspace-directory
|
||||||
|
|
||||||
j11_dtests_vnode:
|
j11_dtests_vnode:
|
||||||
|
|
@ -129,7 +129,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -1822,7 +1843,7 @@
|
@@ -1891,7 +1912,7 @@ jobs:
|
||||||
pytest_extra_args: '--use-vnodes --num-tokens=16 --skip-resource-intensive-tests'
|
pytest_extra_args: '--use-vnodes --num-tokens=16 --skip-resource-intensive-tests'
|
||||||
|
|
||||||
j11_dtests_offheap:
|
j11_dtests_offheap:
|
||||||
|
|
@ -138,7 +138,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -1836,7 +1857,7 @@
|
@@ -1905,7 +1926,7 @@ jobs:
|
||||||
pytest_extra_args: '--use-vnodes --num-tokens=16 --use-off-heap-memtables --skip-resource-intensive-tests'
|
pytest_extra_args: '--use-vnodes --num-tokens=16 --use-off-heap-memtables --skip-resource-intensive-tests'
|
||||||
|
|
||||||
j17_dtests_vnode:
|
j17_dtests_vnode:
|
||||||
|
|
@ -147,7 +147,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -1851,7 +1872,7 @@
|
@@ -1920,7 +1941,7 @@ jobs:
|
||||||
pytest_extra_args: '--use-vnodes --num-tokens=16 --skip-resource-intensive-tests'
|
pytest_extra_args: '--use-vnodes --num-tokens=16 --skip-resource-intensive-tests'
|
||||||
|
|
||||||
j17_dtests_offheap:
|
j17_dtests_offheap:
|
||||||
|
|
@ -156,7 +156,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -1866,7 +1887,7 @@
|
@@ -1935,7 +1956,7 @@ jobs:
|
||||||
pytest_extra_args: '--use-vnodes --num-tokens=16 --use-off-heap-memtables --skip-resource-intensive-tests'
|
pytest_extra_args: '--use-vnodes --num-tokens=16 --use-off-heap-memtables --skip-resource-intensive-tests'
|
||||||
|
|
||||||
j11_dtests:
|
j11_dtests:
|
||||||
|
|
@ -165,7 +165,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -1880,7 +1901,7 @@
|
@@ -1949,7 +1970,7 @@ jobs:
|
||||||
pytest_extra_args: '--skip-resource-intensive-tests'
|
pytest_extra_args: '--skip-resource-intensive-tests'
|
||||||
|
|
||||||
j17_dtests:
|
j17_dtests:
|
||||||
|
|
@ -174,7 +174,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -1895,7 +1916,7 @@
|
@@ -1964,7 +1985,7 @@ jobs:
|
||||||
pytest_extra_args: '--skip-resource-intensive-tests'
|
pytest_extra_args: '--skip-resource-intensive-tests'
|
||||||
|
|
||||||
j11_cqlsh_dtests_py3_vnode:
|
j11_cqlsh_dtests_py3_vnode:
|
||||||
|
|
@ -183,7 +183,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -1910,7 +1931,7 @@
|
@@ -1979,7 +2000,7 @@ jobs:
|
||||||
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
||||||
|
|
||||||
j11_cqlsh_dtests_py3_offheap:
|
j11_cqlsh_dtests_py3_offheap:
|
||||||
|
|
@ -192,7 +192,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -1925,7 +1946,7 @@
|
@@ -1994,7 +2015,7 @@ jobs:
|
||||||
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
||||||
|
|
||||||
j11_cqlsh_dtests_py38_vnode:
|
j11_cqlsh_dtests_py38_vnode:
|
||||||
|
|
@ -201,7 +201,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -1943,7 +1964,7 @@
|
@@ -2012,7 +2033,7 @@ jobs:
|
||||||
python_version: '3.8'
|
python_version: '3.8'
|
||||||
|
|
||||||
j11_cqlsh_dtests_py311_vnode:
|
j11_cqlsh_dtests_py311_vnode:
|
||||||
|
|
@ -210,7 +210,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -1961,7 +1982,7 @@
|
@@ -2030,7 +2051,7 @@ jobs:
|
||||||
python_version: '3.11'
|
python_version: '3.11'
|
||||||
|
|
||||||
j11_cqlsh_dtests_py38_offheap:
|
j11_cqlsh_dtests_py38_offheap:
|
||||||
|
|
@ -219,7 +219,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -1979,7 +2000,7 @@
|
@@ -2048,7 +2069,7 @@ jobs:
|
||||||
python_version: '3.8'
|
python_version: '3.8'
|
||||||
|
|
||||||
j11_cqlsh_dtests_py311_offheap:
|
j11_cqlsh_dtests_py311_offheap:
|
||||||
|
|
@ -228,7 +228,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -1997,7 +2018,7 @@
|
@@ -2066,7 +2087,7 @@ jobs:
|
||||||
python_version: '3.11'
|
python_version: '3.11'
|
||||||
|
|
||||||
j11_cqlsh_dtests_py3:
|
j11_cqlsh_dtests_py3:
|
||||||
|
|
@ -237,7 +237,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2012,7 +2033,7 @@
|
@@ -2081,7 +2102,7 @@ jobs:
|
||||||
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
||||||
|
|
||||||
j11_cqlsh_dtests_py38:
|
j11_cqlsh_dtests_py38:
|
||||||
|
|
@ -246,7 +246,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2030,7 +2051,7 @@
|
@@ -2099,7 +2120,7 @@ jobs:
|
||||||
python_version: '3.8'
|
python_version: '3.8'
|
||||||
|
|
||||||
j11_cqlsh_dtests_py311:
|
j11_cqlsh_dtests_py311:
|
||||||
|
|
@ -255,7 +255,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2048,7 +2069,7 @@
|
@@ -2117,7 +2138,7 @@ jobs:
|
||||||
python_version: '3.11'
|
python_version: '3.11'
|
||||||
|
|
||||||
j17_cqlsh_dtests_py3_vnode:
|
j17_cqlsh_dtests_py3_vnode:
|
||||||
|
|
@ -264,7 +264,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2063,7 +2084,7 @@
|
@@ -2132,7 +2153,7 @@ jobs:
|
||||||
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
||||||
|
|
||||||
j17_cqlsh_dtests_py3_offheap:
|
j17_cqlsh_dtests_py3_offheap:
|
||||||
|
|
@ -273,7 +273,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2078,7 +2099,7 @@
|
@@ -2147,7 +2168,7 @@ jobs:
|
||||||
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
||||||
|
|
||||||
j17_cqlsh_dtests_py38_vnode:
|
j17_cqlsh_dtests_py38_vnode:
|
||||||
|
|
@ -282,7 +282,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2096,7 +2117,7 @@
|
@@ -2165,7 +2186,7 @@ jobs:
|
||||||
python_version: '3.8'
|
python_version: '3.8'
|
||||||
|
|
||||||
j17_cqlsh_dtests_py311_vnode:
|
j17_cqlsh_dtests_py311_vnode:
|
||||||
|
|
@ -291,7 +291,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2114,7 +2135,7 @@
|
@@ -2183,7 +2204,7 @@ jobs:
|
||||||
python_version: '3.11'
|
python_version: '3.11'
|
||||||
|
|
||||||
j17_cqlsh_dtests_py38_offheap:
|
j17_cqlsh_dtests_py38_offheap:
|
||||||
|
|
@ -300,7 +300,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2132,7 +2153,7 @@
|
@@ -2201,7 +2222,7 @@ jobs:
|
||||||
python_version: '3.8'
|
python_version: '3.8'
|
||||||
|
|
||||||
j17_cqlsh_dtests_py311_offheap:
|
j17_cqlsh_dtests_py311_offheap:
|
||||||
|
|
@ -309,7 +309,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2150,7 +2171,7 @@
|
@@ -2219,7 +2240,7 @@ jobs:
|
||||||
python_version: '3.11'
|
python_version: '3.11'
|
||||||
|
|
||||||
j17_cqlsh_dtests_py3:
|
j17_cqlsh_dtests_py3:
|
||||||
|
|
@ -318,7 +318,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2165,7 +2186,7 @@
|
@@ -2234,7 +2255,7 @@ jobs:
|
||||||
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
extra_env_args: 'CQLSH_PYTHON=/usr/bin/python3.6'
|
||||||
|
|
||||||
j17_cqlsh_dtests_py38:
|
j17_cqlsh_dtests_py38:
|
||||||
|
|
@ -327,7 +327,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2183,7 +2204,7 @@
|
@@ -2252,7 +2273,7 @@ jobs:
|
||||||
python_version: '3.8'
|
python_version: '3.8'
|
||||||
|
|
||||||
j17_cqlsh_dtests_py311:
|
j17_cqlsh_dtests_py311:
|
||||||
|
|
@ -336,7 +336,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2201,7 +2222,7 @@
|
@@ -2270,7 +2291,7 @@ jobs:
|
||||||
python_version: '3.11'
|
python_version: '3.11'
|
||||||
|
|
||||||
j11_dtests_large_vnode:
|
j11_dtests_large_vnode:
|
||||||
|
|
@ -345,7 +345,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2215,7 +2236,7 @@
|
@@ -2284,7 +2305,7 @@ jobs:
|
||||||
pytest_extra_args: '--use-vnodes --num-tokens=16 --only-resource-intensive-tests --force-resource-intensive-tests'
|
pytest_extra_args: '--use-vnodes --num-tokens=16 --only-resource-intensive-tests --force-resource-intensive-tests'
|
||||||
|
|
||||||
j11_dtests_large:
|
j11_dtests_large:
|
||||||
|
|
@ -354,7 +354,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2229,7 +2250,7 @@
|
@@ -2298,7 +2319,7 @@ jobs:
|
||||||
pytest_extra_args: '--only-resource-intensive-tests --force-resource-intensive-tests'
|
pytest_extra_args: '--only-resource-intensive-tests --force-resource-intensive-tests'
|
||||||
|
|
||||||
j17_dtests_large_vnode:
|
j17_dtests_large_vnode:
|
||||||
|
|
@ -363,7 +363,7 @@
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /home/cassandra
|
at: /home/cassandra
|
||||||
@@ -2243,7 +2264,7 @@
|
@@ -2312,7 +2333,7 @@ jobs:
|
||||||
pytest_extra_args: '--use-vnodes --num-tokens=16 --only-resource-intensive-tests --force-resource-intensive-tests'
|
pytest_extra_args: '--use-vnodes --num-tokens=16 --only-resource-intensive-tests --force-resource-intensive-tests'
|
||||||
|
|
||||||
j17_dtests_large:
|
j17_dtests_large:
|
||||||
|
|
|
||||||
|
|
@ -260,6 +260,8 @@ delete_repeated_jobs()
|
||||||
delete_job "$1" "j11_utests_compression_repeat"
|
delete_job "$1" "j11_utests_compression_repeat"
|
||||||
delete_job "$1" "j8_utests_trie_repeat"
|
delete_job "$1" "j8_utests_trie_repeat"
|
||||||
delete_job "$1" "j11_utests_trie_repeat"
|
delete_job "$1" "j11_utests_trie_repeat"
|
||||||
|
delete_job "$1" "j8_utests_oa_repeat"
|
||||||
|
delete_job "$1" "j11_utests_oa_repeat"
|
||||||
delete_job "$1" "j8_utests_system_keyspace_directory_repeat"
|
delete_job "$1" "j8_utests_system_keyspace_directory_repeat"
|
||||||
delete_job "$1" "j11_utests_system_keyspace_directory_repeat"
|
delete_job "$1" "j11_utests_system_keyspace_directory_repeat"
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
|
|
@ -254,6 +254,8 @@ delete_repeated_jobs()
|
||||||
delete_job "$1" "j17_utests_compression_repeat"
|
delete_job "$1" "j17_utests_compression_repeat"
|
||||||
delete_job "$1" "j11_utests_trie_repeat"
|
delete_job "$1" "j11_utests_trie_repeat"
|
||||||
delete_job "$1" "j17_utests_trie_repeat"
|
delete_job "$1" "j17_utests_trie_repeat"
|
||||||
|
delete_job "$1" "j11_utests_oa_repeat"
|
||||||
|
delete_job "$1" "j17_utests_oa_repeat"
|
||||||
delete_job "$1" "j11_utests_system_keyspace_directory_repeat"
|
delete_job "$1" "j11_utests_system_keyspace_directory_repeat"
|
||||||
delete_job "$1" "j17_utests_system_keyspace_directory_repeat"
|
delete_job "$1" "j17_utests_system_keyspace_directory_repeat"
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,23 @@
|
||||||
CASSANDRA-14092: MAXIMUM TTL EXPIRATION DATE
|
CASSANDRA-14092: MAXIMUM TTL EXPIRATION DATE
|
||||||
---------------------------------------------
|
---------------------------------------------
|
||||||
|
|
||||||
The maximum expiration timestamp that can be represented by the storage engine is
|
The maximum expiration timestamp that can be represented by the storage engine has been raised to
|
||||||
2038-01-19T03:14:06+00:00, which means that INSERTS using TTL that would expire
|
2106-02-07T06:28:13+00:00 from the previous 2038-01-19T03:14:06+00:00, which means that INSERTS using
|
||||||
after this date are not currently supported.
|
TTL that would expire after this date are not currently supported. Notice that on previous versions <5.0
|
||||||
|
or when 5.0 is ran in compatibility mode (<="nc" sstable formats) the limit stays at at 2038-01-19T03:14:06+00:00.
|
||||||
|
|
||||||
|
There is a new yaml property storage_compatibility_mode that determines the
|
||||||
|
Cassandra major version we want to stay compatible with. Its default is CASSANDRA_4, which means that
|
||||||
|
the node sstables, commitlog, hints and messaging version will stay compatible with Cassandra 4.x,
|
||||||
|
2038 will still be the limit, and it will be possible to rollback to the previous version. To upgrade:
|
||||||
|
- Do a rolling upgrade to 5.0 where 2038 will still be the limit. At this point, the node won't write
|
||||||
|
anything incompatible with Cassandra 4.x, and you would still be able to rollback to that version.
|
||||||
|
- Do a rolling restart setting storage_compatibility_mode=UPGRADING. Once all nodes
|
||||||
|
are in storage version 5, 2106 will become the new limit.
|
||||||
|
- Do a rolling restart setting storage_compatibility_mode=NONE. Now mixed
|
||||||
|
2038 and 2106 nodes are no longer possible.
|
||||||
|
Notice the yaml property needs to be set all the time for all executables and tools. It
|
||||||
|
will be removed in future versions when 2038 nodes are no longer possible.
|
||||||
|
|
||||||
# Expiration Date Overflow Policy
|
# Expiration Date Overflow Policy
|
||||||
|
|
||||||
|
|
@ -11,9 +25,9 @@ We plan to lift this limitation in newer versions, but while the fix is not avai
|
||||||
operators can decide which policy to apply when dealing with inserts with TTL exceeding
|
operators can decide which policy to apply when dealing with inserts with TTL exceeding
|
||||||
the maximum supported expiration date:
|
the maximum supported expiration date:
|
||||||
- REJECT: this is the default policy and will reject any requests with expiration
|
- REJECT: this is the default policy and will reject any requests with expiration
|
||||||
date timestamp after 2038-01-19T03:14:06+00:00.
|
date timestamp after 2106-02-07T06:28:13+00:00 or 2038-01-19T03:14:06+00:00.
|
||||||
- CAP: any insert with TTL expiring after 2038-01-19T03:14:06+00:00 will expire on
|
- CAP: any insert with TTL expiring after 2106-02-07T06:28:13+00:00 will expire on
|
||||||
2038-01-19T03:14:06+00:00 and the client will receive a warning.
|
2106-02-07T06:28:13+00:00 or 2038-01-19T03:14:06+00:00 and the client will receive a warning.
|
||||||
- CAP_NOWARN: same as previous, except that the client warning will not be emitted.
|
- CAP_NOWARN: same as previous, except that the client warning will not be emitted.
|
||||||
|
|
||||||
These policies may be specified via the -Dcassandra.expiration_date_overflow_policy=POLICY
|
These policies may be specified via the -Dcassandra.expiration_date_overflow_policy=POLICY
|
||||||
|
|
@ -32,13 +46,16 @@ on these versions. When assertions are disabled then it is possible to INSERT en
|
||||||
with overflowed local expiration time and even the earlier versions are subject to data
|
with overflowed local expiration time and even the earlier versions are subject to data
|
||||||
loss due to this bug.
|
loss due to this bug.
|
||||||
|
|
||||||
This issue only affected INSERTs with very large TTLs, close to the maximum allowed value
|
On versions < 5.0 the overflow limit was at 2038-01-19T03:14:06+00:00 so this issue
|
||||||
|
only affected INSERTs with very large TTLs, close to the maximum allowed value
|
||||||
of 630720000 seconds (20 years), starting from 2018-01-19T03:14:06+00:00. As time progresses,
|
of 630720000 seconds (20 years), starting from 2018-01-19T03:14:06+00:00. As time progresses,
|
||||||
the maximum supported TTL will be gradually reduced as the maximum expiration date approaches.
|
the maximum supported TTL will be gradually reduced as the maximum expiration date approaches.
|
||||||
For instance, a user on an affected version on 2028-01-19T03:14:06 with a TTL of 10 years
|
For instance, a user on an affected version on 2028-01-19T03:14:06 with a TTL of 10 years
|
||||||
will be affected by this bug, so we urge users of very large TTLs to upgrade to a version
|
will be affected by this bug, so we urge users of very large TTLs to upgrade to a version
|
||||||
where this issue is addressed as soon as possible.
|
where this issue is addressed as soon as possible.
|
||||||
|
|
||||||
|
On versions >= 5.0 this limit has been raised to 2106-02-07T06:28:13+00:00.
|
||||||
|
|
||||||
# Data Recovery
|
# Data Recovery
|
||||||
|
|
||||||
SSTables from Cassandra versions prior to 2.1.20/2.2.12/3.0.16/3.11.2 containing entries
|
SSTables from Cassandra versions prior to 2.1.20/2.2.12/3.0.16/3.11.2 containing entries
|
||||||
|
|
@ -78,4 +95,4 @@ for recovery of SSTables via scrub:
|
||||||
- run "nodetool scrub --reinsert-overflowed-ttl <keyspace> <table>".
|
- run "nodetool scrub --reinsert-overflowed-ttl <keyspace> <table>".
|
||||||
- Re-enable compactions after verifying that scrub recovered the missing entries.
|
- Re-enable compactions after verifying that scrub recovered the missing entries.
|
||||||
|
|
||||||
See https://issues.apache.org/jira/browse/CASSANDRA-14092 for more details about this issue.
|
See https://issues.apache.org/jira/browse/CASSANDRA-14092 and https://issues.apache.org/jira/browse/CASSANDRA-14227 for more details about this issue.
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
5.0
|
5.0
|
||||||
|
* Extend maximum expiration date (CASSANDRA-14227)
|
||||||
* Add guardrail for partition tombstones and deprecate compaction_tombstone_warning_threshold (CASSANDRA-17194)
|
* Add guardrail for partition tombstones and deprecate compaction_tombstone_warning_threshold (CASSANDRA-17194)
|
||||||
* Print header and statistics for cassandra-stress output with arbitrary frequency (CASSANDRA-12972)
|
* Print header and statistics for cassandra-stress output with arbitrary frequency (CASSANDRA-12972)
|
||||||
* CEP-25: Trie-indexed SSTable format (CASSANDRA-18398)
|
* CEP-25: Trie-indexed SSTable format (CASSANDRA-18398)
|
||||||
|
|
|
||||||
27
NEWS.txt
27
NEWS.txt
|
|
@ -1,12 +1,26 @@
|
||||||
PLEASE READ: MAXIMUM TTL EXPIRATION DATE NOTICE (CASSANDRA-14092)
|
PLEASE READ: MAXIMUM TTL EXPIRATION DATE NOTICE (CASSANDRA-14092 & CASSANDRA-14227)
|
||||||
------------------------------------------------------------------
|
-----------------------------------------------------------------------------------
|
||||||
(General upgrading instructions are available in the next section)
|
(General upgrading instructions are available in the next section)
|
||||||
|
|
||||||
The maximum expiration timestamp that can be represented by the storage engine is
|
The maximum expiration timestamp that can be represented by the storage engine has been
|
||||||
2038-01-19T03:14:06+00:00, which means that inserts with TTL thatl expire after
|
raised to 2106-02-07T06:28:13+00:00 (2038-01-19T03:14:06+00:00 if in compatibility mode
|
||||||
|
with Cassandra <5.0, sstable version <=nc), which means that inserts with TTL that expire after
|
||||||
this date are not currently supported. By default, INSERTS with TTL exceeding the
|
this date are not currently supported. By default, INSERTS with TTL exceeding the
|
||||||
maximum supported date are rejected, but it's possible to choose a different
|
maximum supported date are rejected, but it's possible to choose a different
|
||||||
expiration overflow policy. See CASSANDRA-14092.txt for more details.
|
expiration overflow policy. See CASSANDRA-14092.txt for more details.
|
||||||
|
|
||||||
|
There is a new yaml property storage_compatibility_mode that determines the
|
||||||
|
Cassandra major version we want to stay compatible with. Its default is CASSANDRA_4, which means that
|
||||||
|
the node sstables, commitlog, hints and messaging version will stay compatible with Cassandra 4.x,
|
||||||
|
2038 will still be the limit, and it will be possible to rollback to the previous version. To upgrade:
|
||||||
|
- Do a rolling upgrade to 5.0 where 2038 will still be the limit. At this point, the node won't write
|
||||||
|
anything incompatible with Cassandra 4.x, and you would still be able to rollback to that version.
|
||||||
|
- Do a rolling restart setting storage_compatibility_mode=UPGRADING. Once all nodes
|
||||||
|
are in storage version 5, 2106 will become the new limit.
|
||||||
|
- Do a rolling restart setting storage_compatibility_mode=NONE. Now mixed
|
||||||
|
2038 and 2106 nodes are no longer possible.
|
||||||
|
Notice the yaml property needs to be set all the time for all executables and tools. It
|
||||||
|
will be removed in future versions when 2038 nodes are no longer possible.
|
||||||
|
|
||||||
Prior to 3.0.16 (3.0.X) and 3.11.2 (3.11.x) there was no protection against INSERTS
|
Prior to 3.0.16 (3.0.X) and 3.11.2 (3.11.x) there was no protection against INSERTS
|
||||||
with TTL expiring after the maximum supported date, causing the expiration time
|
with TTL expiring after the maximum supported date, causing the expiration time
|
||||||
|
|
@ -57,6 +71,7 @@ using the provided 'sstableupgrade' tool.
|
||||||
|
|
||||||
New features
|
New features
|
||||||
------------
|
------------
|
||||||
|
- Entended max expiration time from 2038-01-19T03:14:06+00:00 to 2106-02-07T06:28:13+00:00
|
||||||
- Added new Mathematical CQL functions: abs, exp, log, log10 and round.
|
- Added new Mathematical CQL functions: abs, exp, log, log10 and round.
|
||||||
- Added a trie-based memtable implementation, which improves memory use, garbage collection efficiency and lookup
|
- Added a trie-based memtable implementation, which improves memory use, garbage collection efficiency and lookup
|
||||||
performance. The new memtable is implemented by the TrieMemtable class and can be selected using the memtable
|
performance. The new memtable is implemented by the TrieMemtable class and can be selected using the memtable
|
||||||
|
|
|
||||||
44
build.xml
44
build.xml
|
|
@ -1266,6 +1266,7 @@
|
||||||
<concat destfile="${trie_yaml}">
|
<concat destfile="${trie_yaml}">
|
||||||
<fileset file="${test.conf}/cassandra.yaml"/>
|
<fileset file="${test.conf}/cassandra.yaml"/>
|
||||||
<fileset file="${test.conf}/trie_memtable.yaml"/>
|
<fileset file="${test.conf}/trie_memtable.yaml"/>
|
||||||
|
<fileset file="${test.conf}/storage_compatibility_mode_none.yaml"/>
|
||||||
</concat>
|
</concat>
|
||||||
<testmacrohelper inputdir="${test.unit.src}" filelist="@{test.file.list}"
|
<testmacrohelper inputdir="${test.unit.src}" filelist="@{test.file.list}"
|
||||||
exclude="**/*.java" timeout="${test.timeout}" testtag="trie">
|
exclude="**/*.java" timeout="${test.timeout}" testtag="trie">
|
||||||
|
|
@ -1274,11 +1275,33 @@
|
||||||
<jvmarg value="-Dcassandra.ring_delay_ms=1000"/>
|
<jvmarg value="-Dcassandra.ring_delay_ms=1000"/>
|
||||||
<jvmarg value="-Dcassandra.tolerate_sstable_size=true"/>
|
<jvmarg value="-Dcassandra.tolerate_sstable_size=true"/>
|
||||||
<jvmarg value="-Dcassandra.config=file:///${trie_yaml}"/>
|
<jvmarg value="-Dcassandra.config=file:///${trie_yaml}"/>
|
||||||
|
<jvmarg value="-Dcassandra.junit_storage_compatibility_mode=NONE"/>
|
||||||
<jvmarg value="-Dcassandra.skip_sync=true" />
|
<jvmarg value="-Dcassandra.skip_sync=true" />
|
||||||
</testmacrohelper>
|
</testmacrohelper>
|
||||||
</sequential>
|
</sequential>
|
||||||
</macrodef>
|
</macrodef>
|
||||||
|
|
||||||
|
<macrodef name="testlist-oa">
|
||||||
|
<attribute name="test.file.list"/>
|
||||||
|
<sequential>
|
||||||
|
<property name="scm_none_yaml" value="${build.test.dir}/cassandra.scm_none.yaml"/>
|
||||||
|
<concat destfile="${scm_none_yaml}">
|
||||||
|
<fileset file="${test.conf}/cassandra.yaml"/>
|
||||||
|
<fileset file="${test.conf}/storage_compatibility_mode_none.yaml"/>
|
||||||
|
</concat>
|
||||||
|
<testmacrohelper inputdir="${test.dir}/${test.classlistprefix}" filelist="@{test.file.list}"
|
||||||
|
exclude="**/*.java" timeout="${test.timeout}" testtag="oa">
|
||||||
|
<jvmarg value="-Dlegacy-sstable-root=${test.data}/legacy-sstables"/>
|
||||||
|
<jvmarg value="-Dinvalid-legacy-sstable-root=${test.data}/invalid-legacy-sstables"/>
|
||||||
|
<jvmarg value="-Dcassandra.ring_delay_ms=1000"/>
|
||||||
|
<jvmarg value="-Dcassandra.tolerate_sstable_size=true"/>
|
||||||
|
<jvmarg value="-Dcassandra.config=file:///${scm_none_yaml}"/>
|
||||||
|
<jvmarg value="-Dcassandra.junit_storage_compatibility_mode=NONE"/>
|
||||||
|
<jvmarg value="-Dcassandra.skip_sync=true" />
|
||||||
|
</testmacrohelper>
|
||||||
|
</sequential>
|
||||||
|
</macrodef>
|
||||||
|
|
||||||
<macrodef name="testlist-system-keyspace-directory">
|
<macrodef name="testlist-system-keyspace-directory">
|
||||||
<attribute name="test.file.list" />
|
<attribute name="test.file.list" />
|
||||||
<sequential>
|
<sequential>
|
||||||
|
|
@ -1395,6 +1418,14 @@
|
||||||
<testhelper testdelegate="testlist-trie" />
|
<testhelper testdelegate="testlist-trie" />
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
|
<target name="test-oa" depends="maybe-build-test" description="Test Runner for the oa sstable format">
|
||||||
|
<path id="all-test-classes-path">
|
||||||
|
<fileset dir="${test.unit.src}" includes="**/${test.name}.java" excludes="**/distributed/test/UpgradeTest*.java" />
|
||||||
|
</path>
|
||||||
|
<property name="all-test-classes" refid="all-test-classes-path"/>
|
||||||
|
<testhelper testdelegate="testlist-oa"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
<target name="test-system-keyspace-directory" depends="maybe-build-test" description="Execute unit tests with a system keyspaces directory configured">
|
<target name="test-system-keyspace-directory" depends="maybe-build-test" description="Execute unit tests with a system keyspaces directory configured">
|
||||||
<path id="all-test-classes-path">
|
<path id="all-test-classes-path">
|
||||||
<fileset dir="${test.unit.src}" includes="**/${test.name}.java" />
|
<fileset dir="${test.unit.src}" includes="**/${test.name}.java" />
|
||||||
|
|
@ -1635,6 +1666,13 @@
|
||||||
<property name="all-test-classes" refid="all-test-classes-path"/>
|
<property name="all-test-classes" refid="all-test-classes-path"/>
|
||||||
<testhelper testdelegate="testlist"/>
|
<testhelper testdelegate="testlist"/>
|
||||||
</target>
|
</target>
|
||||||
|
<target name="testclasslist-oa" depends="maybe-build-test" description="Run tests given in file -Dtest.classlistfile (one-class-per-line, e.g. org/apache/cassandra/db/SomeTest.java)">
|
||||||
|
<path id="all-test-classes-path">
|
||||||
|
<fileset dir="${test.dir}/${test.classlistprefix}" includesfile="${test.classlistfile}"/>
|
||||||
|
</path>
|
||||||
|
<property name="all-test-classes" refid="all-test-classes-path"/>
|
||||||
|
<testhelper testdelegate="testlist-oa"/>
|
||||||
|
</target>
|
||||||
<target name="testclasslist-compression" depends="maybe-build-test" description="Run tests given in file -Dtest.classlistfile (one-class-per-line, e.g. org/apache/cassandra/db/SomeTest.java)">
|
<target name="testclasslist-compression" depends="maybe-build-test" description="Run tests given in file -Dtest.classlistfile (one-class-per-line, e.g. org/apache/cassandra/db/SomeTest.java)">
|
||||||
<path id="all-test-classes-path">
|
<path id="all-test-classes-path">
|
||||||
<fileset dir="${test.dir}/${test.classlistprefix}" includesfile="${test.classlistfile}"/>
|
<fileset dir="${test.dir}/${test.classlistprefix}" includesfile="${test.classlistfile}"/>
|
||||||
|
|
@ -1721,6 +1759,10 @@
|
||||||
</testmacro>
|
</testmacro>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
|
<!-- To run them you'll need to:
|
||||||
|
- `ant dtest-jar` on each version involved, including your current feature branch
|
||||||
|
- copy the build/dtest-*.jar for each version into your feature branch build folder
|
||||||
|
- You can use 'test-jvm-dtest-some' if you only need to run one -->
|
||||||
<target name="test-jvm-upgrade-dtest" depends="maybe-build-test" description="Execute in-jvm dtests">
|
<target name="test-jvm-upgrade-dtest" depends="maybe-build-test" description="Execute in-jvm dtests">
|
||||||
<testmacro inputdir="${test.distributed.src}" timeout="${test.distributed.timeout}" forkmode="once" showoutput="true" filter="**/upgrade/*Test.java">
|
<testmacro inputdir="${test.distributed.src}" timeout="${test.distributed.timeout}" forkmode="once" showoutput="true" filter="**/upgrade/*Test.java">
|
||||||
<jvmarg value="-Dlogback.configurationFile=test/conf/logback-dtest.xml"/>
|
<jvmarg value="-Dlogback.configurationFile=test/conf/logback-dtest.xml"/>
|
||||||
|
|
@ -1730,7 +1772,7 @@
|
||||||
</testmacro>
|
</testmacro>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- Use this with an FQDN for test class, and an optional csv list of methods like this:
|
<!-- Use this with an FQDN for test class or upgrade test, and an optional csv list of methods like this:
|
||||||
ant test-jvm-dtest-some -Dtest.name=org.apache.cassandra.distributed.test.ResourceLeakTest
|
ant test-jvm-dtest-some -Dtest.name=org.apache.cassandra.distributed.test.ResourceLeakTest
|
||||||
ant test-jvm-dtest-some -Dtest.name=org.apache.cassandra.distributed.test.ResourceLeakTest -Dtest.methods=looperTest
|
ant test-jvm-dtest-some -Dtest.name=org.apache.cassandra.distributed.test.ResourceLeakTest -Dtest.methods=looperTest
|
||||||
-->
|
-->
|
||||||
|
|
|
||||||
|
|
@ -1975,3 +1975,30 @@ drop_compact_storage_enabled: false
|
||||||
# heartbeat_file: /var/lib/cassandra/data/cassandra-heartbeat
|
# heartbeat_file: /var/lib/cassandra/data/cassandra-heartbeat
|
||||||
# excluded_keyspaces: # comma separated list of keyspaces to exclude from the check
|
# excluded_keyspaces: # comma separated list of keyspaces to exclude from the check
|
||||||
# excluded_tables: # comma separated list of keyspace.table pairs to exclude from the check
|
# excluded_tables: # comma separated list of keyspace.table pairs to exclude from the check
|
||||||
|
|
||||||
|
# This property indicates with what Cassandra major version the storage format will be compatible with.
|
||||||
|
#
|
||||||
|
# The chosen storage compatiblity mode will determine the versions of the written sstables, commitlogs, hints,
|
||||||
|
# etc. Those storage elements will use the higher minor versions of the major version that corresponds to the
|
||||||
|
# Cassandra version we want to stay compatible with. For example, if we want to stay compatible with Cassandra 4.0
|
||||||
|
# or 4.1, the value of this property should be 4, and that will make us use 'nc' sstables.
|
||||||
|
#
|
||||||
|
# This will also determine if certain features depending on newer formats are available. For example, extended TTLs
|
||||||
|
# up to 2106 depend on the sstable, commitlog, hints and messaging versions that were introduced by Cassandra 5.0,
|
||||||
|
# so that feature won't be available if this property is set to CASSANDRA_4. See upgrade guides for details. Currently
|
||||||
|
# the only supported major is CASSANDRA_4.
|
||||||
|
#
|
||||||
|
# Possible values are in the StorageCompatibilityMode.java file accessible online. At the time of writing these are:
|
||||||
|
# - CASSANDRA_4: Stays compatible with the 4.x line in features, formats and component versions.
|
||||||
|
# - UPGRADING: The cluster monitors nodes versions during this interim stage. _This has a cost_ but ensures any new features,
|
||||||
|
# formats, versions, etc are enabled safely.
|
||||||
|
# - NONE: Start with all the new features and formats enabled.
|
||||||
|
#
|
||||||
|
# A typical upgrade would be:
|
||||||
|
# - Do a rolling upgrade starting all nodes in CASSANDRA_Y compatibility mode.
|
||||||
|
# - Once the new binary is rendered stable do a rolling restart with UPGRADING. The cluster will enable new features in a safe way
|
||||||
|
# until all nodes are started in UPGRADING, then all new features are enabled.
|
||||||
|
# - Do a rolling restart with all nodes starting with NONE. This sheds the extra cost of checking nodes versions and ensures
|
||||||
|
# a stable cluster. If a node from a previous version was started by accident we won't any longer toggle behaviors as when UPGRADING.
|
||||||
|
#
|
||||||
|
storage_compatibility_mode: CASSANDRA_4
|
||||||
|
|
|
||||||
|
|
@ -178,8 +178,11 @@
|
||||||
###################################
|
###################################
|
||||||
|
|
||||||
# Defines how to handle INSERT requests with TTL exceeding the maximum supported expiration date:
|
# Defines how to handle INSERT requests with TTL exceeding the maximum supported expiration date:
|
||||||
# * REJECT: this is the default policy and will reject any requests with expiration date timestamp after 2038-01-19T03:14:06+00:00.
|
# * REJECT: this is the default policy and will reject any requests with expiration date timestamp
|
||||||
# * CAP: any insert with TTL expiring after 2038-01-19T03:14:06+00:00 will expire on 2038-01-19T03:14:06+00:00 and the client will receive a warning.
|
# after 2106-02-07T06:28:13+00:00 or 2038-01-19T03:14:06+00:00 depending on compatibility mode (<="nc" sstable formats)
|
||||||
|
# * CAP: any insert with TTL expiring after 2106-02-07T06:28:13+00:00 or 2038-01-19T03:14:06+00:00,
|
||||||
|
# depending on compatibility mode (<="nc" sstable formats), will expire on 2106-02-07T06:28:13+00:00
|
||||||
|
# or 2038-01-19T03:14:06+00:00 and the client will receive a warning.
|
||||||
# * CAP_NOWARN: same as previous, except that the client warning will not be emitted.
|
# * CAP_NOWARN: same as previous, except that the client warning will not be emitted.
|
||||||
#
|
#
|
||||||
#-Dcassandra.expiration_date_overflow_policy=REJECT
|
#-Dcassandra.expiration_date_overflow_policy=REJECT
|
||||||
|
|
|
||||||
|
|
@ -112,7 +112,7 @@ public final class CounterCacheKey extends CacheKey
|
||||||
|
|
||||||
CellPath path = column.isComplex() ? CellPath.create(buffers.get(buffers.size() - 1)) : null;
|
CellPath path = column.isComplex() ? CellPath.create(buffers.get(buffers.size() - 1)) : null;
|
||||||
|
|
||||||
int nowInSec = FBUtilities.nowInSeconds();
|
long nowInSec = FBUtilities.nowInSeconds();
|
||||||
ColumnFilter.Builder builder = ColumnFilter.selectionBuilder();
|
ColumnFilter.Builder builder = ColumnFilter.selectionBuilder();
|
||||||
if (path == null)
|
if (path == null)
|
||||||
builder.add(column);
|
builder.add(column);
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ import com.google.common.primitives.Ints;
|
||||||
import org.apache.cassandra.db.virtual.LogMessagesTable;
|
import org.apache.cassandra.db.virtual.LogMessagesTable;
|
||||||
import org.apache.cassandra.exceptions.ConfigurationException;
|
import org.apache.cassandra.exceptions.ConfigurationException;
|
||||||
import org.apache.cassandra.service.FileSystemOwnershipCheck;
|
import org.apache.cassandra.service.FileSystemOwnershipCheck;
|
||||||
|
import org.apache.cassandra.utils.StorageCompatibilityMode;
|
||||||
|
|
||||||
// checkstyle: suppress below 'blockSystemPropertyUsage'
|
// checkstyle: suppress below 'blockSystemPropertyUsage'
|
||||||
|
|
||||||
|
|
@ -287,6 +288,14 @@ public enum CassandraRelevantProperties
|
||||||
/** Java Virtual Machine implementation name */
|
/** Java Virtual Machine implementation name */
|
||||||
JAVA_VM_NAME("java.vm.name"),
|
JAVA_VM_NAME("java.vm.name"),
|
||||||
JOIN_RING("cassandra.join_ring", "true"),
|
JOIN_RING("cassandra.join_ring", "true"),
|
||||||
|
/**
|
||||||
|
* {@link StorageCompatibilityMode} mode sets how the node will behave, sstable or messaging versions to use etc according to a yaml setting.
|
||||||
|
* But many tests don't load the config hence we need to force it otherwise they would run always under the default. Config is null for junits
|
||||||
|
* that don't load the config. Get from env var that CI/build.xml sets.
|
||||||
|
*
|
||||||
|
* This is a dev/CI only property. Do not use otherwise.
|
||||||
|
*/
|
||||||
|
JUNIT_STORAGE_COMPATIBILITY_MODE("cassandra.junit_storage_compatibility_mode", StorageCompatibilityMode.CASSANDRA_4.toString()),
|
||||||
/** startup checks properties */
|
/** startup checks properties */
|
||||||
LIBJEMALLOC("cassandra.libjemalloc"),
|
LIBJEMALLOC("cassandra.libjemalloc"),
|
||||||
/** Line separator ("\n" on UNIX). */
|
/** Line separator ("\n" on UNIX). */
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ import org.apache.cassandra.db.ConsistencyLevel;
|
||||||
import org.apache.cassandra.fql.FullQueryLoggerOptions;
|
import org.apache.cassandra.fql.FullQueryLoggerOptions;
|
||||||
import org.apache.cassandra.io.sstable.format.big.BigFormat;
|
import org.apache.cassandra.io.sstable.format.big.BigFormat;
|
||||||
import org.apache.cassandra.service.StartupChecks.StartupCheckType;
|
import org.apache.cassandra.service.StartupChecks.StartupCheckType;
|
||||||
|
import org.apache.cassandra.utils.StorageCompatibilityMode;
|
||||||
|
|
||||||
import static org.apache.cassandra.config.CassandraRelevantProperties.AUTOCOMPACTION_ON_STARTUP_ENABLED;
|
import static org.apache.cassandra.config.CassandraRelevantProperties.AUTOCOMPACTION_ON_STARTUP_ENABLED;
|
||||||
import static org.apache.cassandra.config.CassandraRelevantProperties.FILE_CACHE_ENABLED;
|
import static org.apache.cassandra.config.CassandraRelevantProperties.FILE_CACHE_ENABLED;
|
||||||
|
|
@ -1231,5 +1232,8 @@ public class Config
|
||||||
public volatile boolean dump_heap_on_uncaught_exception = false;
|
public volatile boolean dump_heap_on_uncaught_exception = false;
|
||||||
public String heap_dump_path = "heapdump";
|
public String heap_dump_path = "heapdump";
|
||||||
|
|
||||||
|
|
||||||
public double severity_during_decommission = 0;
|
public double severity_during_decommission = 0;
|
||||||
|
|
||||||
|
public StorageCompatibilityMode storage_compatibility_mode = StorageCompatibilityMode.CASSANDRA_4;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,7 @@ import org.apache.cassandra.security.SSLFactory;
|
||||||
import org.apache.cassandra.service.CacheService.CacheType;
|
import org.apache.cassandra.service.CacheService.CacheType;
|
||||||
import org.apache.cassandra.service.paxos.Paxos;
|
import org.apache.cassandra.service.paxos.Paxos;
|
||||||
import org.apache.cassandra.utils.FBUtilities;
|
import org.apache.cassandra.utils.FBUtilities;
|
||||||
|
import org.apache.cassandra.utils.StorageCompatibilityMode;
|
||||||
|
|
||||||
import static org.apache.cassandra.config.CassandraRelevantProperties.ALLOCATE_TOKENS_FOR_KEYSPACE;
|
import static org.apache.cassandra.config.CassandraRelevantProperties.ALLOCATE_TOKENS_FOR_KEYSPACE;
|
||||||
import static org.apache.cassandra.config.CassandraRelevantProperties.ALLOW_UNLIMITED_CONCURRENT_VALIDATIONS;
|
import static org.apache.cassandra.config.CassandraRelevantProperties.ALLOW_UNLIMITED_CONCURRENT_VALIDATIONS;
|
||||||
|
|
@ -4775,4 +4776,13 @@ public class DatabaseDescriptor
|
||||||
OptionalDouble.of(conf.severity_during_decommission) :
|
OptionalDouble.of(conf.severity_during_decommission) :
|
||||||
OptionalDouble.empty();
|
OptionalDouble.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static StorageCompatibilityMode getStorageCompatibilityMode()
|
||||||
|
{
|
||||||
|
// Config is null for junits that don't load the config. Get from env var that CI/build.xml sets
|
||||||
|
if (conf == null)
|
||||||
|
return CassandraRelevantProperties.JUNIT_STORAGE_COMPATIBILITY_MODE.getEnum(StorageCompatibilityMode.CASSANDRA_4);
|
||||||
|
else
|
||||||
|
return conf.storage_compatibility_mode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,7 @@ public class Attributes
|
||||||
}
|
}
|
||||||
catch (MarshalException e)
|
catch (MarshalException e)
|
||||||
{
|
{
|
||||||
throw new InvalidRequestException("Invalid timestamp value: " + tval);
|
throw new InvalidRequestException("Invalid TTL value: " + tval);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ttl = Int32Type.instance.compose(tval);
|
int ttl = Int32Type.instance.compose(tval);
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,7 @@ public abstract class BatchQueryOptions
|
||||||
return wrapped.getTimestamp(state);
|
return wrapped.getTimestamp(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getNowInSeconds(QueryState state)
|
public long getNowInSeconds(QueryState state)
|
||||||
{
|
{
|
||||||
return wrapped.getNowInSeconds(state);
|
return wrapped.getNowInSeconds(state);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ import org.apache.cassandra.transport.CBCodec;
|
||||||
import org.apache.cassandra.transport.CBUtil;
|
import org.apache.cassandra.transport.CBUtil;
|
||||||
import org.apache.cassandra.transport.ProtocolException;
|
import org.apache.cassandra.transport.ProtocolException;
|
||||||
import org.apache.cassandra.transport.ProtocolVersion;
|
import org.apache.cassandra.transport.ProtocolVersion;
|
||||||
|
import org.apache.cassandra.utils.CassandraUInt;
|
||||||
import org.apache.cassandra.utils.Pair;
|
import org.apache.cassandra.utils.Pair;
|
||||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||||
|
|
@ -53,6 +54,8 @@ public abstract class QueryOptions
|
||||||
|
|
||||||
public static final CBCodec<QueryOptions> codec = new Codec();
|
public static final CBCodec<QueryOptions> codec = new Codec();
|
||||||
|
|
||||||
|
private static final long UNSET_NOWINSEC = Long.MIN_VALUE;
|
||||||
|
|
||||||
// A cache of bind values parsed as JSON, see getJsonColumnValue for details.
|
// A cache of bind values parsed as JSON, see getJsonColumnValue for details.
|
||||||
private List<Map<ColumnIdentifier, Term>> jsonValuesCache;
|
private List<Map<ColumnIdentifier, Term>> jsonValuesCache;
|
||||||
|
|
||||||
|
|
@ -61,7 +64,7 @@ public abstract class QueryOptions
|
||||||
return new DefaultQueryOptions(consistency, values, false, SpecificOptions.DEFAULT, ProtocolVersion.V3);
|
return new DefaultQueryOptions(consistency, values, false, SpecificOptions.DEFAULT, ProtocolVersion.V3);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static QueryOptions forInternalCallsWithNowInSec(int nowInSec, ConsistencyLevel consistency, List<ByteBuffer> values)
|
public static QueryOptions forInternalCallsWithNowInSec(long nowInSec, ConsistencyLevel consistency, List<ByteBuffer> values)
|
||||||
{
|
{
|
||||||
return new DefaultQueryOptions(consistency, values, false, SpecificOptions.DEFAULT.withNowInSec(nowInSec), ProtocolVersion.CURRENT);
|
return new DefaultQueryOptions(consistency, values, false, SpecificOptions.DEFAULT.withNowInSec(nowInSec), ProtocolVersion.CURRENT);
|
||||||
}
|
}
|
||||||
|
|
@ -85,7 +88,7 @@ public abstract class QueryOptions
|
||||||
ProtocolVersion version,
|
ProtocolVersion version,
|
||||||
String keyspace)
|
String keyspace)
|
||||||
{
|
{
|
||||||
return create(consistency, values, skipMetadata, pageSize, pagingState, serialConsistency, version, keyspace, Long.MIN_VALUE, Integer.MIN_VALUE);
|
return create(consistency, values, skipMetadata, pageSize, pagingState, serialConsistency, version, keyspace, Long.MIN_VALUE, UNSET_NOWINSEC);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static QueryOptions create(ConsistencyLevel consistency,
|
public static QueryOptions create(ConsistencyLevel consistency,
|
||||||
|
|
@ -97,7 +100,7 @@ public abstract class QueryOptions
|
||||||
ProtocolVersion version,
|
ProtocolVersion version,
|
||||||
String keyspace,
|
String keyspace,
|
||||||
long timestamp,
|
long timestamp,
|
||||||
int nowInSeconds)
|
long nowInSeconds)
|
||||||
{
|
{
|
||||||
return new DefaultQueryOptions(consistency,
|
return new DefaultQueryOptions(consistency,
|
||||||
values,
|
values,
|
||||||
|
|
@ -206,19 +209,19 @@ public abstract class QueryOptions
|
||||||
return tstamp != Long.MIN_VALUE ? tstamp : state.getTimestamp();
|
return tstamp != Long.MIN_VALUE ? tstamp : state.getTimestamp();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getNowInSeconds(QueryState state)
|
public long getNowInSeconds(QueryState state)
|
||||||
{
|
{
|
||||||
int nowInSeconds = getSpecificOptions().nowInSeconds;
|
long nowInSeconds = getSpecificOptions().nowInSeconds;
|
||||||
return nowInSeconds != Integer.MIN_VALUE ? nowInSeconds : state.getNowInSeconds();
|
return nowInSeconds != UNSET_NOWINSEC ? nowInSeconds : state.getNowInSeconds();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The keyspace that this query is bound to, or null if not relevant. */
|
/** The keyspace that this query is bound to, or null if not relevant. */
|
||||||
public String getKeyspace() { return getSpecificOptions().keyspace; }
|
public String getKeyspace() { return getSpecificOptions().keyspace; }
|
||||||
|
|
||||||
public int getNowInSec(int ifNotSet)
|
public long getNowInSec(long ifNotSet)
|
||||||
{
|
{
|
||||||
int nowInSec = getSpecificOptions().nowInSeconds;
|
long nowInSec = getSpecificOptions().nowInSeconds;
|
||||||
return nowInSec != Integer.MIN_VALUE ? nowInSec : ifNotSet;
|
return nowInSec != UNSET_NOWINSEC ? nowInSec : ifNotSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -490,21 +493,21 @@ public abstract class QueryOptions
|
||||||
// Options that are likely to not be present in most queries
|
// Options that are likely to not be present in most queries
|
||||||
static class SpecificOptions
|
static class SpecificOptions
|
||||||
{
|
{
|
||||||
private static final SpecificOptions DEFAULT = new SpecificOptions(-1, null, null, Long.MIN_VALUE, null, Integer.MIN_VALUE);
|
private static final SpecificOptions DEFAULT = new SpecificOptions(-1, null, null, Long.MIN_VALUE, null, UNSET_NOWINSEC);
|
||||||
|
|
||||||
private final int pageSize;
|
private final int pageSize;
|
||||||
private final PagingState state;
|
private final PagingState state;
|
||||||
private final ConsistencyLevel serialConsistency;
|
private final ConsistencyLevel serialConsistency;
|
||||||
private final long timestamp;
|
private final long timestamp;
|
||||||
private final String keyspace;
|
private final String keyspace;
|
||||||
private final int nowInSeconds;
|
private final long nowInSeconds;
|
||||||
|
|
||||||
private SpecificOptions(int pageSize,
|
private SpecificOptions(int pageSize,
|
||||||
PagingState state,
|
PagingState state,
|
||||||
ConsistencyLevel serialConsistency,
|
ConsistencyLevel serialConsistency,
|
||||||
long timestamp,
|
long timestamp,
|
||||||
String keyspace,
|
String keyspace,
|
||||||
int nowInSeconds)
|
long nowInSeconds)
|
||||||
{
|
{
|
||||||
this.pageSize = pageSize;
|
this.pageSize = pageSize;
|
||||||
this.state = state;
|
this.state = state;
|
||||||
|
|
@ -514,7 +517,7 @@ public abstract class QueryOptions
|
||||||
this.nowInSeconds = nowInSeconds;
|
this.nowInSeconds = nowInSeconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SpecificOptions withNowInSec(int nowInSec)
|
public SpecificOptions withNowInSec(long nowInSec)
|
||||||
{
|
{
|
||||||
return new SpecificOptions(pageSize, state, serialConsistency, timestamp, keyspace, nowInSec);
|
return new SpecificOptions(pageSize, state, serialConsistency, timestamp, keyspace, nowInSec);
|
||||||
}
|
}
|
||||||
|
|
@ -599,7 +602,8 @@ public abstract class QueryOptions
|
||||||
timestamp = ts;
|
timestamp = ts;
|
||||||
}
|
}
|
||||||
String keyspace = flags.contains(Flag.KEYSPACE) ? CBUtil.readString(body) : null;
|
String keyspace = flags.contains(Flag.KEYSPACE) ? CBUtil.readString(body) : null;
|
||||||
int nowInSeconds = flags.contains(Flag.NOW_IN_SECONDS) ? body.readInt() : Integer.MIN_VALUE;
|
long nowInSeconds = flags.contains(Flag.NOW_IN_SECONDS) ? CassandraUInt.toLong(body.readInt())
|
||||||
|
: UNSET_NOWINSEC;
|
||||||
options = new SpecificOptions(pageSize, pagingState, serialConsistency, timestamp, keyspace, nowInSeconds);
|
options = new SpecificOptions(pageSize, pagingState, serialConsistency, timestamp, keyspace, nowInSeconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -630,7 +634,7 @@ public abstract class QueryOptions
|
||||||
if (flags.contains(Flag.KEYSPACE))
|
if (flags.contains(Flag.KEYSPACE))
|
||||||
CBUtil.writeAsciiString(options.getSpecificOptions().keyspace, dest);
|
CBUtil.writeAsciiString(options.getSpecificOptions().keyspace, dest);
|
||||||
if (flags.contains(Flag.NOW_IN_SECONDS))
|
if (flags.contains(Flag.NOW_IN_SECONDS))
|
||||||
dest.writeInt(options.getSpecificOptions().nowInSeconds);
|
dest.writeInt(CassandraUInt.fromLong(options.getSpecificOptions().nowInSeconds));
|
||||||
|
|
||||||
// Note that we don't really have to bother with NAMES_FOR_VALUES server side,
|
// Note that we don't really have to bother with NAMES_FOR_VALUES server side,
|
||||||
// and in fact we never really encode QueryOptions, only decode them, so we
|
// and in fact we never really encode QueryOptions, only decode them, so we
|
||||||
|
|
@ -684,7 +688,7 @@ public abstract class QueryOptions
|
||||||
{
|
{
|
||||||
if (options.getSpecificOptions().keyspace != null)
|
if (options.getSpecificOptions().keyspace != null)
|
||||||
flags.add(Flag.KEYSPACE);
|
flags.add(Flag.KEYSPACE);
|
||||||
if (options.getSpecificOptions().nowInSeconds != Integer.MIN_VALUE)
|
if (options.getSpecificOptions().nowInSeconds != UNSET_NOWINSEC)
|
||||||
flags.add(Flag.NOW_IN_SECONDS);
|
flags.add(Flag.NOW_IN_SECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -384,12 +384,12 @@ public class QueryProcessor implements QueryHandler
|
||||||
return makeInternalOptionsWithNowInSec(prepared, FBUtilities.nowInSeconds(), values, cl);
|
return makeInternalOptionsWithNowInSec(prepared, FBUtilities.nowInSeconds(), values, cl);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static QueryOptions makeInternalOptionsWithNowInSec(CQLStatement prepared, int nowInSec, Object[] values)
|
public static QueryOptions makeInternalOptionsWithNowInSec(CQLStatement prepared, long nowInSec, Object[] values)
|
||||||
{
|
{
|
||||||
return makeInternalOptionsWithNowInSec(prepared, nowInSec, values, ConsistencyLevel.ONE);
|
return makeInternalOptionsWithNowInSec(prepared, nowInSec, values, ConsistencyLevel.ONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static QueryOptions makeInternalOptionsWithNowInSec(CQLStatement prepared, int nowInSec, Object[] values, ConsistencyLevel cl)
|
private static QueryOptions makeInternalOptionsWithNowInSec(CQLStatement prepared, long nowInSec, Object[] values, ConsistencyLevel cl)
|
||||||
{
|
{
|
||||||
if (prepared.getBindVariables().size() != values.length)
|
if (prepared.getBindVariables().size() != values.length)
|
||||||
throw new IllegalArgumentException(String.format("Invalid number of values. Expecting %d but got %d", prepared.getBindVariables().size(), values.length));
|
throw new IllegalArgumentException(String.format("Invalid number of values. Expecting %d but got %d", prepared.getBindVariables().size(), values.length));
|
||||||
|
|
@ -454,7 +454,7 @@ public class QueryProcessor implements QueryHandler
|
||||||
public static Future<UntypedResultSet> executeAsync(InetAddressAndPort address, String query, Object... values)
|
public static Future<UntypedResultSet> executeAsync(InetAddressAndPort address, String query, Object... values)
|
||||||
{
|
{
|
||||||
Prepared prepared = prepareInternal(query);
|
Prepared prepared = prepareInternal(query);
|
||||||
int nowInSec = FBUtilities.nowInSeconds();
|
long nowInSec = FBUtilities.nowInSeconds();
|
||||||
QueryOptions options = makeInternalOptionsWithNowInSec(prepared.statement, nowInSec, values);
|
QueryOptions options = makeInternalOptionsWithNowInSec(prepared.statement, nowInSec, values);
|
||||||
if (prepared.statement instanceof SelectStatement)
|
if (prepared.statement instanceof SelectStatement)
|
||||||
{
|
{
|
||||||
|
|
@ -512,7 +512,7 @@ public class QueryProcessor implements QueryHandler
|
||||||
return execute(query, cl, internalQueryState(), values);
|
return execute(query, cl, internalQueryState(), values);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static UntypedResultSet executeInternalWithNowInSec(String query, int nowInSec, Object... values)
|
public static UntypedResultSet executeInternalWithNowInSec(String query, long nowInSec, Object... values)
|
||||||
{
|
{
|
||||||
Prepared prepared = prepareInternal(query);
|
Prepared prepared = prepareInternal(query);
|
||||||
ResultMessage result = prepared.statement.executeLocally(internalQueryState(), makeInternalOptionsWithNowInSec(prepared.statement, nowInSec, values));
|
ResultMessage result = prepared.statement.executeLocally(internalQueryState(), makeInternalOptionsWithNowInSec(prepared.statement, nowInSec, values));
|
||||||
|
|
@ -547,7 +547,7 @@ public class QueryProcessor implements QueryHandler
|
||||||
throw new IllegalArgumentException("Only SELECTs can be paged");
|
throw new IllegalArgumentException("Only SELECTs can be paged");
|
||||||
|
|
||||||
SelectStatement select = (SelectStatement)prepared.statement;
|
SelectStatement select = (SelectStatement)prepared.statement;
|
||||||
int nowInSec = FBUtilities.nowInSeconds();
|
long nowInSec = FBUtilities.nowInSeconds();
|
||||||
QueryPager pager = select.getQuery(makeInternalOptionsWithNowInSec(prepared.statement, nowInSec, values), nowInSec).getPager(null, ProtocolVersion.CURRENT);
|
QueryPager pager = select.getQuery(makeInternalOptionsWithNowInSec(prepared.statement, nowInSec, values), nowInSec).getPager(null, ProtocolVersion.CURRENT);
|
||||||
return UntypedResultSet.create(select, pager, pageSize);
|
return UntypedResultSet.create(select, pager, pageSize);
|
||||||
}
|
}
|
||||||
|
|
@ -566,7 +566,7 @@ public class QueryProcessor implements QueryHandler
|
||||||
* <p>This method ensure that the statement will not be cached in the prepared statement cache.</p>
|
* <p>This method ensure that the statement will not be cached in the prepared statement cache.</p>
|
||||||
*/
|
*/
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public static UntypedResultSet executeOnceInternalWithNowAndTimestamp(int nowInSec, long timestamp, String query, Object... values)
|
public static UntypedResultSet executeOnceInternalWithNowAndTimestamp(long nowInSec, long timestamp, String query, Object... values)
|
||||||
{
|
{
|
||||||
QueryState queryState = new QueryState(InternalStateInstance.INSTANCE.clientState, timestamp, nowInSec);
|
QueryState queryState = new QueryState(InternalStateInstance.INSTANCE.clientState, timestamp, nowInSec);
|
||||||
return executeOnceInternal(queryState, query, values);
|
return executeOnceInternal(queryState, query, values);
|
||||||
|
|
@ -588,7 +588,7 @@ public class QueryProcessor implements QueryHandler
|
||||||
* Note that this only make sense for Selects so this only accept SELECT statements and is only useful in rare
|
* Note that this only make sense for Selects so this only accept SELECT statements and is only useful in rare
|
||||||
* cases.
|
* cases.
|
||||||
*/
|
*/
|
||||||
public static UntypedResultSet executeInternalWithNow(int nowInSec, long queryStartNanoTime, String query, Object... values)
|
public static UntypedResultSet executeInternalWithNow(long nowInSec, long queryStartNanoTime, String query, Object... values)
|
||||||
{
|
{
|
||||||
Prepared prepared = prepareInternal(query);
|
Prepared prepared = prepareInternal(query);
|
||||||
assert prepared.statement instanceof SelectStatement;
|
assert prepared.statement instanceof SelectStatement;
|
||||||
|
|
@ -603,7 +603,7 @@ public class QueryProcessor implements QueryHandler
|
||||||
* Note that this only make sense for Selects so this only accept SELECT statements and is only useful in rare
|
* Note that this only make sense for Selects so this only accept SELECT statements and is only useful in rare
|
||||||
* cases.
|
* cases.
|
||||||
*/
|
*/
|
||||||
public static Map<DecoratedKey, List<Row>> executeInternalRawWithNow(int nowInSec, String query, Object... values)
|
public static Map<DecoratedKey, List<Row>> executeInternalRawWithNow(long nowInSec, String query, Object... values)
|
||||||
{
|
{
|
||||||
Prepared prepared = prepareInternal(query);
|
Prepared prepared = prepareInternal(query);
|
||||||
assert prepared.statement instanceof SelectStatement;
|
assert prepared.statement instanceof SelectStatement;
|
||||||
|
|
|
||||||
|
|
@ -212,7 +212,7 @@ public abstract class UntypedResultSet implements Iterable<UntypedResultSet.Row>
|
||||||
|
|
||||||
protected Row computeNext()
|
protected Row computeNext()
|
||||||
{
|
{
|
||||||
int nowInSec = FBUtilities.nowInSeconds();
|
long nowInSec = FBUtilities.nowInSeconds();
|
||||||
while (currentPage == null || !currentPage.hasNext())
|
while (currentPage == null || !currentPage.hasNext())
|
||||||
{
|
{
|
||||||
if (pager.isExhausted())
|
if (pager.isExhausted())
|
||||||
|
|
@ -278,7 +278,7 @@ public abstract class UntypedResultSet implements Iterable<UntypedResultSet.Row>
|
||||||
|
|
||||||
protected Row computeNext()
|
protected Row computeNext()
|
||||||
{
|
{
|
||||||
int nowInSec = FBUtilities.nowInSeconds();
|
long nowInSec = FBUtilities.nowInSeconds();
|
||||||
while (currentPage == null || !currentPage.hasNext())
|
while (currentPage == null || !currentPage.hasNext())
|
||||||
{
|
{
|
||||||
if (pager.isExhausted())
|
if (pager.isExhausted())
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ public class UpdateParameters
|
||||||
public final ClientState clientState;
|
public final ClientState clientState;
|
||||||
public final QueryOptions options;
|
public final QueryOptions options;
|
||||||
|
|
||||||
private final int nowInSec;
|
private final long nowInSec;
|
||||||
private final long timestamp;
|
private final long timestamp;
|
||||||
private final int ttl;
|
private final int ttl;
|
||||||
|
|
||||||
|
|
@ -61,7 +61,7 @@ public class UpdateParameters
|
||||||
ClientState clientState,
|
ClientState clientState,
|
||||||
QueryOptions options,
|
QueryOptions options,
|
||||||
long timestamp,
|
long timestamp,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
int ttl,
|
int ttl,
|
||||||
Map<DecoratedKey, Partition> prefetchedRows)
|
Map<DecoratedKey, Partition> prefetchedRows)
|
||||||
throws InvalidRequestException
|
throws InvalidRequestException
|
||||||
|
|
@ -75,7 +75,7 @@ public class UpdateParameters
|
||||||
this.timestamp = timestamp;
|
this.timestamp = timestamp;
|
||||||
this.ttl = ttl;
|
this.ttl = ttl;
|
||||||
|
|
||||||
this.deletionTime = new DeletionTime(timestamp, nowInSec);
|
this.deletionTime = DeletionTime.build(timestamp, nowInSec);
|
||||||
|
|
||||||
this.prefetchedRows = prefetchedRows;
|
this.prefetchedRows = prefetchedRows;
|
||||||
|
|
||||||
|
|
@ -201,7 +201,7 @@ public class UpdateParameters
|
||||||
|
|
||||||
public void setComplexDeletionTimeForOverwrite(ColumnMetadata column)
|
public void setComplexDeletionTimeForOverwrite(ColumnMetadata column)
|
||||||
{
|
{
|
||||||
builder.addComplexDeletion(column, new DeletionTime(deletionTime.markedForDeleteAt() - 1, deletionTime.localDeletionTime()));
|
builder.addComplexDeletion(column, DeletionTime.build(deletionTime.markedForDeleteAt() - 1, deletionTime.localDeletionTime()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Row buildRow()
|
public Row buildRow()
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ abstract class ColumnTimestamps
|
||||||
/**
|
/**
|
||||||
* Appends the timestamp of the specified cell at the end of this list.
|
* Appends the timestamp of the specified cell at the end of this list.
|
||||||
*/
|
*/
|
||||||
public abstract void addTimestampFrom(Cell<?> cell, int nowInSecond);
|
public abstract void addTimestampFrom(Cell<?> cell, long nowInSecond);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new {@link ColumnTimestamps} instance for the specified column type.
|
* Creates a new {@link ColumnTimestamps} instance for the specified column type.
|
||||||
|
|
@ -120,7 +120,7 @@ abstract class ColumnTimestamps
|
||||||
WRITETIMES
|
WRITETIMES
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
long getTimestamp(Cell<?> cell, int nowInSecond)
|
long getTimestamp(Cell<?> cell, long nowInSecond)
|
||||||
{
|
{
|
||||||
return cell.timestamp();
|
return cell.timestamp();
|
||||||
}
|
}
|
||||||
|
|
@ -140,12 +140,12 @@ abstract class ColumnTimestamps
|
||||||
TTLS
|
TTLS
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
long getTimestamp(Cell<?> cell, int nowInSecond)
|
long getTimestamp(Cell<?> cell, long nowInSecond)
|
||||||
{
|
{
|
||||||
if (!cell.isExpiring())
|
if (!cell.isExpiring())
|
||||||
return defaultValue();
|
return defaultValue();
|
||||||
|
|
||||||
int remaining = cell.localDeletionTime() - nowInSecond;
|
long remaining = cell.localDeletionTime() - nowInSecond;
|
||||||
return remaining >= 0 ? remaining : defaultValue();
|
return remaining >= 0 ? remaining : defaultValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -169,7 +169,7 @@ abstract class ColumnTimestamps
|
||||||
* @param nowInSecond the query timestamp insecond
|
* @param nowInSecond the query timestamp insecond
|
||||||
* @return the timestamp corresponding to this type
|
* @return the timestamp corresponding to this type
|
||||||
*/
|
*/
|
||||||
abstract long getTimestamp(Cell<?> cell, int nowInSecond);
|
abstract long getTimestamp(Cell<?> cell, long nowInSecond);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the value to use when there is no timestamp.
|
* Returns the value to use when there is no timestamp.
|
||||||
|
|
@ -223,7 +223,7 @@ abstract class ColumnTimestamps
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTimestampFrom(Cell<?> cell, int nowInSecond)
|
public void addTimestampFrom(Cell<?> cell, long nowInSecond)
|
||||||
{
|
{
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
@ -260,7 +260,7 @@ abstract class ColumnTimestamps
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTimestampFrom(Cell<?> cell, int nowInSecond)
|
public void addTimestampFrom(Cell<?> cell, long nowInSecond)
|
||||||
{
|
{
|
||||||
timestamp = type.getTimestamp(cell, nowInSecond);
|
timestamp = type.getTimestamp(cell, nowInSecond);
|
||||||
}
|
}
|
||||||
|
|
@ -323,7 +323,7 @@ abstract class ColumnTimestamps
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTimestampFrom(Cell<?> cell, int nowInSecond)
|
public void addTimestampFrom(Cell<?> cell, long nowInSecond)
|
||||||
{
|
{
|
||||||
timestamps.add(type.getTimestamp(cell, nowInSecond));
|
timestamps.add(type.getTimestamp(cell, nowInSecond));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -107,12 +107,12 @@ public final class ResultSetBuilder
|
||||||
inputRow.add(v);
|
inputRow.add(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void add(Cell<?> c, int nowInSec)
|
public void add(Cell<?> c, long nowInSec)
|
||||||
{
|
{
|
||||||
inputRow.add(c, nowInSec);
|
inputRow.add(c, nowInSec);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void add(ColumnData columnData, int nowInSec)
|
public void add(ColumnData columnData, long nowInSec)
|
||||||
{
|
{
|
||||||
inputRow.add(columnData, nowInSec);
|
inputRow.add(columnData, nowInSec);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ interface RowTimestamps
|
||||||
* @param cell the cell to get the timestamp from
|
* @param cell the cell to get the timestamp from
|
||||||
* @param nowInSec the query timestamp in second
|
* @param nowInSec the query timestamp in second
|
||||||
*/
|
*/
|
||||||
void addTimestamp(int index, Cell<?> cell, int nowInSec);
|
void addTimestamp(int index, Cell<?> cell, long nowInSec);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the timestamp of the specified column.
|
* Returns the timestamp of the specified column.
|
||||||
|
|
@ -63,7 +63,7 @@ interface RowTimestamps
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTimestamp(int index, Cell<?> cell, int nowInSec)
|
public void addTimestamp(int index, Cell<?> cell, long nowInSec)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -90,7 +90,7 @@ interface RowTimestamps
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addTimestamp(int index, Cell<?> cell, int nowInSec)
|
public void addTimestamp(int index, Cell<?> cell, long nowInSec)
|
||||||
{
|
{
|
||||||
array[index].addTimestampFrom(cell, nowInSec);
|
array[index].addTimestampFrom(cell, nowInSec);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -367,7 +367,7 @@ public abstract class Selector
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void add(ColumnData columnData, int nowInSec)
|
public void add(ColumnData columnData, long nowInSec)
|
||||||
{
|
{
|
||||||
ColumnMetadata column = columns.get(index);
|
ColumnMetadata column = columns.get(index);
|
||||||
if (columnData == null)
|
if (columnData == null)
|
||||||
|
|
@ -387,7 +387,7 @@ public abstract class Selector
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void add(Cell<?> c, int nowInSec)
|
private void add(Cell<?> c, long nowInSec)
|
||||||
{
|
{
|
||||||
values[index] = value(c);
|
values[index] = value(c);
|
||||||
writetimes.addTimestamp(index, c, nowInSec);
|
writetimes.addTimestamp(index, c, nowInSec);
|
||||||
|
|
@ -395,7 +395,7 @@ public abstract class Selector
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void add(ComplexColumnData ccd, int nowInSec)
|
private void add(ComplexColumnData ccd, long nowInSec)
|
||||||
{
|
{
|
||||||
AbstractType<?> type = columns.get(index).type;
|
AbstractType<?> type = columns.get(index).type;
|
||||||
if (type.isCollection())
|
if (type.isCollection())
|
||||||
|
|
|
||||||
|
|
@ -271,7 +271,7 @@ public class BatchStatement implements CQLStatement
|
||||||
BatchQueryOptions options,
|
BatchQueryOptions options,
|
||||||
boolean local,
|
boolean local,
|
||||||
long batchTimestamp,
|
long batchTimestamp,
|
||||||
int nowInSeconds,
|
long nowInSeconds,
|
||||||
long queryStartNanoTime)
|
long queryStartNanoTime)
|
||||||
{
|
{
|
||||||
if (statements.isEmpty())
|
if (statements.isEmpty())
|
||||||
|
|
@ -405,7 +405,7 @@ public class BatchStatement implements CQLStatement
|
||||||
public ResultMessage execute(QueryState queryState, BatchQueryOptions options, long queryStartNanoTime)
|
public ResultMessage execute(QueryState queryState, BatchQueryOptions options, long queryStartNanoTime)
|
||||||
{
|
{
|
||||||
long timestamp = options.getTimestamp(queryState);
|
long timestamp = options.getTimestamp(queryState);
|
||||||
int nowInSeconds = options.getNowInSeconds(queryState);
|
long nowInSeconds = options.getNowInSeconds(queryState);
|
||||||
|
|
||||||
if (options.getConsistency() == null)
|
if (options.getConsistency() == null)
|
||||||
throw new InvalidRequestException("Invalid empty consistency level");
|
throw new InvalidRequestException("Invalid empty consistency level");
|
||||||
|
|
@ -489,7 +489,7 @@ public class BatchStatement implements CQLStatement
|
||||||
private Pair<CQL3CasRequest,Set<ColumnMetadata>> makeCasRequest(BatchQueryOptions options, QueryState state)
|
private Pair<CQL3CasRequest,Set<ColumnMetadata>> makeCasRequest(BatchQueryOptions options, QueryState state)
|
||||||
{
|
{
|
||||||
long batchTimestamp = options.getTimestamp(state);
|
long batchTimestamp = options.getTimestamp(state);
|
||||||
int nowInSeconds = options.getNowInSeconds(state);
|
long nowInSeconds = options.getNowInSeconds(state);
|
||||||
DecoratedKey key = null;
|
DecoratedKey key = null;
|
||||||
CQL3CasRequest casRequest = null;
|
CQL3CasRequest casRequest = null;
|
||||||
Set<ColumnMetadata> columnsWithConditions = new LinkedHashSet<>();
|
Set<ColumnMetadata> columnsWithConditions = new LinkedHashSet<>();
|
||||||
|
|
@ -570,7 +570,7 @@ public class BatchStatement implements CQLStatement
|
||||||
private ResultMessage executeInternalWithoutCondition(QueryState queryState, BatchQueryOptions batchOptions, long queryStartNanoTime)
|
private ResultMessage executeInternalWithoutCondition(QueryState queryState, BatchQueryOptions batchOptions, long queryStartNanoTime)
|
||||||
{
|
{
|
||||||
long timestamp = batchOptions.getTimestamp(queryState);
|
long timestamp = batchOptions.getTimestamp(queryState);
|
||||||
int nowInSeconds = batchOptions.getNowInSeconds(queryState);
|
long nowInSeconds = batchOptions.getNowInSeconds(queryState);
|
||||||
|
|
||||||
for (IMutation mutation : getMutations(queryState.getClientState(), batchOptions, true, timestamp, nowInSeconds, queryStartNanoTime))
|
for (IMutation mutation : getMutations(queryState.getClientState(), batchOptions, true, timestamp, nowInSeconds, queryStartNanoTime))
|
||||||
mutation.apply();
|
mutation.apply();
|
||||||
|
|
@ -587,7 +587,7 @@ public class BatchStatement implements CQLStatement
|
||||||
String tableName = request.metadata.name;
|
String tableName = request.metadata.name;
|
||||||
|
|
||||||
long timestamp = options.getTimestamp(state);
|
long timestamp = options.getTimestamp(state);
|
||||||
int nowInSeconds = options.getNowInSeconds(state);
|
long nowInSeconds = options.getNowInSeconds(state);
|
||||||
|
|
||||||
try (RowIterator result = ModificationStatement.casInternal(state.getClientState(), request, timestamp, nowInSeconds))
|
try (RowIterator result = ModificationStatement.casInternal(state.getClientState(), request, timestamp, nowInSeconds))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -80,12 +80,12 @@ public class CQL3CasRequest implements CASRequest
|
||||||
this.updatesStaticRow = updatesStaticRow;
|
this.updatesStaticRow = updatesStaticRow;
|
||||||
}
|
}
|
||||||
|
|
||||||
void addRowUpdate(Clustering<?> clustering, ModificationStatement stmt, QueryOptions options, long timestamp, int nowInSeconds)
|
void addRowUpdate(Clustering<?> clustering, ModificationStatement stmt, QueryOptions options, long timestamp, long nowInSeconds)
|
||||||
{
|
{
|
||||||
updates.add(new RowUpdate(clustering, stmt, options, timestamp, nowInSeconds));
|
updates.add(new RowUpdate(clustering, stmt, options, timestamp, nowInSeconds));
|
||||||
}
|
}
|
||||||
|
|
||||||
void addRangeDeletion(Slice slice, ModificationStatement stmt, QueryOptions options, long timestamp, int nowInSeconds)
|
void addRangeDeletion(Slice slice, ModificationStatement stmt, QueryOptions options, long timestamp, long nowInSeconds)
|
||||||
{
|
{
|
||||||
rangeDeletions.add(new RangeDeletion(slice, stmt, options, timestamp, nowInSeconds));
|
rangeDeletions.add(new RangeDeletion(slice, stmt, options, timestamp, nowInSeconds));
|
||||||
}
|
}
|
||||||
|
|
@ -181,7 +181,7 @@ public class CQL3CasRequest implements CASRequest
|
||||||
return new RegularAndStaticColumns(statics, regulars);
|
return new RegularAndStaticColumns(statics, regulars);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SinglePartitionReadCommand readCommand(int nowInSec)
|
public SinglePartitionReadCommand readCommand(long nowInSec)
|
||||||
{
|
{
|
||||||
assert staticConditions != null || !conditions.isEmpty();
|
assert staticConditions != null || !conditions.isEmpty();
|
||||||
|
|
||||||
|
|
@ -253,7 +253,7 @@ public class CQL3CasRequest implements CASRequest
|
||||||
final long timeUuidMsb;
|
final long timeUuidMsb;
|
||||||
long timeUuidNanos;
|
long timeUuidNanos;
|
||||||
|
|
||||||
public CASUpdateParameters(TableMetadata metadata, RegularAndStaticColumns updatedColumns, ClientState state, QueryOptions options, long timestamp, int nowInSec, int ttl, Map<DecoratedKey, Partition> prefetchedRows, long timeUuidMsb, long timeUuidNanos) throws InvalidRequestException
|
public CASUpdateParameters(TableMetadata metadata, RegularAndStaticColumns updatedColumns, ClientState state, QueryOptions options, long timestamp, long nowInSec, int ttl, Map<DecoratedKey, Partition> prefetchedRows, long timeUuidMsb, long timeUuidNanos) throws InvalidRequestException
|
||||||
{
|
{
|
||||||
super(metadata, updatedColumns, state, options, timestamp, nowInSec, ttl, prefetchedRows);
|
super(metadata, updatedColumns, state, options, timestamp, nowInSec, ttl, prefetchedRows);
|
||||||
this.timeUuidMsb = timeUuidMsb;
|
this.timeUuidMsb = timeUuidMsb;
|
||||||
|
|
@ -278,9 +278,9 @@ public class CQL3CasRequest implements CASRequest
|
||||||
private final ModificationStatement stmt;
|
private final ModificationStatement stmt;
|
||||||
private final QueryOptions options;
|
private final QueryOptions options;
|
||||||
private final long timestamp;
|
private final long timestamp;
|
||||||
private final int nowInSeconds;
|
private final long nowInSeconds;
|
||||||
|
|
||||||
private RowUpdate(Clustering<?> clustering, ModificationStatement stmt, QueryOptions options, long timestamp, int nowInSeconds)
|
private RowUpdate(Clustering<?> clustering, ModificationStatement stmt, QueryOptions options, long timestamp, long nowInSeconds)
|
||||||
{
|
{
|
||||||
this.clustering = clustering;
|
this.clustering = clustering;
|
||||||
this.stmt = stmt;
|
this.stmt = stmt;
|
||||||
|
|
@ -306,9 +306,9 @@ public class CQL3CasRequest implements CASRequest
|
||||||
private final ModificationStatement stmt;
|
private final ModificationStatement stmt;
|
||||||
private final QueryOptions options;
|
private final QueryOptions options;
|
||||||
private final long timestamp;
|
private final long timestamp;
|
||||||
private final int nowInSeconds;
|
private final long nowInSeconds;
|
||||||
|
|
||||||
private RangeDeletion(Slice slice, ModificationStatement stmt, QueryOptions options, long timestamp, int nowInSeconds)
|
private RangeDeletion(Slice slice, ModificationStatement stmt, QueryOptions options, long timestamp, long nowInSeconds)
|
||||||
{
|
{
|
||||||
this.slice = slice;
|
this.slice = slice;
|
||||||
this.stmt = stmt;
|
this.stmt = stmt;
|
||||||
|
|
|
||||||
|
|
@ -422,7 +422,7 @@ public abstract class ModificationStatement implements CQLStatement.SingleKeyspa
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
boolean local,
|
boolean local,
|
||||||
ConsistencyLevel cl,
|
ConsistencyLevel cl,
|
||||||
int nowInSeconds,
|
long nowInSeconds,
|
||||||
long queryStartNanoTime)
|
long queryStartNanoTime)
|
||||||
{
|
{
|
||||||
if (!requiresRead())
|
if (!requiresRead())
|
||||||
|
|
@ -565,7 +565,7 @@ public abstract class ModificationStatement implements CQLStatement.SingleKeyspa
|
||||||
|
|
||||||
DecoratedKey key = metadata().partitioner.decorateKey(keys.get(0));
|
DecoratedKey key = metadata().partitioner.decorateKey(keys.get(0));
|
||||||
long timestamp = options.getTimestamp(queryState);
|
long timestamp = options.getTimestamp(queryState);
|
||||||
int nowInSeconds = options.getNowInSeconds(queryState);
|
long nowInSeconds = options.getNowInSeconds(queryState);
|
||||||
|
|
||||||
checkFalse(restrictions.clusteringKeyRestrictionsHasIN(),
|
checkFalse(restrictions.clusteringKeyRestrictionsHasIN(),
|
||||||
"IN on the clustering key columns is not supported with conditional %s",
|
"IN on the clustering key columns is not supported with conditional %s",
|
||||||
|
|
@ -647,7 +647,7 @@ public abstract class ModificationStatement implements CQLStatement.SingleKeyspa
|
||||||
Iterable<ColumnMetadata> columnsWithConditions,
|
Iterable<ColumnMetadata> columnsWithConditions,
|
||||||
boolean isBatch,
|
boolean isBatch,
|
||||||
QueryOptions options,
|
QueryOptions options,
|
||||||
int nowInSeconds)
|
long nowInSeconds)
|
||||||
{
|
{
|
||||||
TableMetadata metadata = partition.metadata();
|
TableMetadata metadata = partition.metadata();
|
||||||
Selection selection;
|
Selection selection;
|
||||||
|
|
@ -688,7 +688,7 @@ public abstract class ModificationStatement implements CQLStatement.SingleKeyspa
|
||||||
throws RequestValidationException, RequestExecutionException
|
throws RequestValidationException, RequestExecutionException
|
||||||
{
|
{
|
||||||
long timestamp = options.getTimestamp(queryState);
|
long timestamp = options.getTimestamp(queryState);
|
||||||
int nowInSeconds = options.getNowInSeconds(queryState);
|
long nowInSeconds = options.getNowInSeconds(queryState);
|
||||||
for (IMutation mutation : getMutations(queryState.getClientState(), options, true, timestamp, nowInSeconds, queryStartNanoTime))
|
for (IMutation mutation : getMutations(queryState.getClientState(), options, true, timestamp, nowInSeconds, queryStartNanoTime))
|
||||||
mutation.apply();
|
mutation.apply();
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -704,7 +704,7 @@ public abstract class ModificationStatement implements CQLStatement.SingleKeyspa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RowIterator casInternal(ClientState state, CQL3CasRequest request, long timestamp, int nowInSeconds)
|
static RowIterator casInternal(ClientState state, CQL3CasRequest request, long timestamp, long nowInSeconds)
|
||||||
{
|
{
|
||||||
Ballot ballot = BallotGenerator.Global.atUnixMicros(timestamp, NONE);
|
Ballot ballot = BallotGenerator.Global.atUnixMicros(timestamp, NONE);
|
||||||
|
|
||||||
|
|
@ -741,7 +741,7 @@ public abstract class ModificationStatement implements CQLStatement.SingleKeyspa
|
||||||
QueryOptions options,
|
QueryOptions options,
|
||||||
boolean local,
|
boolean local,
|
||||||
long timestamp,
|
long timestamp,
|
||||||
int nowInSeconds,
|
long nowInSeconds,
|
||||||
long queryStartNanoTime)
|
long queryStartNanoTime)
|
||||||
{
|
{
|
||||||
List<ByteBuffer> keys = buildPartitionKeyNames(options, state);
|
List<ByteBuffer> keys = buildPartitionKeyNames(options, state);
|
||||||
|
|
@ -757,7 +757,7 @@ public abstract class ModificationStatement implements CQLStatement.SingleKeyspa
|
||||||
QueryOptions options,
|
QueryOptions options,
|
||||||
boolean local,
|
boolean local,
|
||||||
long timestamp,
|
long timestamp,
|
||||||
int nowInSeconds,
|
long nowInSeconds,
|
||||||
long queryStartNanoTime)
|
long queryStartNanoTime)
|
||||||
{
|
{
|
||||||
if (hasSlices())
|
if (hasSlices())
|
||||||
|
|
@ -847,7 +847,7 @@ public abstract class ModificationStatement implements CQLStatement.SingleKeyspa
|
||||||
QueryOptions options,
|
QueryOptions options,
|
||||||
boolean local,
|
boolean local,
|
||||||
long timestamp,
|
long timestamp,
|
||||||
int nowInSeconds,
|
long nowInSeconds,
|
||||||
long queryStartNanoTime)
|
long queryStartNanoTime)
|
||||||
{
|
{
|
||||||
if (clusterings.contains(Clustering.STATIC_CLUSTERING))
|
if (clusterings.contains(Clustering.STATIC_CLUSTERING))
|
||||||
|
|
@ -879,7 +879,7 @@ public abstract class ModificationStatement implements CQLStatement.SingleKeyspa
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
boolean local,
|
boolean local,
|
||||||
long timestamp,
|
long timestamp,
|
||||||
int nowInSeconds,
|
long nowInSeconds,
|
||||||
long queryStartNanoTime)
|
long queryStartNanoTime)
|
||||||
{
|
{
|
||||||
// Some lists operation requires reading
|
// Some lists operation requires reading
|
||||||
|
|
|
||||||
|
|
@ -273,7 +273,7 @@ public class SelectStatement implements CQLStatement.SingleKeyspaceCqlStatement
|
||||||
cl.validateForRead();
|
cl.validateForRead();
|
||||||
Guardrails.readConsistencyLevels.guard(EnumSet.of(cl), state.getClientState());
|
Guardrails.readConsistencyLevels.guard(EnumSet.of(cl), state.getClientState());
|
||||||
|
|
||||||
int nowInSec = options.getNowInSeconds(state);
|
long nowInSec = options.getNowInSeconds(state);
|
||||||
int userLimit = getLimit(options);
|
int userLimit = getLimit(options);
|
||||||
int userPerPartitionLimit = getPerPartitionLimit(options);
|
int userPerPartitionLimit = getPerPartitionLimit(options);
|
||||||
int pageSize = options.getPageSize();
|
int pageSize = options.getPageSize();
|
||||||
|
|
@ -319,7 +319,7 @@ public class SelectStatement implements CQLStatement.SingleKeyspaceCqlStatement
|
||||||
return aggregationSpecFactory == null ? null : aggregationSpecFactory.newInstance(options);
|
return aggregationSpecFactory == null ? null : aggregationSpecFactory.newInstance(options);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ReadQuery getQuery(QueryOptions options, int nowInSec) throws RequestValidationException
|
public ReadQuery getQuery(QueryOptions options, long nowInSec) throws RequestValidationException
|
||||||
{
|
{
|
||||||
Selectors selectors = selection.newSelectors(options);
|
Selectors selectors = selection.newSelectors(options);
|
||||||
return getQuery(options,
|
return getQuery(options,
|
||||||
|
|
@ -335,7 +335,7 @@ public class SelectStatement implements CQLStatement.SingleKeyspaceCqlStatement
|
||||||
public ReadQuery getQuery(QueryOptions options,
|
public ReadQuery getQuery(QueryOptions options,
|
||||||
ClientState state,
|
ClientState state,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
int userLimit,
|
int userLimit,
|
||||||
int perPartitionLimit,
|
int perPartitionLimit,
|
||||||
int pageSize,
|
int pageSize,
|
||||||
|
|
@ -355,7 +355,7 @@ public class SelectStatement implements CQLStatement.SingleKeyspaceCqlStatement
|
||||||
QueryOptions options,
|
QueryOptions options,
|
||||||
ClientState state,
|
ClientState state,
|
||||||
Selectors selectors,
|
Selectors selectors,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
int userLimit,
|
int userLimit,
|
||||||
AggregationSpecification aggregationSpec,
|
AggregationSpecification aggregationSpec,
|
||||||
long queryStartNanoTime,
|
long queryStartNanoTime,
|
||||||
|
|
@ -445,7 +445,7 @@ public class SelectStatement implements CQLStatement.SingleKeyspaceCqlStatement
|
||||||
QueryOptions options,
|
QueryOptions options,
|
||||||
Selectors selectors,
|
Selectors selectors,
|
||||||
int pageSize,
|
int pageSize,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
int userLimit,
|
int userLimit,
|
||||||
AggregationSpecification aggregationSpec,
|
AggregationSpecification aggregationSpec,
|
||||||
long queryStartNanoTime,
|
long queryStartNanoTime,
|
||||||
|
|
@ -498,7 +498,7 @@ public class SelectStatement implements CQLStatement.SingleKeyspaceCqlStatement
|
||||||
private ResultMessage.Rows processResults(PartitionIterator partitions,
|
private ResultMessage.Rows processResults(PartitionIterator partitions,
|
||||||
QueryOptions options,
|
QueryOptions options,
|
||||||
Selectors selectors,
|
Selectors selectors,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
int userLimit,
|
int userLimit,
|
||||||
AggregationSpecification aggregationSpec,
|
AggregationSpecification aggregationSpec,
|
||||||
boolean unmask) throws RequestValidationException
|
boolean unmask) throws RequestValidationException
|
||||||
|
|
@ -514,7 +514,7 @@ public class SelectStatement implements CQLStatement.SingleKeyspaceCqlStatement
|
||||||
|
|
||||||
public ResultMessage.Rows executeInternal(QueryState state,
|
public ResultMessage.Rows executeInternal(QueryState state,
|
||||||
QueryOptions options,
|
QueryOptions options,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
long queryStartNanoTime)
|
long queryStartNanoTime)
|
||||||
{
|
{
|
||||||
int userLimit = getLimit(options);
|
int userLimit = getLimit(options);
|
||||||
|
|
@ -568,7 +568,7 @@ public class SelectStatement implements CQLStatement.SingleKeyspaceCqlStatement
|
||||||
return new AggregationQueryPager(pager, query.limits());
|
return new AggregationQueryPager(pager, query.limits());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<DecoratedKey, List<Row>> executeRawInternal(QueryOptions options, ClientState state, int nowInSec) throws RequestExecutionException, RequestValidationException
|
public Map<DecoratedKey, List<Row>> executeRawInternal(QueryOptions options, ClientState state, long nowInSec) throws RequestExecutionException, RequestValidationException
|
||||||
{
|
{
|
||||||
int userLimit = getLimit(options);
|
int userLimit = getLimit(options);
|
||||||
int userPerPartitionLimit = getPerPartitionLimit(options);
|
int userPerPartitionLimit = getPerPartitionLimit(options);
|
||||||
|
|
@ -612,7 +612,7 @@ public class SelectStatement implements CQLStatement.SingleKeyspaceCqlStatement
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ResultSet process(PartitionIterator partitions, int nowInSec, boolean unmask) throws InvalidRequestException
|
public ResultSet process(PartitionIterator partitions, long nowInSec, boolean unmask) throws InvalidRequestException
|
||||||
{
|
{
|
||||||
QueryOptions options = QueryOptions.DEFAULT;
|
QueryOptions options = QueryOptions.DEFAULT;
|
||||||
Selectors selectors = selection.newSelectors(options);
|
Selectors selectors = selection.newSelectors(options);
|
||||||
|
|
@ -647,7 +647,7 @@ public class SelectStatement implements CQLStatement.SingleKeyspaceCqlStatement
|
||||||
}
|
}
|
||||||
|
|
||||||
private ReadQuery getSliceCommands(QueryOptions options, ClientState state, ColumnFilter columnFilter,
|
private ReadQuery getSliceCommands(QueryOptions options, ClientState state, ColumnFilter columnFilter,
|
||||||
DataLimits limit, int nowInSec)
|
DataLimits limit, long nowInSec)
|
||||||
{
|
{
|
||||||
Collection<ByteBuffer> keys = restrictions.getPartitionKeys(options, state);
|
Collection<ByteBuffer> keys = restrictions.getPartitionKeys(options, state);
|
||||||
if (keys.isEmpty())
|
if (keys.isEmpty())
|
||||||
|
|
@ -701,7 +701,7 @@ public class SelectStatement implements CQLStatement.SingleKeyspaceCqlStatement
|
||||||
* Returns a read command that can be used internally to query all the rows queried by this SELECT for a
|
* Returns a read command that can be used internally to query all the rows queried by this SELECT for a
|
||||||
* give key (used for materialized views).
|
* give key (used for materialized views).
|
||||||
*/
|
*/
|
||||||
public SinglePartitionReadCommand internalReadForView(DecoratedKey key, int nowInSec)
|
public SinglePartitionReadCommand internalReadForView(DecoratedKey key, long nowInSec)
|
||||||
{
|
{
|
||||||
QueryOptions options = QueryOptions.forInternalCalls(Collections.emptyList());
|
QueryOptions options = QueryOptions.forInternalCalls(Collections.emptyList());
|
||||||
ClientState state = ClientState.forInternalCalls();
|
ClientState state = ClientState.forInternalCalls();
|
||||||
|
|
@ -719,7 +719,7 @@ public class SelectStatement implements CQLStatement.SingleKeyspaceCqlStatement
|
||||||
return getRowFilter(QueryOptions.forInternalCalls(Collections.emptyList()));
|
return getRowFilter(QueryOptions.forInternalCalls(Collections.emptyList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private ReadQuery getRangeCommand(QueryOptions options, ClientState state, ColumnFilter columnFilter, DataLimits limit, int nowInSec)
|
private ReadQuery getRangeCommand(QueryOptions options, ClientState state, ColumnFilter columnFilter, DataLimits limit, long nowInSec)
|
||||||
{
|
{
|
||||||
ClusteringIndexFilter clusteringIndexFilter = makeClusteringIndexFilter(options, state, columnFilter);
|
ClusteringIndexFilter clusteringIndexFilter = makeClusteringIndexFilter(options, state, columnFilter);
|
||||||
if (clusteringIndexFilter == null)
|
if (clusteringIndexFilter == null)
|
||||||
|
|
@ -920,7 +920,7 @@ public class SelectStatement implements CQLStatement.SingleKeyspaceCqlStatement
|
||||||
private ResultSet process(PartitionIterator partitions,
|
private ResultSet process(PartitionIterator partitions,
|
||||||
QueryOptions options,
|
QueryOptions options,
|
||||||
Selectors selectors,
|
Selectors selectors,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
int userLimit,
|
int userLimit,
|
||||||
AggregationSpecification aggregationSpec,
|
AggregationSpecification aggregationSpec,
|
||||||
boolean unmask) throws InvalidRequestException
|
boolean unmask) throws InvalidRequestException
|
||||||
|
|
@ -1009,7 +1009,7 @@ public class SelectStatement implements CQLStatement.SingleKeyspaceCqlStatement
|
||||||
}
|
}
|
||||||
|
|
||||||
// Used by ModificationStatement for CAS operations
|
// Used by ModificationStatement for CAS operations
|
||||||
public void processPartition(RowIterator partition, QueryOptions options, ResultSetBuilder result, int nowInSec)
|
public void processPartition(RowIterator partition, QueryOptions options, ResultSetBuilder result, long nowInSec)
|
||||||
throws InvalidRequestException
|
throws InvalidRequestException
|
||||||
{
|
{
|
||||||
maybeFail(result, options);
|
maybeFail(result, options);
|
||||||
|
|
|
||||||
|
|
@ -29,10 +29,10 @@ import org.apache.cassandra.schema.CompactionParams;
|
||||||
public abstract class AbstractCompactionController implements AutoCloseable
|
public abstract class AbstractCompactionController implements AutoCloseable
|
||||||
{
|
{
|
||||||
public final ColumnFamilyStore cfs;
|
public final ColumnFamilyStore cfs;
|
||||||
public final int gcBefore;
|
public final long gcBefore;
|
||||||
public final CompactionParams.TombstoneOption tombstoneOption;
|
public final CompactionParams.TombstoneOption tombstoneOption;
|
||||||
|
|
||||||
public AbstractCompactionController(final ColumnFamilyStore cfs, final int gcBefore, CompactionParams.TombstoneOption tombstoneOption)
|
public AbstractCompactionController(final ColumnFamilyStore cfs, final long gcBefore, CompactionParams.TombstoneOption tombstoneOption)
|
||||||
{
|
{
|
||||||
assert cfs != null;
|
assert cfs != null;
|
||||||
this.cfs = cfs;
|
this.cfs = cfs;
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ import org.apache.cassandra.utils.FBUtilities;
|
||||||
public abstract class AbstractReadCommandBuilder
|
public abstract class AbstractReadCommandBuilder
|
||||||
{
|
{
|
||||||
protected final ColumnFamilyStore cfs;
|
protected final ColumnFamilyStore cfs;
|
||||||
protected int nowInSeconds;
|
protected long nowInSeconds;
|
||||||
|
|
||||||
private int cqlLimit = -1;
|
private int cqlLimit = -1;
|
||||||
private int pagingLimit = -1;
|
private int pagingLimit = -1;
|
||||||
|
|
@ -57,7 +57,7 @@ public abstract class AbstractReadCommandBuilder
|
||||||
this.nowInSeconds = FBUtilities.nowInSeconds();
|
this.nowInSeconds = FBUtilities.nowInSeconds();
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbstractReadCommandBuilder withNowInSeconds(int nowInSec)
|
public AbstractReadCommandBuilder withNowInSeconds(long nowInSec)
|
||||||
{
|
{
|
||||||
this.nowInSeconds = nowInSec;
|
this.nowInSeconds = nowInSec;
|
||||||
return this;
|
return this;
|
||||||
|
|
|
||||||
|
|
@ -32,13 +32,13 @@ import org.apache.cassandra.schema.TableMetadata;
|
||||||
abstract class AbstractReadQuery extends MonitorableImpl implements ReadQuery
|
abstract class AbstractReadQuery extends MonitorableImpl implements ReadQuery
|
||||||
{
|
{
|
||||||
private final TableMetadata metadata;
|
private final TableMetadata metadata;
|
||||||
private final int nowInSec;
|
private final long nowInSec;
|
||||||
|
|
||||||
private final ColumnFilter columnFilter;
|
private final ColumnFilter columnFilter;
|
||||||
private final RowFilter rowFilter;
|
private final RowFilter rowFilter;
|
||||||
private final DataLimits limits;
|
private final DataLimits limits;
|
||||||
|
|
||||||
protected AbstractReadQuery(TableMetadata metadata, int nowInSec, ColumnFilter columnFilter, RowFilter rowFilter, DataLimits limits)
|
protected AbstractReadQuery(TableMetadata metadata, long nowInSec, ColumnFilter columnFilter, RowFilter rowFilter, DataLimits limits)
|
||||||
{
|
{
|
||||||
this.metadata = metadata;
|
this.metadata = metadata;
|
||||||
this.nowInSec = nowInSec;
|
this.nowInSec = nowInSec;
|
||||||
|
|
@ -72,7 +72,7 @@ abstract class AbstractReadQuery extends MonitorableImpl implements ReadQuery
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int nowInSec()
|
public long nowInSec()
|
||||||
{
|
{
|
||||||
return nowInSec;
|
return nowInSec;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1834,7 +1834,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean, Memtable.Owner
|
||||||
public boolean isFilterFullyCoveredBy(ClusteringIndexFilter filter,
|
public boolean isFilterFullyCoveredBy(ClusteringIndexFilter filter,
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
CachedPartition cached,
|
CachedPartition cached,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
boolean enforceStrictLiveness)
|
boolean enforceStrictLiveness)
|
||||||
{
|
{
|
||||||
// We can use the cached value only if we know that no data it doesn't contain could be covered
|
// We can use the cached value only if we know that no data it doesn't contain could be covered
|
||||||
|
|
@ -1885,7 +1885,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean, Memtable.Owner
|
||||||
return paxosRepairHistory.get().getBallotForToken(key.getToken());
|
return paxosRepairHistory.get().getBallotForToken(key.getToken());
|
||||||
}
|
}
|
||||||
|
|
||||||
public int gcBefore(int nowInSec)
|
public long gcBefore(long nowInSec)
|
||||||
{
|
{
|
||||||
return nowInSec - metadata().params.gcGraceSeconds;
|
return nowInSec - metadata().params.gcGraceSeconds;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,7 @@ import static java.util.concurrent.TimeUnit.*;
|
||||||
import static org.apache.cassandra.net.MessagingService.VERSION_30;
|
import static org.apache.cassandra.net.MessagingService.VERSION_30;
|
||||||
import static org.apache.cassandra.net.MessagingService.VERSION_3014;
|
import static org.apache.cassandra.net.MessagingService.VERSION_3014;
|
||||||
import static org.apache.cassandra.net.MessagingService.VERSION_40;
|
import static org.apache.cassandra.net.MessagingService.VERSION_40;
|
||||||
|
import static org.apache.cassandra.net.MessagingService.VERSION_50;
|
||||||
import static org.apache.cassandra.utils.Clock.Global.nanoTime;
|
import static org.apache.cassandra.utils.Clock.Global.nanoTime;
|
||||||
|
|
||||||
public class CounterMutation implements IMutation
|
public class CounterMutation implements IMutation
|
||||||
|
|
@ -271,7 +272,7 @@ public class CounterMutation implements IMutation
|
||||||
builder.select(mark.column(), mark.path());
|
builder.select(mark.column(), mark.path());
|
||||||
}
|
}
|
||||||
|
|
||||||
int nowInSec = FBUtilities.nowInSeconds();
|
long nowInSec = FBUtilities.nowInSeconds();
|
||||||
ClusteringIndexNamesFilter filter = new ClusteringIndexNamesFilter(names.build(), false);
|
ClusteringIndexNamesFilter filter = new ClusteringIndexNamesFilter(names.build(), false);
|
||||||
SinglePartitionReadCommand cmd = SinglePartitionReadCommand.create(cfs.metadata(), nowInSec, key(), builder.build(), filter);
|
SinglePartitionReadCommand cmd = SinglePartitionReadCommand.create(cfs.metadata(), nowInSec, key(), builder.build(), filter);
|
||||||
PeekingIterator<PartitionUpdate.CounterMark> markIter = Iterators.peekingIterator(marks.iterator());
|
PeekingIterator<PartitionUpdate.CounterMark> markIter = Iterators.peekingIterator(marks.iterator());
|
||||||
|
|
@ -334,6 +335,7 @@ public class CounterMutation implements IMutation
|
||||||
private int serializedSize30;
|
private int serializedSize30;
|
||||||
private int serializedSize3014;
|
private int serializedSize3014;
|
||||||
private int serializedSize40;
|
private int serializedSize40;
|
||||||
|
private int serializedSize50;
|
||||||
|
|
||||||
public int serializedSize(int version)
|
public int serializedSize(int version)
|
||||||
{
|
{
|
||||||
|
|
@ -351,6 +353,10 @@ public class CounterMutation implements IMutation
|
||||||
if (serializedSize40 == 0)
|
if (serializedSize40 == 0)
|
||||||
serializedSize40 = (int) serializer.serializedSize(this, VERSION_40);
|
serializedSize40 = (int) serializer.serializedSize(this, VERSION_40);
|
||||||
return serializedSize40;
|
return serializedSize40;
|
||||||
|
case VERSION_50:
|
||||||
|
if (serializedSize50 == 0)
|
||||||
|
serializedSize50 = (int) serializer.serializedSize(this, VERSION_50);
|
||||||
|
return serializedSize50;
|
||||||
default:
|
default:
|
||||||
throw new IllegalStateException("Unknown serialization version: " + version);
|
throw new IllegalStateException("Unknown serialization version: " + version);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,14 +21,14 @@ public interface DeletionPurger
|
||||||
{
|
{
|
||||||
public static final DeletionPurger PURGE_ALL = (ts, ldt) -> true;
|
public static final DeletionPurger PURGE_ALL = (ts, ldt) -> true;
|
||||||
|
|
||||||
public boolean shouldPurge(long timestamp, int localDeletionTime);
|
public boolean shouldPurge(long timestamp, long localDeletionTime);
|
||||||
|
|
||||||
public default boolean shouldPurge(DeletionTime dt)
|
public default boolean shouldPurge(DeletionTime dt)
|
||||||
{
|
{
|
||||||
return !dt.isLive() && shouldPurge(dt.markedForDeleteAt(), dt.localDeletionTime());
|
return !dt.isLive() && shouldPurge(dt.markedForDeleteAt(), dt.localDeletionTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
public default boolean shouldPurge(LivenessInfo liveness, int nowInSec)
|
public default boolean shouldPurge(LivenessInfo liveness, long nowInSec)
|
||||||
{
|
{
|
||||||
return !liveness.isLive(nowInSec) && shouldPurge(liveness.timestamp(), liveness.localExpirationTime());
|
return !liveness.isLive(nowInSec) && shouldPurge(liveness.timestamp(), liveness.localExpirationTime());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,10 +25,14 @@ import com.google.common.base.Objects;
|
||||||
import org.apache.cassandra.cache.IMeasurableMemory;
|
import org.apache.cassandra.cache.IMeasurableMemory;
|
||||||
import org.apache.cassandra.db.rows.Cell;
|
import org.apache.cassandra.db.rows.Cell;
|
||||||
import org.apache.cassandra.io.ISerializer;
|
import org.apache.cassandra.io.ISerializer;
|
||||||
|
import org.apache.cassandra.io.sstable.format.Version;
|
||||||
import org.apache.cassandra.io.util.DataInputPlus;
|
import org.apache.cassandra.io.util.DataInputPlus;
|
||||||
import org.apache.cassandra.io.util.DataOutputPlus;
|
import org.apache.cassandra.io.util.DataOutputPlus;
|
||||||
|
import org.apache.cassandra.utils.CassandraUInt;
|
||||||
import org.apache.cassandra.utils.ObjectSizes;
|
import org.apache.cassandra.utils.ObjectSizes;
|
||||||
|
|
||||||
|
import static java.lang.Math.min;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Information on deletion of a storage engine object.
|
* Information on deletion of a storage engine object.
|
||||||
*/
|
*/
|
||||||
|
|
@ -39,17 +43,41 @@ public class DeletionTime implements Comparable<DeletionTime>, IMeasurableMemory
|
||||||
/**
|
/**
|
||||||
* A special DeletionTime that signifies that there is no top-level (row) tombstone.
|
* A special DeletionTime that signifies that there is no top-level (row) tombstone.
|
||||||
*/
|
*/
|
||||||
public static final DeletionTime LIVE = new DeletionTime(Long.MIN_VALUE, Integer.MAX_VALUE);
|
public static final DeletionTime LIVE = new DeletionTime(Long.MIN_VALUE, Long.MAX_VALUE);
|
||||||
|
|
||||||
public static final Serializer serializer = new Serializer();
|
private static final Serializer serializer = new Serializer();
|
||||||
|
private static final Serializer legacySerializer = new LegacySerializer();
|
||||||
|
|
||||||
private final long markedForDeleteAt;
|
private final long markedForDeleteAt;
|
||||||
private final int localDeletionTime;
|
final int localDeletionTimeUnsignedInteger;
|
||||||
|
|
||||||
public DeletionTime(long markedForDeleteAt, int localDeletionTime)
|
public static DeletionTime build(long markedForDeleteAt, long localDeletionTime)
|
||||||
|
{
|
||||||
|
// Negative ldts can only be a result of a corruption or when scrubbing legacy sstables with overflown int ldts
|
||||||
|
return localDeletionTime < 0 || localDeletionTime > Cell.MAX_DELETION_TIME
|
||||||
|
? new InvalidDeletionTime(markedForDeleteAt)
|
||||||
|
: new DeletionTime(markedForDeleteAt, localDeletionTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do not use. This is a perf optimization where some data structures known to hold valid uints are allowed to use it.
|
||||||
|
// You should use 'build' instead to not workaround validations, corruption detections, etc
|
||||||
|
static DeletionTime buildUnsafeWithUnsignedInteger(long markedForDeleteAt, int localDeletionTimeUnsignedInteger)
|
||||||
|
{
|
||||||
|
return CassandraUInt.compare(Cell.MAX_DELETION_TIME_UNSIGNED_INTEGER, localDeletionTimeUnsignedInteger) < 0
|
||||||
|
? new InvalidDeletionTime(markedForDeleteAt)
|
||||||
|
: new DeletionTime(markedForDeleteAt, localDeletionTimeUnsignedInteger);
|
||||||
|
}
|
||||||
|
|
||||||
|
private DeletionTime(long markedForDeleteAt, long localDeletionTime)
|
||||||
{
|
{
|
||||||
this.markedForDeleteAt = markedForDeleteAt;
|
this.markedForDeleteAt = markedForDeleteAt;
|
||||||
this.localDeletionTime = localDeletionTime;
|
this.localDeletionTimeUnsignedInteger = Cell.deletionTimeLongToUnsignedInteger(localDeletionTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
private DeletionTime(long markedForDeleteAt, int localDeletionTimeUnsignedInteger)
|
||||||
|
{
|
||||||
|
this.markedForDeleteAt = markedForDeleteAt;
|
||||||
|
this.localDeletionTimeUnsignedInteger = localDeletionTimeUnsignedInteger;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -66,9 +94,9 @@ public class DeletionTime implements Comparable<DeletionTime>, IMeasurableMemory
|
||||||
* The local server timestamp, in seconds since the unix epoch, at which this tombstone was created. This is
|
* The local server timestamp, in seconds since the unix epoch, at which this tombstone was created. This is
|
||||||
* only used for purposes of purging the tombstone after gc_grace_seconds have elapsed.
|
* only used for purposes of purging the tombstone after gc_grace_seconds have elapsed.
|
||||||
*/
|
*/
|
||||||
public int localDeletionTime()
|
public long localDeletionTime()
|
||||||
{
|
{
|
||||||
return localDeletionTime;
|
return Cell.deletionTimeUnsignedIntegerToLong(localDeletionTimeUnsignedInteger);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -76,7 +104,7 @@ public class DeletionTime implements Comparable<DeletionTime>, IMeasurableMemory
|
||||||
*/
|
*/
|
||||||
public boolean isLive()
|
public boolean isLive()
|
||||||
{
|
{
|
||||||
return markedForDeleteAt() == Long.MIN_VALUE && localDeletionTime() == Integer.MAX_VALUE;
|
return markedForDeleteAt() == Long.MIN_VALUE && localDeletionTime() == Long.MAX_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void digest(Digest digest)
|
public void digest(Digest digest)
|
||||||
|
|
@ -93,7 +121,7 @@ public class DeletionTime implements Comparable<DeletionTime>, IMeasurableMemory
|
||||||
*/
|
*/
|
||||||
public boolean validate()
|
public boolean validate()
|
||||||
{
|
{
|
||||||
return localDeletionTime >= 0;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -123,12 +151,7 @@ public class DeletionTime implements Comparable<DeletionTime>, IMeasurableMemory
|
||||||
return -1;
|
return -1;
|
||||||
else if (markedForDeleteAt() > dt.markedForDeleteAt())
|
else if (markedForDeleteAt() > dt.markedForDeleteAt())
|
||||||
return 1;
|
return 1;
|
||||||
else if (localDeletionTime() < dt.localDeletionTime())
|
else return CassandraUInt.compare(localDeletionTimeUnsignedInteger, dt.localDeletionTimeUnsignedInteger);
|
||||||
return -1;
|
|
||||||
else if (localDeletionTime() > dt.localDeletionTime())
|
|
||||||
return 1;
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean supersedes(DeletionTime dt)
|
public boolean supersedes(DeletionTime dt)
|
||||||
|
|
@ -163,22 +186,71 @@ public class DeletionTime implements Comparable<DeletionTime>, IMeasurableMemory
|
||||||
|
|
||||||
return EMPTY_SIZE;
|
return EMPTY_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Serializer getSerializer(Version version)
|
||||||
|
{
|
||||||
|
if (version.hasUIntDeletionTime())
|
||||||
|
return serializer;
|
||||||
|
else
|
||||||
|
return legacySerializer;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Serializer for Usigned Integer ldt
|
||||||
public static class Serializer implements ISerializer<DeletionTime>
|
public static class Serializer implements ISerializer<DeletionTime>
|
||||||
{
|
{
|
||||||
public void serialize(DeletionTime delTime, DataOutputPlus out) throws IOException
|
public void serialize(DeletionTime delTime, DataOutputPlus out) throws IOException
|
||||||
{
|
{
|
||||||
out.writeInt(delTime.localDeletionTime());
|
out.writeInt(delTime.localDeletionTimeUnsignedInteger);
|
||||||
out.writeLong(delTime.markedForDeleteAt());
|
out.writeLong(delTime.markedForDeleteAt());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DeletionTime deserialize(DataInputPlus in) throws IOException
|
||||||
|
{
|
||||||
|
int localDeletionTimeUnsignedInteger = in.readInt();
|
||||||
|
long mfda = in.readLong();
|
||||||
|
return mfda == Long.MIN_VALUE && localDeletionTimeUnsignedInteger == Cell.NO_DELETION_TIME_UNSIGNED_INTEGER
|
||||||
|
? LIVE
|
||||||
|
: new DeletionTime(mfda, localDeletionTimeUnsignedInteger);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DeletionTime deserialize(ByteBuffer buf, int offset)
|
||||||
|
{
|
||||||
|
int localDeletionTimeUnsignedInteger = buf.getInt(offset);
|
||||||
|
long mfda = buf.getLong(offset + 4);
|
||||||
|
return mfda == Long.MIN_VALUE && localDeletionTimeUnsignedInteger == Cell.NO_DELETION_TIME_UNSIGNED_INTEGER
|
||||||
|
? LIVE
|
||||||
|
: new DeletionTime(mfda, localDeletionTimeUnsignedInteger);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void skip(DataInputPlus in) throws IOException
|
||||||
|
{
|
||||||
|
in.skipBytesFully(4 + 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public long serializedSize(DeletionTime delTime)
|
||||||
|
{
|
||||||
|
return TypeSizes.sizeof(Integer.MAX_VALUE)
|
||||||
|
+ TypeSizes.sizeof(delTime.markedForDeleteAt());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Serializer for Int TTL/localDeletionTime for legacy versions
|
||||||
|
public static class LegacySerializer extends Serializer
|
||||||
|
{
|
||||||
|
public void serialize(DeletionTime delTime, DataOutputPlus out) throws IOException
|
||||||
|
{
|
||||||
|
int ldt = delTime.localDeletionTime() == Cell.NO_DELETION_TIME ? Integer.MAX_VALUE : (int) min(delTime.localDeletionTime(), (long)Integer.MAX_VALUE - 1);
|
||||||
|
out.writeInt(ldt);
|
||||||
|
out.writeLong(delTime.markedForDeleteAt);
|
||||||
|
}
|
||||||
|
|
||||||
public DeletionTime deserialize(DataInputPlus in) throws IOException
|
public DeletionTime deserialize(DataInputPlus in) throws IOException
|
||||||
{
|
{
|
||||||
int ldt = in.readInt();
|
int ldt = in.readInt();
|
||||||
long mfda = in.readLong();
|
long mfda = in.readLong();
|
||||||
return mfda == Long.MIN_VALUE && ldt == Integer.MAX_VALUE
|
return mfda == Long.MIN_VALUE && ldt == Integer.MAX_VALUE
|
||||||
? LIVE
|
? LIVE
|
||||||
: new DeletionTime(mfda, ldt);
|
: DeletionTime.build(mfda, ldt);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DeletionTime deserialize(ByteBuffer buf, int offset)
|
public DeletionTime deserialize(ByteBuffer buf, int offset)
|
||||||
|
|
@ -197,8 +269,31 @@ public class DeletionTime implements Comparable<DeletionTime>, IMeasurableMemory
|
||||||
|
|
||||||
public long serializedSize(DeletionTime delTime)
|
public long serializedSize(DeletionTime delTime)
|
||||||
{
|
{
|
||||||
return TypeSizes.sizeof(delTime.localDeletionTime())
|
return TypeSizes.sizeof(Integer.MAX_VALUE)
|
||||||
+ TypeSizes.sizeof(delTime.markedForDeleteAt());
|
+ TypeSizes.sizeof(delTime.markedForDeleteAt());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// When scrubbing legacy sstables (overflown) or upon sstable corruption we could have negative ldts
|
||||||
|
public static class InvalidDeletionTime extends DeletionTime
|
||||||
|
{
|
||||||
|
private InvalidDeletionTime(long markedForDeleteAt)
|
||||||
|
{
|
||||||
|
// We're calling the super constructor with int ldt to force invalid values through
|
||||||
|
// and workaround any validation
|
||||||
|
super(markedForDeleteAt, Cell.INVALID_DELETION_TIME);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long localDeletionTime()
|
||||||
|
{
|
||||||
|
return Cell.INVALID_DELETION_TIME;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean validate()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,44 +63,46 @@ public class ExpirationDateOverflowHandling
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final String MAXIMUM_EXPIRATION_DATE_EXCEEDED_WARNING = "Request on table {}.{} with {}ttl of {} seconds exceeds maximum supported expiration " +
|
public static final String MAXIMUM_EXPIRATION_DATE_EXCEEDED_WARNING = "Request on table {}.{} with {}ttl of {} seconds exceeds maximum supported expiration " +
|
||||||
"date of 2038-01-19T03:14:06+00:00 and will have its expiration capped to that date. " +
|
"date of {} and will have its expiration capped to that date. " +
|
||||||
"In order to avoid this use a lower TTL or upgrade to a version where this limitation " +
|
"In order to avoid this use a lower TTL or upgrade to a version where this limitation " +
|
||||||
"is fixed. See CASSANDRA-14092 for more details.";
|
"is fixed. See CASSANDRA-14092 and CASSANDRA-14227 for more details.";
|
||||||
|
|
||||||
public static final String MAXIMUM_EXPIRATION_DATE_EXCEEDED_REJECT_MESSAGE = "Request on table %s.%s with %sttl of %d seconds exceeds maximum supported expiration " +
|
public static final String MAXIMUM_EXPIRATION_DATE_EXCEEDED_REJECT_MESSAGE = "Request on table %s.%s with %sttl of %d seconds exceeds maximum supported expiration " +
|
||||||
"date of 2038-01-19T03:14:06+00:00. In order to avoid this use a lower TTL, change " +
|
"date of %s. In order to avoid this use a lower TTL, change " +
|
||||||
"the expiration date overflow policy or upgrade to a version where this limitation " +
|
"the expiration date overflow policy or upgrade to a version where this limitation " +
|
||||||
"is fixed. See CASSANDRA-14092 for more details.";
|
"is fixed. See CASSANDRA-14092 and CASSANDRA-14227 for more details.";
|
||||||
|
|
||||||
public static void maybeApplyExpirationDateOverflowPolicy(TableMetadata metadata, int ttl, boolean isDefaultTTL) throws InvalidRequestException
|
public static void maybeApplyExpirationDateOverflowPolicy(TableMetadata metadata, int ttl, boolean isDefaultTTL) throws InvalidRequestException
|
||||||
{
|
{
|
||||||
if (ttl == BufferCell.NO_TTL)
|
if (ttl == BufferCell.NO_TTL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Check for localExpirationTime overflow (CASSANDRA-14092)
|
// Check for localExpirationTime overflow (CASSANDRA-14092) to apply a policy if needed
|
||||||
int nowInSecs = (int)(currentTimeMillis() / 1000);
|
long nowInSecs = currentTimeMillis() / 1000;
|
||||||
if (ttl + nowInSecs < 0)
|
if (((long) ttl + nowInSecs) > Cell.getVersionedMaxDeletiontionTime())
|
||||||
{
|
{
|
||||||
switch (policy)
|
switch (policy)
|
||||||
{
|
{
|
||||||
case CAP:
|
case CAP:
|
||||||
ClientWarn.instance.warn(MessageFormatter.arrayFormat(MAXIMUM_EXPIRATION_DATE_EXCEEDED_WARNING, new Object[] { metadata.keyspace,
|
ClientWarn.instance.warn(MessageFormatter.arrayFormat(MAXIMUM_EXPIRATION_DATE_EXCEEDED_WARNING, new Object[] { metadata.keyspace,
|
||||||
metadata.name,
|
metadata.name,
|
||||||
isDefaultTTL? "default " : "", ttl })
|
isDefaultTTL? "default " : "",
|
||||||
|
ttl,
|
||||||
|
getMaxExpirationDateTS()})
|
||||||
.getMessage());
|
.getMessage());
|
||||||
case CAP_NOWARN:
|
case CAP_NOWARN:
|
||||||
/**
|
/**
|
||||||
* Capping at this stage is basically not rejecting the request. The actual capping is done
|
* Capping at this stage is basically not rejecting the request. The actual capping is done
|
||||||
* by {@link #computeLocalExpirationTime(int, int)}, which converts the negative TTL
|
* by {@link #computeLocalExpirationTime(long, int)}, which converts the negative TTL
|
||||||
* to {@link org.apache.cassandra.db.BufferExpiringCell#MAX_DELETION_TIME}
|
* to {@link org.apache.cassandra.db.BufferExpiringCell#MAX_DELETION_TIME}
|
||||||
*/
|
*/
|
||||||
NoSpamLogger.log(logger, NoSpamLogger.Level.WARN, EXPIRATION_OVERFLOW_WARNING_INTERVAL_MINUTES, TimeUnit.MINUTES, MAXIMUM_EXPIRATION_DATE_EXCEEDED_WARNING,
|
NoSpamLogger.log(logger, NoSpamLogger.Level.WARN, EXPIRATION_OVERFLOW_WARNING_INTERVAL_MINUTES, TimeUnit.MINUTES, MAXIMUM_EXPIRATION_DATE_EXCEEDED_WARNING,
|
||||||
metadata.keyspace, metadata.name, isDefaultTTL? "default " : "", ttl);
|
metadata.keyspace, metadata.name, isDefaultTTL? "default " : "", ttl, getMaxExpirationDateTS());
|
||||||
return;
|
return;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new InvalidRequestException(String.format(MAXIMUM_EXPIRATION_DATE_EXCEEDED_REJECT_MESSAGE, metadata.keyspace, metadata.name,
|
throw new InvalidRequestException(String.format(MAXIMUM_EXPIRATION_DATE_EXCEEDED_REJECT_MESSAGE, metadata.keyspace, metadata.name,
|
||||||
isDefaultTTL? "default " : "", ttl));
|
isDefaultTTL? "default " : "", ttl, getMaxExpirationDateTS()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -115,9 +117,17 @@ public class ExpirationDateOverflowHandling
|
||||||
*
|
*
|
||||||
* See CASSANDRA-14092
|
* See CASSANDRA-14092
|
||||||
*/
|
*/
|
||||||
public static int computeLocalExpirationTime(int nowInSec, int timeToLive)
|
public static long computeLocalExpirationTime(long nowInSec, int timeToLive)
|
||||||
{
|
{
|
||||||
int localExpirationTime = nowInSec + timeToLive;
|
|
||||||
return localExpirationTime >= 0? localExpirationTime : Cell.MAX_DELETION_TIME;
|
long localExpirationTime = (long) (nowInSec + timeToLive);
|
||||||
|
long cellMaxDeletionTime = Cell.getVersionedMaxDeletiontionTime();
|
||||||
|
return localExpirationTime <= cellMaxDeletionTime ? localExpirationTime : cellMaxDeletionTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getMaxExpirationDateTS()
|
||||||
|
{
|
||||||
|
return Cell.getVersionedMaxDeletiontionTime() == Cell.MAX_DELETION_TIME_2038_LEGACY_CAP ? "2038-01-19T03:14:06+00:00"
|
||||||
|
: "2106-02-07T06:28:13+00:00";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -611,7 +611,7 @@ public class Keyspace
|
||||||
columnFamilyStores.get(tableId).metric.viewLockAcquireTime.update(acquireTime, MILLISECONDS);
|
columnFamilyStores.get(tableId).metric.viewLockAcquireTime.update(acquireTime, MILLISECONDS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int nowInSec = FBUtilities.nowInSeconds();
|
long nowInSec = FBUtilities.nowInSeconds();
|
||||||
try (WriteContext ctx = getWriteHandler().beginWrite(mutation, makeDurable))
|
try (WriteContext ctx = getWriteHandler().beginWrite(mutation, makeDurable))
|
||||||
{
|
{
|
||||||
for (PartitionUpdate upd : mutation.getPartitionUpdates())
|
for (PartitionUpdate upd : mutation.getPartitionUpdates())
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ public class LivenessInfo implements IMeasurableMemory
|
||||||
* (See {@link org.apache.cassandra.cql3.Attributes#MAX_TTL})
|
* (See {@link org.apache.cassandra.cql3.Attributes#MAX_TTL})
|
||||||
*/
|
*/
|
||||||
public static final int EXPIRED_LIVENESS_TTL = Integer.MAX_VALUE;
|
public static final int EXPIRED_LIVENESS_TTL = Integer.MAX_VALUE;
|
||||||
public static final int NO_EXPIRATION_TIME = Cell.NO_DELETION_TIME;
|
public static final long NO_EXPIRATION_TIME = Cell.NO_DELETION_TIME;
|
||||||
|
|
||||||
public static final LivenessInfo EMPTY = new LivenessInfo(NO_TIMESTAMP);
|
public static final LivenessInfo EMPTY = new LivenessInfo(NO_TIMESTAMP);
|
||||||
private static final long UNSHARED_HEAP_SIZE = ObjectSizes.measure(EMPTY);
|
private static final long UNSHARED_HEAP_SIZE = ObjectSizes.measure(EMPTY);
|
||||||
|
|
@ -60,18 +60,33 @@ public class LivenessInfo implements IMeasurableMemory
|
||||||
this.timestamp = timestamp;
|
this.timestamp = timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static LivenessInfo create(long timestamp, int nowInSec)
|
public static LivenessInfo create(long timestamp, long nowInSec)
|
||||||
{
|
{
|
||||||
return new LivenessInfo(timestamp);
|
return new LivenessInfo(timestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static LivenessInfo expiring(long timestamp, int ttl, int nowInSec)
|
public static LivenessInfo expiring(long timestamp, int ttl, long nowInSec)
|
||||||
{
|
{
|
||||||
assert ttl != EXPIRED_LIVENESS_TTL;
|
assert ttl != EXPIRED_LIVENESS_TTL;
|
||||||
return new ExpiringLivenessInfo(timestamp, ttl, ExpirationDateOverflowHandling.computeLocalExpirationTime(nowInSec, ttl));
|
return new ExpiringLivenessInfo(timestamp, ttl, ExpirationDateOverflowHandling.computeLocalExpirationTime(nowInSec, ttl));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static LivenessInfo create(long timestamp, int ttl, int nowInSec)
|
// c14227 do not use. Special use to circumvent the overflow policy when scrubbing
|
||||||
|
private static LivenessInfo expiring(long timestamp, int ttl, long nowInSec, boolean applyOverflowPolicy)
|
||||||
|
{
|
||||||
|
assert ttl != EXPIRED_LIVENESS_TTL;
|
||||||
|
return new ExpiringLivenessInfo(timestamp, ttl, applyOverflowPolicy ? ExpirationDateOverflowHandling.computeLocalExpirationTime(nowInSec, ttl) : nowInSec);
|
||||||
|
}
|
||||||
|
|
||||||
|
// c14227 do not use. Special use to circumvent the overflow policy when scrubbing
|
||||||
|
private static LivenessInfo create(long timestamp, int ttl, long nowInSec, boolean applyOverflowPolicy)
|
||||||
|
{
|
||||||
|
return ttl == NO_TTL
|
||||||
|
? create(timestamp, nowInSec)
|
||||||
|
: expiring(timestamp, ttl, nowInSec, applyOverflowPolicy);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LivenessInfo create(long timestamp, int ttl, long nowInSec)
|
||||||
{
|
{
|
||||||
return ttl == NO_TTL
|
return ttl == NO_TTL
|
||||||
? create(timestamp, nowInSec)
|
? create(timestamp, nowInSec)
|
||||||
|
|
@ -80,7 +95,7 @@ public class LivenessInfo implements IMeasurableMemory
|
||||||
|
|
||||||
// Note that this ctor takes the expiration time, not the current time.
|
// Note that this ctor takes the expiration time, not the current time.
|
||||||
// Use when you know that's what you want.
|
// Use when you know that's what you want.
|
||||||
public static LivenessInfo withExpirationTime(long timestamp, int ttl, int localExpirationTime)
|
public static LivenessInfo withExpirationTime(long timestamp, int ttl, long localExpirationTime)
|
||||||
{
|
{
|
||||||
if (ttl == EXPIRED_LIVENESS_TTL)
|
if (ttl == EXPIRED_LIVENESS_TTL)
|
||||||
return new ExpiredLivenessInfo(timestamp, ttl, localExpirationTime);
|
return new ExpiredLivenessInfo(timestamp, ttl, localExpirationTime);
|
||||||
|
|
@ -131,7 +146,7 @@ public class LivenessInfo implements IMeasurableMemory
|
||||||
* The expiration time (in seconds) if the info is expiring ({@link #NO_EXPIRATION_TIME} otherwise).
|
* The expiration time (in seconds) if the info is expiring ({@link #NO_EXPIRATION_TIME} otherwise).
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public int localExpirationTime()
|
public long localExpirationTime()
|
||||||
{
|
{
|
||||||
return NO_EXPIRATION_TIME;
|
return NO_EXPIRATION_TIME;
|
||||||
}
|
}
|
||||||
|
|
@ -145,7 +160,7 @@ public class LivenessInfo implements IMeasurableMemory
|
||||||
* @param nowInSec the current time in seconds.
|
* @param nowInSec the current time in seconds.
|
||||||
* @return whether this liveness info is live or not.
|
* @return whether this liveness info is live or not.
|
||||||
*/
|
*/
|
||||||
public boolean isLive(int nowInSec)
|
public boolean isLive(long nowInSec)
|
||||||
{
|
{
|
||||||
return !isEmpty();
|
return !isEmpty();
|
||||||
}
|
}
|
||||||
|
|
@ -229,9 +244,15 @@ public class LivenessInfo implements IMeasurableMemory
|
||||||
return new LivenessInfo(newTimestamp);
|
return new LivenessInfo(newTimestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LivenessInfo withUpdatedTimestampAndLocalDeletionTime(long newTimestamp, int newLocalDeletionTime)
|
public LivenessInfo withUpdatedTimestampAndLocalDeletionTime(long newTimestamp, long newLocalDeletionTime)
|
||||||
{
|
{
|
||||||
return LivenessInfo.create(newTimestamp, ttl(), newLocalDeletionTime);
|
return LivenessInfo.create(newTimestamp, ttl(), newLocalDeletionTime, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// C14227 To prevent row resurrection and be backwards compatible sometimes we need to force an overflowed ldt
|
||||||
|
public LivenessInfo withUpdatedTimestampAndLocalDeletionTime(long newTimestamp, long newLocalDeletionTime, boolean applyOverflowPolicy)
|
||||||
|
{
|
||||||
|
return LivenessInfo.create(newTimestamp, ttl(), newLocalDeletionTime, applyOverflowPolicy);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -271,7 +292,7 @@ public class LivenessInfo implements IMeasurableMemory
|
||||||
*/
|
*/
|
||||||
private static class ExpiredLivenessInfo extends ExpiringLivenessInfo
|
private static class ExpiredLivenessInfo extends ExpiringLivenessInfo
|
||||||
{
|
{
|
||||||
private ExpiredLivenessInfo(long timestamp, int ttl, int localExpirationTime)
|
private ExpiredLivenessInfo(long timestamp, int ttl, long localExpirationTime)
|
||||||
{
|
{
|
||||||
super(timestamp, ttl, localExpirationTime);
|
super(timestamp, ttl, localExpirationTime);
|
||||||
assert ttl == EXPIRED_LIVENESS_TTL;
|
assert ttl == EXPIRED_LIVENESS_TTL;
|
||||||
|
|
@ -285,7 +306,7 @@ public class LivenessInfo implements IMeasurableMemory
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isLive(int nowInSec)
|
public boolean isLive(long nowInSec)
|
||||||
{
|
{
|
||||||
// used as tombstone to shadow entire PK
|
// used as tombstone to shadow entire PK
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -301,10 +322,10 @@ public class LivenessInfo implements IMeasurableMemory
|
||||||
private static class ExpiringLivenessInfo extends LivenessInfo
|
private static class ExpiringLivenessInfo extends LivenessInfo
|
||||||
{
|
{
|
||||||
private final int ttl;
|
private final int ttl;
|
||||||
private final int localExpirationTime;
|
private final long localExpirationTime;
|
||||||
private static final long UNSHARED_HEAP_SIZE = ObjectSizes.measure(new ExpiringLivenessInfo(-1, -1, -1));
|
private static final long UNSHARED_HEAP_SIZE = ObjectSizes.measure(new ExpiringLivenessInfo(-1, -1, -1));
|
||||||
|
|
||||||
private ExpiringLivenessInfo(long timestamp, int ttl, int localExpirationTime)
|
private ExpiringLivenessInfo(long timestamp, int ttl, long localExpirationTime)
|
||||||
{
|
{
|
||||||
super(timestamp);
|
super(timestamp);
|
||||||
assert ttl != NO_TTL && localExpirationTime != NO_EXPIRATION_TIME;
|
assert ttl != NO_TTL && localExpirationTime != NO_EXPIRATION_TIME;
|
||||||
|
|
@ -319,7 +340,7 @@ public class LivenessInfo implements IMeasurableMemory
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int localExpirationTime()
|
public long localExpirationTime()
|
||||||
{
|
{
|
||||||
return localExpirationTime;
|
return localExpirationTime;
|
||||||
}
|
}
|
||||||
|
|
@ -331,7 +352,7 @@ public class LivenessInfo implements IMeasurableMemory
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isLive(int nowInSec)
|
public boolean isLive(long nowInSec)
|
||||||
{
|
{
|
||||||
return nowInSec < localExpirationTime;
|
return nowInSec < localExpirationTime;
|
||||||
}
|
}
|
||||||
|
|
@ -340,7 +361,7 @@ public class LivenessInfo implements IMeasurableMemory
|
||||||
public void digest(Digest digest)
|
public void digest(Digest digest)
|
||||||
{
|
{
|
||||||
super.digest(digest);
|
super.digest(digest);
|
||||||
digest.updateWithInt(localExpirationTime)
|
digest.updateWithLong(localExpirationTime)
|
||||||
.updateWithInt(ttl);
|
.updateWithInt(ttl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,11 +52,11 @@ public class MutableDeletionInfo implements DeletionInfo
|
||||||
* @param localDeletionTime what time the deletion write was applied locally (for purposes of
|
* @param localDeletionTime what time the deletion write was applied locally (for purposes of
|
||||||
* purging the tombstone after gc_grace_seconds).
|
* purging the tombstone after gc_grace_seconds).
|
||||||
*/
|
*/
|
||||||
public MutableDeletionInfo(long markedForDeleteAt, int localDeletionTime)
|
public MutableDeletionInfo(long markedForDeleteAt, long localDeletionTime)
|
||||||
{
|
{
|
||||||
// Pre-1.1 node may return MIN_VALUE for non-deleted container, but the new default is MAX_VALUE
|
// Pre-1.1 node may return MIN_VALUE for non-deleted container, but the new default is MAX_VALUE
|
||||||
// (see CASSANDRA-3872)
|
// (see CASSANDRA-3872)
|
||||||
this(new DeletionTime(markedForDeleteAt, localDeletionTime == Integer.MIN_VALUE ? Integer.MAX_VALUE : localDeletionTime));
|
this(DeletionTime.build(markedForDeleteAt, localDeletionTime == Integer.MIN_VALUE ? Long.MAX_VALUE : localDeletionTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
public MutableDeletionInfo(DeletionTime partitionDeletion)
|
public MutableDeletionInfo(DeletionTime partitionDeletion)
|
||||||
|
|
@ -223,7 +223,7 @@ public class MutableDeletionInfo implements DeletionInfo
|
||||||
public DeletionInfo updateAllTimestamp(long timestamp)
|
public DeletionInfo updateAllTimestamp(long timestamp)
|
||||||
{
|
{
|
||||||
if (partitionDeletion.markedForDeleteAt() != Long.MIN_VALUE)
|
if (partitionDeletion.markedForDeleteAt() != Long.MIN_VALUE)
|
||||||
partitionDeletion = new DeletionTime(timestamp, partitionDeletion.localDeletionTime());
|
partitionDeletion = DeletionTime.build(timestamp, partitionDeletion.localDeletionTime());
|
||||||
|
|
||||||
if (ranges != null)
|
if (ranges != null)
|
||||||
ranges.updateAllTimestamp(timestamp);
|
ranges.updateAllTimestamp(timestamp);
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,10 @@ import org.apache.cassandra.service.AbstractWriteResponseHandler;
|
||||||
import org.apache.cassandra.utils.ByteBufferUtil;
|
import org.apache.cassandra.utils.ByteBufferUtil;
|
||||||
import org.apache.cassandra.utils.concurrent.Future;
|
import org.apache.cassandra.utils.concurrent.Future;
|
||||||
|
|
||||||
import static org.apache.cassandra.net.MessagingService.*;
|
import static org.apache.cassandra.net.MessagingService.VERSION_30;
|
||||||
|
import static org.apache.cassandra.net.MessagingService.VERSION_3014;
|
||||||
|
import static org.apache.cassandra.net.MessagingService.VERSION_40;
|
||||||
|
import static org.apache.cassandra.net.MessagingService.VERSION_50;
|
||||||
import static org.apache.cassandra.utils.MonotonicClock.Global.approxTime;
|
import static org.apache.cassandra.utils.MonotonicClock.Global.approxTime;
|
||||||
|
|
||||||
public class Mutation implements IMutation, Supplier<Mutation>
|
public class Mutation implements IMutation, Supplier<Mutation>
|
||||||
|
|
@ -317,6 +320,7 @@ public class Mutation implements IMutation, Supplier<Mutation>
|
||||||
private int serializedSize30;
|
private int serializedSize30;
|
||||||
private int serializedSize3014;
|
private int serializedSize3014;
|
||||||
private int serializedSize40;
|
private int serializedSize40;
|
||||||
|
private int serializedSize50;
|
||||||
|
|
||||||
public int serializedSize(int version)
|
public int serializedSize(int version)
|
||||||
{
|
{
|
||||||
|
|
@ -334,6 +338,11 @@ public class Mutation implements IMutation, Supplier<Mutation>
|
||||||
if (serializedSize40 == 0)
|
if (serializedSize40 == 0)
|
||||||
serializedSize40 = (int) serializer.serializedSize(this, VERSION_40);
|
serializedSize40 = (int) serializer.serializedSize(this, VERSION_40);
|
||||||
return serializedSize40;
|
return serializedSize40;
|
||||||
|
case VERSION_50:
|
||||||
|
if (serializedSize50 == 0)
|
||||||
|
serializedSize50 = (int) serializer.serializedSize(this, VERSION_50);
|
||||||
|
return serializedSize50;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new IllegalStateException("Unknown serialization version: " + version);
|
throw new IllegalStateException("Unknown serialization version: " + version);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ public class PartitionRangeReadCommand extends ReadCommand implements PartitionR
|
||||||
int digestVersion,
|
int digestVersion,
|
||||||
boolean acceptsTransient,
|
boolean acceptsTransient,
|
||||||
TableMetadata metadata,
|
TableMetadata metadata,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
RowFilter rowFilter,
|
RowFilter rowFilter,
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
|
|
@ -88,7 +88,7 @@ public class PartitionRangeReadCommand extends ReadCommand implements PartitionR
|
||||||
int digestVersion,
|
int digestVersion,
|
||||||
boolean acceptsTransient,
|
boolean acceptsTransient,
|
||||||
TableMetadata metadata,
|
TableMetadata metadata,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
RowFilter rowFilter,
|
RowFilter rowFilter,
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
|
|
@ -124,7 +124,7 @@ public class PartitionRangeReadCommand extends ReadCommand implements PartitionR
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PartitionRangeReadCommand create(TableMetadata metadata,
|
public static PartitionRangeReadCommand create(TableMetadata metadata,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
RowFilter rowFilter,
|
RowFilter rowFilter,
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
|
|
@ -151,7 +151,7 @@ public class PartitionRangeReadCommand extends ReadCommand implements PartitionR
|
||||||
*
|
*
|
||||||
* @return a newly created read command that queries everything in the table.
|
* @return a newly created read command that queries everything in the table.
|
||||||
*/
|
*/
|
||||||
public static PartitionRangeReadCommand allDataRead(TableMetadata metadata, int nowInSec)
|
public static PartitionRangeReadCommand allDataRead(TableMetadata metadata, long nowInSec)
|
||||||
{
|
{
|
||||||
return create(false,
|
return create(false,
|
||||||
0,
|
0,
|
||||||
|
|
@ -524,7 +524,7 @@ public class PartitionRangeReadCommand extends ReadCommand implements PartitionR
|
||||||
int digestVersion,
|
int digestVersion,
|
||||||
boolean acceptsTransient,
|
boolean acceptsTransient,
|
||||||
TableMetadata metadata,
|
TableMetadata metadata,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
RowFilter rowFilter,
|
RowFilter rowFilter,
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
|
|
@ -542,7 +542,7 @@ public class PartitionRangeReadCommand extends ReadCommand implements PartitionR
|
||||||
int digestVersion,
|
int digestVersion,
|
||||||
boolean acceptsTransient,
|
boolean acceptsTransient,
|
||||||
TableMetadata metadata,
|
TableMetadata metadata,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
RowFilter rowFilter,
|
RowFilter rowFilter,
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ import org.apache.cassandra.transport.ProtocolVersion;
|
||||||
public interface PartitionRangeReadQuery extends ReadQuery
|
public interface PartitionRangeReadQuery extends ReadQuery
|
||||||
{
|
{
|
||||||
static ReadQuery create(TableMetadata table,
|
static ReadQuery create(TableMetadata table,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
RowFilter rowFilter,
|
RowFilter rowFilter,
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,8 @@ import java.util.Iterator;
|
||||||
|
|
||||||
import org.apache.cassandra.config.DatabaseDescriptor;
|
import org.apache.cassandra.config.DatabaseDescriptor;
|
||||||
import org.apache.cassandra.utils.AbstractIterator;
|
import org.apache.cassandra.utils.AbstractIterator;
|
||||||
|
import org.apache.cassandra.utils.CassandraUInt;
|
||||||
|
|
||||||
import com.google.common.collect.Iterators;
|
import com.google.common.collect.Iterators;
|
||||||
|
|
||||||
import org.apache.cassandra.cache.IMeasurableMemory;
|
import org.apache.cassandra.cache.IMeasurableMemory;
|
||||||
|
|
@ -58,19 +60,25 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
private ClusteringBound<?>[] starts;
|
private ClusteringBound<?>[] starts;
|
||||||
private ClusteringBound<?>[] ends;
|
private ClusteringBound<?>[] ends;
|
||||||
private long[] markedAts;
|
private long[] markedAts;
|
||||||
private int[] delTimes;
|
private int[] delTimesUnsignedIntegers;
|
||||||
|
|
||||||
private long boundaryHeapSize;
|
private long boundaryHeapSize;
|
||||||
private int size;
|
private int size;
|
||||||
|
|
||||||
private RangeTombstoneList(ClusteringComparator comparator, ClusteringBound<?>[] starts, ClusteringBound<?>[] ends, long[] markedAts, int[] delTimes, long boundaryHeapSize, int size)
|
private RangeTombstoneList(ClusteringComparator comparator,
|
||||||
|
ClusteringBound<?>[] starts,
|
||||||
|
ClusteringBound<?>[] ends,
|
||||||
|
long[] markedAts,
|
||||||
|
int[] delTimesUnsignedIntegers,
|
||||||
|
long boundaryHeapSize,
|
||||||
|
int size)
|
||||||
{
|
{
|
||||||
assert starts.length == ends.length && starts.length == markedAts.length && starts.length == delTimes.length;
|
assert starts.length == ends.length && starts.length == markedAts.length && starts.length == delTimesUnsignedIntegers.length;
|
||||||
this.comparator = comparator;
|
this.comparator = comparator;
|
||||||
this.starts = starts;
|
this.starts = starts;
|
||||||
this.ends = ends;
|
this.ends = ends;
|
||||||
this.markedAts = markedAts;
|
this.markedAts = markedAts;
|
||||||
this.delTimes = delTimes;
|
this.delTimesUnsignedIntegers = delTimesUnsignedIntegers;
|
||||||
this.size = size;
|
this.size = size;
|
||||||
this.boundaryHeapSize = boundaryHeapSize;
|
this.boundaryHeapSize = boundaryHeapSize;
|
||||||
}
|
}
|
||||||
|
|
@ -101,7 +109,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
Arrays.copyOf(starts, size),
|
Arrays.copyOf(starts, size),
|
||||||
Arrays.copyOf(ends, size),
|
Arrays.copyOf(ends, size),
|
||||||
Arrays.copyOf(markedAts, size),
|
Arrays.copyOf(markedAts, size),
|
||||||
Arrays.copyOf(delTimes, size),
|
Arrays.copyOf(delTimesUnsignedIntegers, size),
|
||||||
boundaryHeapSize, size);
|
boundaryHeapSize, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -111,7 +119,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
new ClusteringBound<?>[size],
|
new ClusteringBound<?>[size],
|
||||||
new ClusteringBound<?>[size],
|
new ClusteringBound<?>[size],
|
||||||
Arrays.copyOf(markedAts, size),
|
Arrays.copyOf(markedAts, size),
|
||||||
Arrays.copyOf(delTimes, size),
|
Arrays.copyOf(delTimesUnsignedIntegers, size),
|
||||||
boundaryHeapSize, size);
|
boundaryHeapSize, size);
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -137,7 +145,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
add(tombstone.deletedSlice().start(),
|
add(tombstone.deletedSlice().start(),
|
||||||
tombstone.deletedSlice().end(),
|
tombstone.deletedSlice().end(),
|
||||||
tombstone.deletionTime().markedForDeleteAt(),
|
tombstone.deletionTime().markedForDeleteAt(),
|
||||||
tombstone.deletionTime().localDeletionTime());
|
tombstone.deletionTime().localDeletionTimeUnsignedInteger);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -146,11 +154,11 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
* This method will be faster if the new tombstone sort after all the currently existing ones (this is a common use case),
|
* This method will be faster if the new tombstone sort after all the currently existing ones (this is a common use case),
|
||||||
* but it doesn't assume it.
|
* but it doesn't assume it.
|
||||||
*/
|
*/
|
||||||
public void add(ClusteringBound<?> start, ClusteringBound<?> end, long markedAt, int delTime)
|
private void add(ClusteringBound<?> start, ClusteringBound<?> end, long markedAt, int delTimeUnsignedInteger)
|
||||||
{
|
{
|
||||||
if (isEmpty())
|
if (isEmpty())
|
||||||
{
|
{
|
||||||
addInternal(0, start, end, markedAt, delTime);
|
addInternal(0, start, end, markedAt, delTimeUnsignedInteger);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -159,13 +167,13 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
// Fast path if we add in sorted order
|
// Fast path if we add in sorted order
|
||||||
if (c <= 0)
|
if (c <= 0)
|
||||||
{
|
{
|
||||||
addInternal(size, start, end, markedAt, delTime);
|
addInternal(size, start, end, markedAt, delTimeUnsignedInteger);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Note: insertFrom expect i to be the insertion point in term of interval ends
|
// Note: insertFrom expect i to be the insertion point in term of interval ends
|
||||||
int pos = Arrays.binarySearch(ends, 0, size, start, comparator);
|
int pos = Arrays.binarySearch(ends, 0, size, start, comparator);
|
||||||
insertFrom((pos >= 0 ? pos+1 : -pos-1), start, end, markedAt, delTime);
|
insertFrom((pos >= 0 ? pos+1 : -pos-1), start, end, markedAt, delTimeUnsignedInteger);
|
||||||
}
|
}
|
||||||
boundaryHeapSize += start.unsharedHeapSize() + end.unsharedHeapSize();
|
boundaryHeapSize += start.unsharedHeapSize() + end.unsharedHeapSize();
|
||||||
}
|
}
|
||||||
|
|
@ -205,7 +213,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
if (size > 10 * tombstones.size)
|
if (size > 10 * tombstones.size)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < tombstones.size; i++)
|
for (int i = 0; i < tombstones.size; i++)
|
||||||
add(tombstones.starts[i], tombstones.ends[i], tombstones.markedAts[i], tombstones.delTimes[i]);
|
add(tombstones.starts[i], tombstones.ends[i], tombstones.markedAts[i], tombstones.delTimesUnsignedIntegers[i]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -215,7 +223,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
{
|
{
|
||||||
if (comparator.compare(tombstones.starts[j], ends[i]) < 0)
|
if (comparator.compare(tombstones.starts[j], ends[i]) < 0)
|
||||||
{
|
{
|
||||||
insertFrom(i, tombstones.starts[j], tombstones.ends[j], tombstones.markedAts[j], tombstones.delTimes[j]);
|
insertFrom(i, tombstones.starts[j], tombstones.ends[j], tombstones.markedAts[j], tombstones.delTimesUnsignedIntegers[j]);
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -225,7 +233,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
}
|
}
|
||||||
// Addds the remaining ones from tombstones if any (note that addInternal will increment size if relevant).
|
// Addds the remaining ones from tombstones if any (note that addInternal will increment size if relevant).
|
||||||
for (; j < tombstones.size; j++)
|
for (; j < tombstones.size; j++)
|
||||||
addInternal(size, tombstones.starts[j], tombstones.ends[j], tombstones.markedAts[j], tombstones.delTimes[j]);
|
addInternal(size, tombstones.starts[j], tombstones.ends[j], tombstones.markedAts[j], tombstones.delTimesUnsignedIntegers[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -247,7 +255,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
public DeletionTime searchDeletionTime(Clustering<?> name)
|
public DeletionTime searchDeletionTime(Clustering<?> name)
|
||||||
{
|
{
|
||||||
int idx = searchInternal(name, 0, size);
|
int idx = searchInternal(name, 0, size);
|
||||||
return idx < 0 ? null : new DeletionTime(markedAts[idx], delTimes[idx]);
|
return idx < 0 ? null : DeletionTime.buildUnsafeWithUnsignedInteger(markedAts[idx], delTimesUnsignedIntegers[idx]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public RangeTombstone search(Clustering<?> name)
|
public RangeTombstone search(Clustering<?> name)
|
||||||
|
|
@ -292,7 +300,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
{
|
{
|
||||||
dataSize += starts[i].dataSize() + ends[i].dataSize();
|
dataSize += starts[i].dataSize() + ends[i].dataSize();
|
||||||
dataSize += TypeSizes.sizeof(markedAts[i]);
|
dataSize += TypeSizes.sizeof(markedAts[i]);
|
||||||
dataSize += TypeSizes.sizeof(delTimes[i]);
|
dataSize += TypeSizes.sizeof(delTimesUnsignedIntegers[i]);
|
||||||
}
|
}
|
||||||
return dataSize;
|
return dataSize;
|
||||||
}
|
}
|
||||||
|
|
@ -310,7 +318,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
for (int i = 0; i < size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
{
|
{
|
||||||
collector.updateTimestamp(markedAts[i]);
|
collector.updateTimestamp(markedAts[i]);
|
||||||
collector.updateLocalDeletionTime(delTimes[i]);
|
collector.updateLocalDeletionTime(CassandraUInt.toLong(delTimesUnsignedIntegers[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -322,22 +330,22 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
|
|
||||||
private RangeTombstone rangeTombstone(int idx)
|
private RangeTombstone rangeTombstone(int idx)
|
||||||
{
|
{
|
||||||
return new RangeTombstone(Slice.make(starts[idx], ends[idx]), new DeletionTime(markedAts[idx], delTimes[idx]));
|
return new RangeTombstone(Slice.make(starts[idx], ends[idx]), DeletionTime.buildUnsafeWithUnsignedInteger(markedAts[idx], delTimesUnsignedIntegers[idx]));
|
||||||
}
|
}
|
||||||
|
|
||||||
private RangeTombstone rangeTombstoneWithNewStart(int idx, ClusteringBound<?> newStart)
|
private RangeTombstone rangeTombstoneWithNewStart(int idx, ClusteringBound<?> newStart)
|
||||||
{
|
{
|
||||||
return new RangeTombstone(Slice.make(newStart, ends[idx]), new DeletionTime(markedAts[idx], delTimes[idx]));
|
return new RangeTombstone(Slice.make(newStart, ends[idx]), DeletionTime.buildUnsafeWithUnsignedInteger(markedAts[idx], delTimesUnsignedIntegers[idx]));
|
||||||
}
|
}
|
||||||
|
|
||||||
private RangeTombstone rangeTombstoneWithNewEnd(int idx, ClusteringBound<?> newEnd)
|
private RangeTombstone rangeTombstoneWithNewEnd(int idx, ClusteringBound<?> newEnd)
|
||||||
{
|
{
|
||||||
return new RangeTombstone(Slice.make(starts[idx], newEnd), new DeletionTime(markedAts[idx], delTimes[idx]));
|
return new RangeTombstone(Slice.make(starts[idx], newEnd), DeletionTime.buildUnsafeWithUnsignedInteger(markedAts[idx], delTimesUnsignedIntegers[idx]));
|
||||||
}
|
}
|
||||||
|
|
||||||
private RangeTombstone rangeTombstoneWithNewBounds(int idx, ClusteringBound<?> newStart, ClusteringBound<?> newEnd)
|
private RangeTombstone rangeTombstoneWithNewBounds(int idx, ClusteringBound<?> newStart, ClusteringBound<?> newEnd)
|
||||||
{
|
{
|
||||||
return new RangeTombstone(Slice.make(newStart, newEnd), new DeletionTime(markedAts[idx], delTimes[idx]));
|
return new RangeTombstone(Slice.make(newStart, newEnd), DeletionTime.buildUnsafeWithUnsignedInteger(markedAts[idx], delTimesUnsignedIntegers[idx]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Iterator<RangeTombstone> iterator()
|
public Iterator<RangeTombstone> iterator()
|
||||||
|
|
@ -491,7 +499,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
return false;
|
return false;
|
||||||
if (markedAts[i] != that.markedAts[i])
|
if (markedAts[i] != that.markedAts[i])
|
||||||
return false;
|
return false;
|
||||||
if (delTimes[i] != that.delTimes[i])
|
if (delTimesUnsignedIntegers[i] != that.delTimesUnsignedIntegers[i])
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -505,7 +513,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
{
|
{
|
||||||
result += starts[i].hashCode() + ends[i].hashCode();
|
result += starts[i].hashCode() + ends[i].hashCode();
|
||||||
result += (int)(markedAts[i] ^ (markedAts[i] >>> 32));
|
result += (int)(markedAts[i] ^ (markedAts[i] >>> 32));
|
||||||
result += delTimes[i];
|
result += delTimesUnsignedIntegers[i];
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -516,7 +524,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
System.arraycopy(src.starts, 0, dst.starts, 0, src.size);
|
System.arraycopy(src.starts, 0, dst.starts, 0, src.size);
|
||||||
System.arraycopy(src.ends, 0, dst.ends, 0, src.size);
|
System.arraycopy(src.ends, 0, dst.ends, 0, src.size);
|
||||||
System.arraycopy(src.markedAts, 0, dst.markedAts, 0, src.size);
|
System.arraycopy(src.markedAts, 0, dst.markedAts, 0, src.size);
|
||||||
System.arraycopy(src.delTimes, 0, dst.delTimes, 0, src.size);
|
System.arraycopy(src.delTimesUnsignedIntegers, 0, dst.delTimesUnsignedIntegers, 0, src.size);
|
||||||
dst.size = src.size;
|
dst.size = src.size;
|
||||||
dst.boundaryHeapSize = src.boundaryHeapSize;
|
dst.boundaryHeapSize = src.boundaryHeapSize;
|
||||||
}
|
}
|
||||||
|
|
@ -533,7 +541,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
* - e_i <= s_i+1
|
* - e_i <= s_i+1
|
||||||
* Basically, range are non overlapping and in order.
|
* Basically, range are non overlapping and in order.
|
||||||
*/
|
*/
|
||||||
private void insertFrom(int i, ClusteringBound<?> start, ClusteringBound<?> end, long markedAt, int delTime)
|
private void insertFrom(int i, ClusteringBound<?> start, ClusteringBound<?> end, long markedAt, int delTimeUnsignedInternal)
|
||||||
{
|
{
|
||||||
while (i < size)
|
while (i < size)
|
||||||
{
|
{
|
||||||
|
|
@ -555,9 +563,9 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
ClusteringBound<?> newEnd = start.invert();
|
ClusteringBound<?> newEnd = start.invert();
|
||||||
if (!Slice.isEmpty(comparator, starts[i], newEnd))
|
if (!Slice.isEmpty(comparator, starts[i], newEnd))
|
||||||
{
|
{
|
||||||
addInternal(i, starts[i], newEnd, markedAts[i], delTimes[i]);
|
addInternal(i, starts[i], newEnd, markedAts[i], delTimesUnsignedIntegers[i]);
|
||||||
i++;
|
i++;
|
||||||
setInternal(i, start, ends[i], markedAts[i], delTimes[i]);
|
setInternal(i, start, ends[i], markedAts[i], delTimesUnsignedIntegers[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -569,7 +577,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
{
|
{
|
||||||
// Here start <= starts[i] and end < starts[i]
|
// Here start <= starts[i] and end < starts[i]
|
||||||
// This means the current element is before the current one.
|
// This means the current element is before the current one.
|
||||||
addInternal(i, start, end, markedAt, delTime);
|
addInternal(i, start, end, markedAt, delTimeUnsignedInternal);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -586,11 +594,11 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
// we're good with the next element
|
// we're good with the next element
|
||||||
if (i == size-1 || comparator.compare(end, starts[i+1]) <= 0)
|
if (i == size-1 || comparator.compare(end, starts[i+1]) <= 0)
|
||||||
{
|
{
|
||||||
setInternal(i, start, end, markedAt, delTime);
|
setInternal(i, start, end, markedAt, delTimeUnsignedInternal);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
setInternal(i, start, starts[i+1].invert(), markedAt, delTime);
|
setInternal(i, start, starts[i+1].invert(), markedAt, delTimeUnsignedInternal);
|
||||||
start = starts[i+1];
|
start = starts[i+1];
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
@ -598,12 +606,12 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
{
|
{
|
||||||
// We don't overwrite fully. Insert the new interval, and then update the now next
|
// We don't overwrite fully. Insert the new interval, and then update the now next
|
||||||
// one to reflect the not overwritten parts. We're then done.
|
// one to reflect the not overwritten parts. We're then done.
|
||||||
addInternal(i, start, end, markedAt, delTime);
|
addInternal(i, start, end, markedAt, delTimeUnsignedInternal);
|
||||||
i++;
|
i++;
|
||||||
ClusteringBound<?> newStart = end.invert();
|
ClusteringBound<?> newStart = end.invert();
|
||||||
if (!Slice.isEmpty(comparator, newStart, ends[i]))
|
if (!Slice.isEmpty(comparator, newStart, ends[i]))
|
||||||
{
|
{
|
||||||
setInternal(i, newStart, ends[i], markedAts[i], delTimes[i]);
|
setInternal(i, newStart, ends[i], markedAts[i], delTimesUnsignedIntegers[i]);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -619,13 +627,13 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
// otherwise insert until the beginning of the current element
|
// otherwise insert until the beginning of the current element
|
||||||
if (comparator.compare(end, starts[i]) <= 0)
|
if (comparator.compare(end, starts[i]) <= 0)
|
||||||
{
|
{
|
||||||
addInternal(i, start, end, markedAt, delTime);
|
addInternal(i, start, end, markedAt, delTimeUnsignedInternal);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ClusteringBound<?> newEnd = starts[i].invert();
|
ClusteringBound<?> newEnd = starts[i].invert();
|
||||||
if (!Slice.isEmpty(comparator, start, newEnd))
|
if (!Slice.isEmpty(comparator, start, newEnd))
|
||||||
{
|
{
|
||||||
addInternal(i, start, newEnd, markedAt, delTime);
|
addInternal(i, start, newEnd, markedAt, delTimeUnsignedInternal);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -643,7 +651,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we got there, then just insert the remainder at the end
|
// If we got there, then just insert the remainder at the end
|
||||||
addInternal(i, start, end, markedAt, delTime);
|
addInternal(i, start, end, markedAt, delTimeUnsignedInternal);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int capacity()
|
private int capacity()
|
||||||
|
|
@ -654,7 +662,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
/*
|
/*
|
||||||
* Adds the new tombstone at index i, growing and/or moving elements to make room for it.
|
* Adds the new tombstone at index i, growing and/or moving elements to make room for it.
|
||||||
*/
|
*/
|
||||||
private void addInternal(int i, ClusteringBound<?> start, ClusteringBound<?> end, long markedAt, int delTime)
|
private void addInternal(int i, ClusteringBound<?> start, ClusteringBound<?> end, long markedAt, int delTimeUnsignedInteger)
|
||||||
{
|
{
|
||||||
assert i >= 0;
|
assert i >= 0;
|
||||||
|
|
||||||
|
|
@ -663,7 +671,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
else if (i < size)
|
else if (i < size)
|
||||||
moveElements(i);
|
moveElements(i);
|
||||||
|
|
||||||
setInternal(i, start, end, markedAt, delTime);
|
setInternal(i, start, end, markedAt, delTimeUnsignedInteger);
|
||||||
size++;
|
size++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -695,7 +703,7 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
starts = grow(starts, size, newLength, i);
|
starts = grow(starts, size, newLength, i);
|
||||||
ends = grow(ends, size, newLength, i);
|
ends = grow(ends, size, newLength, i);
|
||||||
markedAts = grow(markedAts, size, newLength, i);
|
markedAts = grow(markedAts, size, newLength, i);
|
||||||
delTimes = grow(delTimes, size, newLength, i);
|
delTimesUnsignedIntegers = grow(delTimesUnsignedIntegers, size, newLength, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ClusteringBound<?>[] grow(ClusteringBound<?>[] a, int size, int newLength, int i)
|
private static ClusteringBound<?>[] grow(ClusteringBound<?>[] a, int size, int newLength, int i)
|
||||||
|
|
@ -742,20 +750,20 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
System.arraycopy(starts, i, starts, i+1, size - i);
|
System.arraycopy(starts, i, starts, i+1, size - i);
|
||||||
System.arraycopy(ends, i, ends, i+1, size - i);
|
System.arraycopy(ends, i, ends, i+1, size - i);
|
||||||
System.arraycopy(markedAts, i, markedAts, i+1, size - i);
|
System.arraycopy(markedAts, i, markedAts, i+1, size - i);
|
||||||
System.arraycopy(delTimes, i, delTimes, i+1, size - i);
|
System.arraycopy(delTimesUnsignedIntegers, i, delTimesUnsignedIntegers, i+1, size - i);
|
||||||
// we set starts[i] to null to indicate the position is now empty, so that we update boundaryHeapSize
|
// we set starts[i] to null to indicate the position is now empty, so that we update boundaryHeapSize
|
||||||
// when we set it
|
// when we set it
|
||||||
starts[i] = null;
|
starts[i] = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setInternal(int i, ClusteringBound<?> start, ClusteringBound<?> end, long markedAt, int delTime)
|
private void setInternal(int i, ClusteringBound<?> start, ClusteringBound<?> end, long markedAt, int delTimeUnsignedInteger)
|
||||||
{
|
{
|
||||||
if (starts[i] != null)
|
if (starts[i] != null)
|
||||||
boundaryHeapSize -= starts[i].unsharedHeapSize() + ends[i].unsharedHeapSize();
|
boundaryHeapSize -= starts[i].unsharedHeapSize() + ends[i].unsharedHeapSize();
|
||||||
starts[i] = start;
|
starts[i] = start;
|
||||||
ends[i] = end;
|
ends[i] = end;
|
||||||
markedAts[i] = markedAt;
|
markedAts[i] = markedAt;
|
||||||
delTimes[i] = delTime;
|
delTimesUnsignedIntegers[i] = delTimeUnsignedInteger;
|
||||||
boundaryHeapSize += start.unsharedHeapSize() + end.unsharedHeapSize();
|
boundaryHeapSize += start.unsharedHeapSize() + end.unsharedHeapSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -767,6 +775,6 @@ public class RangeTombstoneList implements Iterable<RangeTombstone>, IMeasurable
|
||||||
+ ObjectSizes.sizeOfArray(starts)
|
+ ObjectSizes.sizeOfArray(starts)
|
||||||
+ ObjectSizes.sizeOfArray(ends)
|
+ ObjectSizes.sizeOfArray(ends)
|
||||||
+ ObjectSizes.sizeOfArray(markedAts)
|
+ ObjectSizes.sizeOfArray(markedAts)
|
||||||
+ ObjectSizes.sizeOfArray(delTimes);
|
+ ObjectSizes.sizeOfArray(delTimesUnsignedIntegers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ import com.google.common.annotations.VisibleForTesting;
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
|
@ -38,6 +39,7 @@ import org.apache.cassandra.config.*;
|
||||||
import org.apache.cassandra.db.filter.*;
|
import org.apache.cassandra.db.filter.*;
|
||||||
import org.apache.cassandra.exceptions.QueryCancelledException;
|
import org.apache.cassandra.exceptions.QueryCancelledException;
|
||||||
import org.apache.cassandra.net.MessageFlag;
|
import org.apache.cassandra.net.MessageFlag;
|
||||||
|
import org.apache.cassandra.net.MessagingService;
|
||||||
import org.apache.cassandra.net.ParamType;
|
import org.apache.cassandra.net.ParamType;
|
||||||
import org.apache.cassandra.net.Verb;
|
import org.apache.cassandra.net.Verb;
|
||||||
import org.apache.cassandra.db.partitions.*;
|
import org.apache.cassandra.db.partitions.*;
|
||||||
|
|
@ -67,6 +69,7 @@ import org.apache.cassandra.schema.SchemaProvider;
|
||||||
import org.apache.cassandra.service.ActiveRepairService;
|
import org.apache.cassandra.service.ActiveRepairService;
|
||||||
import org.apache.cassandra.service.ClientWarn;
|
import org.apache.cassandra.service.ClientWarn;
|
||||||
import org.apache.cassandra.tracing.Tracing;
|
import org.apache.cassandra.tracing.Tracing;
|
||||||
|
import org.apache.cassandra.utils.CassandraUInt;
|
||||||
import org.apache.cassandra.utils.FBUtilities;
|
import org.apache.cassandra.utils.FBUtilities;
|
||||||
import org.apache.cassandra.utils.ObjectSizes;
|
import org.apache.cassandra.utils.ObjectSizes;
|
||||||
import org.apache.cassandra.utils.TimeUUID;
|
import org.apache.cassandra.utils.TimeUUID;
|
||||||
|
|
@ -114,7 +117,7 @@ public abstract class ReadCommand extends AbstractReadQuery
|
||||||
int digestVersion,
|
int digestVersion,
|
||||||
boolean acceptsTransient,
|
boolean acceptsTransient,
|
||||||
TableMetadata metadata,
|
TableMetadata metadata,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
RowFilter rowFilter,
|
RowFilter rowFilter,
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
|
|
@ -139,7 +142,7 @@ public abstract class ReadCommand extends AbstractReadQuery
|
||||||
int digestVersion,
|
int digestVersion,
|
||||||
boolean acceptsTransient,
|
boolean acceptsTransient,
|
||||||
TableMetadata metadata,
|
TableMetadata metadata,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
RowFilter rowFilter,
|
RowFilter rowFilter,
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
|
|
@ -942,7 +945,7 @@ public abstract class ReadCommand extends AbstractReadQuery
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("resource") // the returned iterators are closed by the caller
|
@SuppressWarnings("resource") // the returned iterators are closed by the caller
|
||||||
List<T> finalizeIterators(ColumnFamilyStore cfs, int nowInSec, int oldestUnrepairedTombstone)
|
List<T> finalizeIterators(ColumnFamilyStore cfs, long nowInSec, long oldestUnrepairedTombstone)
|
||||||
{
|
{
|
||||||
if (repairedIters.isEmpty())
|
if (repairedIters.isEmpty())
|
||||||
return unrepairedIters;
|
return unrepairedIters;
|
||||||
|
|
@ -1070,7 +1073,7 @@ public abstract class ReadCommand extends AbstractReadQuery
|
||||||
if (command.isDigestQuery())
|
if (command.isDigestQuery())
|
||||||
out.writeUnsignedVInt32(command.digestVersion());
|
out.writeUnsignedVInt32(command.digestVersion());
|
||||||
command.metadata().id.serialize(out);
|
command.metadata().id.serialize(out);
|
||||||
out.writeInt(command.nowInSec());
|
out.writeInt(version >= MessagingService.VERSION_50 ? CassandraUInt.fromLong(command.nowInSec()) : (int) command.nowInSec());
|
||||||
ColumnFilter.serializer.serialize(command.columnFilter(), out, version);
|
ColumnFilter.serializer.serialize(command.columnFilter(), out, version);
|
||||||
RowFilter.serializer.serialize(command.rowFilter(), out, version);
|
RowFilter.serializer.serialize(command.rowFilter(), out, version);
|
||||||
DataLimits.serializer.serialize(command.limits(), out, version, command.metadata().comparator);
|
DataLimits.serializer.serialize(command.limits(), out, version, command.metadata().comparator);
|
||||||
|
|
@ -1097,7 +1100,7 @@ public abstract class ReadCommand extends AbstractReadQuery
|
||||||
boolean hasIndex = hasIndex(flags);
|
boolean hasIndex = hasIndex(flags);
|
||||||
int digestVersion = isDigest ? in.readUnsignedVInt32() : 0;
|
int digestVersion = isDigest ? in.readUnsignedVInt32() : 0;
|
||||||
TableMetadata metadata = schema.getExistingTableMetadata(TableId.deserialize(in));
|
TableMetadata metadata = schema.getExistingTableMetadata(TableId.deserialize(in));
|
||||||
int nowInSec = in.readInt();
|
long nowInSec = version >= MessagingService.VERSION_50 ? CassandraUInt.toLong(in.readInt()) : in.readInt();
|
||||||
ColumnFilter columnFilter = ColumnFilter.serializer.deserialize(in, version, metadata);
|
ColumnFilter columnFilter = ColumnFilter.serializer.deserialize(in, version, metadata);
|
||||||
RowFilter rowFilter = RowFilter.serializer.deserialize(in, version, metadata);
|
RowFilter rowFilter = RowFilter.serializer.deserialize(in, version, metadata);
|
||||||
DataLimits limits = DataLimits.serializer.deserialize(in, version, metadata);
|
DataLimits limits = DataLimits.serializer.deserialize(in, version, metadata);
|
||||||
|
|
@ -1128,7 +1131,7 @@ public abstract class ReadCommand extends AbstractReadQuery
|
||||||
return 2 // kind + flags
|
return 2 // kind + flags
|
||||||
+ (command.isDigestQuery() ? TypeSizes.sizeofUnsignedVInt(command.digestVersion()) : 0)
|
+ (command.isDigestQuery() ? TypeSizes.sizeofUnsignedVInt(command.digestVersion()) : 0)
|
||||||
+ command.metadata().id.serializedSize()
|
+ command.metadata().id.serializedSize()
|
||||||
+ TypeSizes.sizeof(command.nowInSec())
|
+ TypeSizes.INT_SIZE // command.nowInSec() is serialized as uint
|
||||||
+ ColumnFilter.serializer.serializedSize(command.columnFilter(), version)
|
+ ColumnFilter.serializer.serializedSize(command.columnFilter(), version)
|
||||||
+ RowFilter.serializer.serializedSize(command.rowFilter(), version)
|
+ RowFilter.serializer.serializedSize(command.rowFilter(), version)
|
||||||
+ DataLimits.serializer.serializedSize(command.limits(), version, command.metadata().comparator)
|
+ DataLimits.serializer.serializedSize(command.limits(), version, command.metadata().comparator)
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ public class ReadExecutionController implements AutoCloseable
|
||||||
private final long createdAtNanos; // Only used while sampling
|
private final long createdAtNanos; // Only used while sampling
|
||||||
|
|
||||||
private final RepairedDataInfo repairedDataInfo;
|
private final RepairedDataInfo repairedDataInfo;
|
||||||
private int oldestUnrepairedTombstone = Integer.MAX_VALUE;
|
private long oldestUnrepairedTombstone = Long.MAX_VALUE;
|
||||||
|
|
||||||
ReadExecutionController(ReadCommand command,
|
ReadExecutionController(ReadCommand command,
|
||||||
OpOrder.Group baseOp,
|
OpOrder.Group baseOp,
|
||||||
|
|
@ -91,12 +91,12 @@ public class ReadExecutionController implements AutoCloseable
|
||||||
return writeContext;
|
return writeContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
int oldestUnrepairedTombstone()
|
long oldestUnrepairedTombstone()
|
||||||
{
|
{
|
||||||
return oldestUnrepairedTombstone;
|
return oldestUnrepairedTombstone;
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateMinOldestUnrepairedTombstone(int candidate)
|
void updateMinOldestUnrepairedTombstone(long candidate)
|
||||||
{
|
{
|
||||||
oldestUnrepairedTombstone = Math.min(oldestUnrepairedTombstone, candidate);
|
oldestUnrepairedTombstone = Math.min(oldestUnrepairedTombstone, candidate);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ public interface ReadQuery
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int nowInSec()
|
public long nowInSec()
|
||||||
{
|
{
|
||||||
return FBUtilities.nowInSeconds();
|
return FBUtilities.nowInSeconds();
|
||||||
}
|
}
|
||||||
|
|
@ -201,7 +201,7 @@ public interface ReadQuery
|
||||||
*
|
*
|
||||||
* @return the time (in seconds) to use as "now".
|
* @return the time (in seconds) to use as "now".
|
||||||
*/
|
*/
|
||||||
public int nowInSec();
|
public long nowInSec();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if this {@code ReadQuery} selects full partitions, that is it has no filtering on clustering or regular columns.
|
* Checks if this {@code ReadQuery} selects full partitions, that is it has no filtering on clustering or regular columns.
|
||||||
|
|
|
||||||
|
|
@ -112,7 +112,7 @@ class RepairedDataInfo
|
||||||
return calculatedDigest;
|
return calculatedDigest;
|
||||||
}
|
}
|
||||||
|
|
||||||
void prepare(ColumnFamilyStore cfs, int nowInSec, int oldestUnrepairedTombstone)
|
void prepare(ColumnFamilyStore cfs, long nowInSec, long oldestUnrepairedTombstone)
|
||||||
{
|
{
|
||||||
this.purger = new RepairedDataPurger(cfs, nowInSec, oldestUnrepairedTombstone);
|
this.purger = new RepairedDataPurger(cfs, nowInSec, oldestUnrepairedTombstone);
|
||||||
this.metrics = cfs.metric;
|
this.metrics = cfs.metric;
|
||||||
|
|
@ -326,8 +326,8 @@ class RepairedDataInfo
|
||||||
private static class RepairedDataPurger extends PurgeFunction
|
private static class RepairedDataPurger extends PurgeFunction
|
||||||
{
|
{
|
||||||
RepairedDataPurger(ColumnFamilyStore cfs,
|
RepairedDataPurger(ColumnFamilyStore cfs,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
int oldestUnrepairedTombstone)
|
long oldestUnrepairedTombstone)
|
||||||
{
|
{
|
||||||
super(nowInSec,
|
super(nowInSec,
|
||||||
cfs.gcBefore(nowInSec),
|
cfs.gcBefore(nowInSec),
|
||||||
|
|
|
||||||
|
|
@ -167,9 +167,9 @@ public class SerializationHeader
|
||||||
out.writeUnsignedVInt(timestamp - stats.minTimestamp);
|
out.writeUnsignedVInt(timestamp - stats.minTimestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeLocalDeletionTime(int localDeletionTime, DataOutputPlus out) throws IOException
|
public void writeLocalDeletionTime(long localDeletionTime, DataOutputPlus out) throws IOException
|
||||||
{
|
{
|
||||||
out.writeUnsignedVInt32(localDeletionTime - stats.minLocalDeletionTime);
|
out.writeUnsignedVInt32((int) (localDeletionTime - stats.minLocalDeletionTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeTTL(int ttl, DataOutputPlus out) throws IOException
|
public void writeTTL(int ttl, DataOutputPlus out) throws IOException
|
||||||
|
|
@ -188,7 +188,7 @@ public class SerializationHeader
|
||||||
return in.readUnsignedVInt() + stats.minTimestamp;
|
return in.readUnsignedVInt() + stats.minTimestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int readLocalDeletionTime(DataInputPlus in) throws IOException
|
public long readLocalDeletionTime(DataInputPlus in) throws IOException
|
||||||
{
|
{
|
||||||
return in.readUnsignedVInt32() + stats.minLocalDeletionTime;
|
return in.readUnsignedVInt32() + stats.minLocalDeletionTime;
|
||||||
}
|
}
|
||||||
|
|
@ -201,8 +201,8 @@ public class SerializationHeader
|
||||||
public DeletionTime readDeletionTime(DataInputPlus in) throws IOException
|
public DeletionTime readDeletionTime(DataInputPlus in) throws IOException
|
||||||
{
|
{
|
||||||
long markedAt = readTimestamp(in);
|
long markedAt = readTimestamp(in);
|
||||||
int localDeletionTime = readLocalDeletionTime(in);
|
long localDeletionTime = readLocalDeletionTime(in);
|
||||||
return new DeletionTime(markedAt, localDeletionTime);
|
return DeletionTime.build(markedAt, localDeletionTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
public long timestampSerializedSize(long timestamp)
|
public long timestampSerializedSize(long timestamp)
|
||||||
|
|
@ -210,7 +210,7 @@ public class SerializationHeader
|
||||||
return TypeSizes.sizeofUnsignedVInt(timestamp - stats.minTimestamp);
|
return TypeSizes.sizeofUnsignedVInt(timestamp - stats.minTimestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
public long localDeletionTimeSerializedSize(int localDeletionTime)
|
public long localDeletionTimeSerializedSize(long localDeletionTime)
|
||||||
{
|
{
|
||||||
return TypeSizes.sizeofUnsignedVInt(localDeletionTime - stats.minLocalDeletionTime);
|
return TypeSizes.sizeofUnsignedVInt(localDeletionTime - stats.minLocalDeletionTime);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ public abstract class SimpleBuilders
|
||||||
{
|
{
|
||||||
protected long timestamp = FBUtilities.timestampMicros();
|
protected long timestamp = FBUtilities.timestampMicros();
|
||||||
protected int ttl = 0;
|
protected int ttl = 0;
|
||||||
protected int nowInSec = FBUtilities.nowInSeconds();
|
protected long nowInSec = FBUtilities.nowInSeconds();
|
||||||
|
|
||||||
protected void copyParams(AbstractBuilder<?> other)
|
protected void copyParams(AbstractBuilder<?> other)
|
||||||
{
|
{
|
||||||
|
|
@ -97,7 +97,7 @@ public abstract class SimpleBuilders
|
||||||
return (T)this;
|
return (T)this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public T nowInSec(int nowInSec)
|
public T nowInSec(long nowInSec)
|
||||||
{
|
{
|
||||||
this.nowInSec = nowInSec;
|
this.nowInSec = nowInSec;
|
||||||
return (T)this;
|
return (T)this;
|
||||||
|
|
@ -192,7 +192,7 @@ public abstract class SimpleBuilders
|
||||||
|
|
||||||
public PartitionUpdate.SimpleBuilder delete()
|
public PartitionUpdate.SimpleBuilder delete()
|
||||||
{
|
{
|
||||||
this.partitionDeletion = new DeletionTime(timestamp, nowInSec);
|
this.partitionDeletion = DeletionTime.build(timestamp, nowInSec);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -201,7 +201,7 @@ public abstract class SimpleBuilders
|
||||||
if (rangeBuilders == null)
|
if (rangeBuilders == null)
|
||||||
rangeBuilders = new ArrayList<>();
|
rangeBuilders = new ArrayList<>();
|
||||||
|
|
||||||
RTBuilder builder = new RTBuilder(metadata.comparator, new DeletionTime(timestamp, nowInSec));
|
RTBuilder builder = new RTBuilder(metadata.comparator, DeletionTime.build(timestamp, nowInSec));
|
||||||
rangeBuilders.add(builder);
|
rangeBuilders.add(builder);
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
@ -379,13 +379,13 @@ public abstract class SimpleBuilders
|
||||||
|
|
||||||
if (value == null)
|
if (value == null)
|
||||||
{
|
{
|
||||||
builder.addComplexDeletion(column, new DeletionTime(timestamp, nowInSec));
|
builder.addComplexDeletion(column, DeletionTime.build(timestamp, nowInSec));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Erase previous entry if any.
|
// Erase previous entry if any.
|
||||||
if (overwriteForCollection)
|
if (overwriteForCollection)
|
||||||
builder.addComplexDeletion(column, new DeletionTime(timestamp - 1, nowInSec));
|
builder.addComplexDeletion(column, DeletionTime.build(timestamp - 1, nowInSec));
|
||||||
switch (((CollectionType)column.type).kind)
|
switch (((CollectionType)column.type).kind)
|
||||||
{
|
{
|
||||||
case LIST:
|
case LIST:
|
||||||
|
|
@ -417,13 +417,13 @@ public abstract class SimpleBuilders
|
||||||
public Row.SimpleBuilder delete()
|
public Row.SimpleBuilder delete()
|
||||||
{
|
{
|
||||||
assert !initiated : "If called, delete() should be called before any other column value addition";
|
assert !initiated : "If called, delete() should be called before any other column value addition";
|
||||||
builder.addRowDeletion(Row.Deletion.regular(new DeletionTime(timestamp, nowInSec)));
|
builder.addRowDeletion(Row.Deletion.regular(DeletionTime.build(timestamp, nowInSec)));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Row.SimpleBuilder deletePrevious()
|
public Row.SimpleBuilder deletePrevious()
|
||||||
{
|
{
|
||||||
builder.addRowDeletion(Row.Deletion.regular(new DeletionTime(timestamp - 1, nowInSec)));
|
builder.addRowDeletion(Row.Deletion.regular(DeletionTime.build(timestamp - 1, nowInSec)));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,7 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar
|
||||||
int digestVersion,
|
int digestVersion,
|
||||||
boolean acceptsTransient,
|
boolean acceptsTransient,
|
||||||
TableMetadata metadata,
|
TableMetadata metadata,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
RowFilter rowFilter,
|
RowFilter rowFilter,
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
|
|
@ -114,7 +114,7 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar
|
||||||
int digestVersion,
|
int digestVersion,
|
||||||
boolean acceptsTransient,
|
boolean acceptsTransient,
|
||||||
TableMetadata metadata,
|
TableMetadata metadata,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
RowFilter rowFilter,
|
RowFilter rowFilter,
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
|
|
@ -167,7 +167,7 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar
|
||||||
* @return a newly created read command.
|
* @return a newly created read command.
|
||||||
*/
|
*/
|
||||||
public static SinglePartitionReadCommand create(TableMetadata metadata,
|
public static SinglePartitionReadCommand create(TableMetadata metadata,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
RowFilter rowFilter,
|
RowFilter rowFilter,
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
|
|
@ -203,7 +203,7 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar
|
||||||
* @return a newly created read command.
|
* @return a newly created read command.
|
||||||
*/
|
*/
|
||||||
public static SinglePartitionReadCommand create(TableMetadata metadata,
|
public static SinglePartitionReadCommand create(TableMetadata metadata,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
RowFilter rowFilter,
|
RowFilter rowFilter,
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
|
|
@ -232,7 +232,7 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar
|
||||||
* @return a newly created read command. The returned command will use no row filter and have no limits.
|
* @return a newly created read command. The returned command will use no row filter and have no limits.
|
||||||
*/
|
*/
|
||||||
public static SinglePartitionReadCommand create(TableMetadata metadata,
|
public static SinglePartitionReadCommand create(TableMetadata metadata,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
DecoratedKey key,
|
DecoratedKey key,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
ClusteringIndexFilter filter)
|
ClusteringIndexFilter filter)
|
||||||
|
|
@ -249,7 +249,7 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar
|
||||||
*
|
*
|
||||||
* @return a newly created read command that queries all the rows of {@code key}.
|
* @return a newly created read command that queries all the rows of {@code key}.
|
||||||
*/
|
*/
|
||||||
public static SinglePartitionReadCommand fullPartitionRead(TableMetadata metadata, int nowInSec, DecoratedKey key)
|
public static SinglePartitionReadCommand fullPartitionRead(TableMetadata metadata, long nowInSec, DecoratedKey key)
|
||||||
{
|
{
|
||||||
return create(metadata, nowInSec, key, Slices.ALL);
|
return create(metadata, nowInSec, key, Slices.ALL);
|
||||||
}
|
}
|
||||||
|
|
@ -263,7 +263,7 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar
|
||||||
*
|
*
|
||||||
* @return a newly created read command that queries all the rows of {@code key}.
|
* @return a newly created read command that queries all the rows of {@code key}.
|
||||||
*/
|
*/
|
||||||
public static SinglePartitionReadCommand fullPartitionRead(TableMetadata metadata, int nowInSec, ByteBuffer key)
|
public static SinglePartitionReadCommand fullPartitionRead(TableMetadata metadata, long nowInSec, ByteBuffer key)
|
||||||
{
|
{
|
||||||
return create(metadata, nowInSec, metadata.partitioner.decorateKey(key), Slices.ALL);
|
return create(metadata, nowInSec, metadata.partitioner.decorateKey(key), Slices.ALL);
|
||||||
}
|
}
|
||||||
|
|
@ -279,7 +279,7 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar
|
||||||
* @return a newly created read command that queries {@code slice} in {@code key}. The returned query will
|
* @return a newly created read command that queries {@code slice} in {@code key}. The returned query will
|
||||||
* query every columns for the table (without limit or row filtering) and be in forward order.
|
* query every columns for the table (without limit or row filtering) and be in forward order.
|
||||||
*/
|
*/
|
||||||
public static SinglePartitionReadCommand create(TableMetadata metadata, int nowInSec, DecoratedKey key, Slice slice)
|
public static SinglePartitionReadCommand create(TableMetadata metadata, long nowInSec, DecoratedKey key, Slice slice)
|
||||||
{
|
{
|
||||||
return create(metadata, nowInSec, key, Slices.with(metadata.comparator, slice));
|
return create(metadata, nowInSec, key, Slices.with(metadata.comparator, slice));
|
||||||
}
|
}
|
||||||
|
|
@ -295,7 +295,7 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar
|
||||||
* @return a newly created read command that queries the {@code slices} in {@code key}. The returned query will
|
* @return a newly created read command that queries the {@code slices} in {@code key}. The returned query will
|
||||||
* query every columns for the table (without limit or row filtering) and be in forward order.
|
* query every columns for the table (without limit or row filtering) and be in forward order.
|
||||||
*/
|
*/
|
||||||
public static SinglePartitionReadCommand create(TableMetadata metadata, int nowInSec, DecoratedKey key, Slices slices)
|
public static SinglePartitionReadCommand create(TableMetadata metadata, long nowInSec, DecoratedKey key, Slices slices)
|
||||||
{
|
{
|
||||||
ClusteringIndexSliceFilter filter = new ClusteringIndexSliceFilter(slices, false);
|
ClusteringIndexSliceFilter filter = new ClusteringIndexSliceFilter(slices, false);
|
||||||
return create(metadata, nowInSec, ColumnFilter.all(metadata), RowFilter.NONE, DataLimits.NONE, key, filter);
|
return create(metadata, nowInSec, ColumnFilter.all(metadata), RowFilter.NONE, DataLimits.NONE, key, filter);
|
||||||
|
|
@ -312,7 +312,7 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar
|
||||||
* @return a newly created read command that queries the {@code slices} in {@code key}. The returned query will
|
* @return a newly created read command that queries the {@code slices} in {@code key}. The returned query will
|
||||||
* query every columns for the table (without limit or row filtering) and be in forward order.
|
* query every columns for the table (without limit or row filtering) and be in forward order.
|
||||||
*/
|
*/
|
||||||
public static SinglePartitionReadCommand create(TableMetadata metadata, int nowInSec, ByteBuffer key, Slices slices)
|
public static SinglePartitionReadCommand create(TableMetadata metadata, long nowInSec, ByteBuffer key, Slices slices)
|
||||||
{
|
{
|
||||||
return create(metadata, nowInSec, metadata.partitioner.decorateKey(key), slices);
|
return create(metadata, nowInSec, metadata.partitioner.decorateKey(key), slices);
|
||||||
}
|
}
|
||||||
|
|
@ -328,7 +328,7 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar
|
||||||
* @return a newly created read command that queries the {@code names} in {@code key}. The returned query will
|
* @return a newly created read command that queries the {@code names} in {@code key}. The returned query will
|
||||||
* query every columns (without limit or row filtering) and be in forward order.
|
* query every columns (without limit or row filtering) and be in forward order.
|
||||||
*/
|
*/
|
||||||
public static SinglePartitionReadCommand create(TableMetadata metadata, int nowInSec, DecoratedKey key, NavigableSet<Clustering<?>> names)
|
public static SinglePartitionReadCommand create(TableMetadata metadata, long nowInSec, DecoratedKey key, NavigableSet<Clustering<?>> names)
|
||||||
{
|
{
|
||||||
ClusteringIndexNamesFilter filter = new ClusteringIndexNamesFilter(names, false);
|
ClusteringIndexNamesFilter filter = new ClusteringIndexNamesFilter(names, false);
|
||||||
return create(metadata, nowInSec, ColumnFilter.all(metadata), RowFilter.NONE, DataLimits.NONE, key, filter);
|
return create(metadata, nowInSec, ColumnFilter.all(metadata), RowFilter.NONE, DataLimits.NONE, key, filter);
|
||||||
|
|
@ -345,7 +345,7 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar
|
||||||
* @return a newly created read command that queries {@code name} in {@code key}. The returned query will
|
* @return a newly created read command that queries {@code name} in {@code key}. The returned query will
|
||||||
* query every columns (without limit or row filtering).
|
* query every columns (without limit or row filtering).
|
||||||
*/
|
*/
|
||||||
public static SinglePartitionReadCommand create(TableMetadata metadata, int nowInSec, DecoratedKey key, Clustering<?> name)
|
public static SinglePartitionReadCommand create(TableMetadata metadata, long nowInSec, DecoratedKey key, Clustering<?> name)
|
||||||
{
|
{
|
||||||
return create(metadata, nowInSec, key, FBUtilities.singleton(name, metadata.comparator));
|
return create(metadata, nowInSec, key, FBUtilities.singleton(name, metadata.comparator));
|
||||||
}
|
}
|
||||||
|
|
@ -1242,7 +1242,7 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar
|
||||||
public static class Group extends SinglePartitionReadQuery.Group<SinglePartitionReadCommand>
|
public static class Group extends SinglePartitionReadQuery.Group<SinglePartitionReadCommand>
|
||||||
{
|
{
|
||||||
public static Group create(TableMetadata metadata,
|
public static Group create(TableMetadata metadata,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
RowFilter rowFilter,
|
RowFilter rowFilter,
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
|
|
@ -1314,7 +1314,7 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar
|
||||||
int digestVersion,
|
int digestVersion,
|
||||||
boolean acceptsTransient,
|
boolean acceptsTransient,
|
||||||
TableMetadata metadata,
|
TableMetadata metadata,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
RowFilter rowFilter,
|
RowFilter rowFilter,
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
|
|
@ -1361,7 +1361,7 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar
|
||||||
int digestVersion,
|
int digestVersion,
|
||||||
boolean acceptsTransient,
|
boolean acceptsTransient,
|
||||||
TableMetadata metadata,
|
TableMetadata metadata,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
RowFilter rowFilter,
|
RowFilter rowFilter,
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ import org.apache.cassandra.transport.ProtocolVersion;
|
||||||
public interface SinglePartitionReadQuery extends ReadQuery
|
public interface SinglePartitionReadQuery extends ReadQuery
|
||||||
{
|
{
|
||||||
public static Group<? extends SinglePartitionReadQuery> createGroup(TableMetadata metadata,
|
public static Group<? extends SinglePartitionReadQuery> createGroup(TableMetadata metadata,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
RowFilter rowFilter,
|
RowFilter rowFilter,
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
|
|
@ -69,7 +69,7 @@ public interface SinglePartitionReadQuery extends ReadQuery
|
||||||
* @return a newly created read query. The returned query will use no row filter and have no limits.
|
* @return a newly created read query. The returned query will use no row filter and have no limits.
|
||||||
*/
|
*/
|
||||||
public static SinglePartitionReadQuery create(TableMetadata metadata,
|
public static SinglePartitionReadQuery create(TableMetadata metadata,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
DecoratedKey key,
|
DecoratedKey key,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
ClusteringIndexFilter filter)
|
ClusteringIndexFilter filter)
|
||||||
|
|
@ -91,7 +91,7 @@ public interface SinglePartitionReadQuery extends ReadQuery
|
||||||
* @return a newly created read query.
|
* @return a newly created read query.
|
||||||
*/
|
*/
|
||||||
public static SinglePartitionReadQuery create(TableMetadata metadata,
|
public static SinglePartitionReadQuery create(TableMetadata metadata,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
ColumnFilter columnFilter,
|
ColumnFilter columnFilter,
|
||||||
RowFilter rowFilter,
|
RowFilter rowFilter,
|
||||||
DataLimits limits,
|
DataLimits limits,
|
||||||
|
|
@ -161,7 +161,7 @@ public interface SinglePartitionReadQuery extends ReadQuery
|
||||||
{
|
{
|
||||||
public final List<T> queries;
|
public final List<T> queries;
|
||||||
private final DataLimits limits;
|
private final DataLimits limits;
|
||||||
private final int nowInSec;
|
private final long nowInSec;
|
||||||
private final boolean selectsFullPartitions;
|
private final boolean selectsFullPartitions;
|
||||||
|
|
||||||
public Group(List<T> queries, DataLimits limits)
|
public Group(List<T> queries, DataLimits limits)
|
||||||
|
|
@ -176,7 +176,7 @@ public interface SinglePartitionReadQuery extends ReadQuery
|
||||||
assert queries.get(i).nowInSec() == nowInSec;
|
assert queries.get(i).nowInSec() == nowInSec;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int nowInSec()
|
public long nowInSec()
|
||||||
{
|
{
|
||||||
return nowInSec;
|
return nowInSec;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1302,7 +1302,7 @@ public final class SystemKeyspace
|
||||||
/**
|
/**
|
||||||
* Load the current paxos state for the table and key
|
* Load the current paxos state for the table and key
|
||||||
*/
|
*/
|
||||||
public static PaxosState.Snapshot loadPaxosState(DecoratedKey partitionKey, TableMetadata metadata, int nowInSec)
|
public static PaxosState.Snapshot loadPaxosState(DecoratedKey partitionKey, TableMetadata metadata, long nowInSec)
|
||||||
{
|
{
|
||||||
String cql = "SELECT * FROM system." + PAXOS + " WHERE row_key = ? AND cf_id = ?";
|
String cql = "SELECT * FROM system." + PAXOS + " WHERE row_key = ? AND cf_id = ?";
|
||||||
List<Row> results = QueryProcessor.executeInternalRawWithNow(nowInSec, cql, partitionKey.getKey(), metadata.id.asUUID()).get(partitionKey);
|
List<Row> results = QueryProcessor.executeInternalRawWithNow(nowInSec, cql, partitionKey.getKey(), metadata.id.asUUID()).get(partitionKey);
|
||||||
|
|
@ -1383,9 +1383,9 @@ public final class SystemKeyspace
|
||||||
{
|
{
|
||||||
if (proposal instanceof AcceptedWithTTL)
|
if (proposal instanceof AcceptedWithTTL)
|
||||||
{
|
{
|
||||||
int localDeletionTime = ((Commit.AcceptedWithTTL) proposal).localDeletionTime;
|
long localDeletionTime = ((Commit.AcceptedWithTTL) proposal).localDeletionTime;
|
||||||
int ttlInSec = legacyPaxosTtlSec(proposal.update.metadata());
|
int ttlInSec = legacyPaxosTtlSec(proposal.update.metadata());
|
||||||
int nowInSec = localDeletionTime - ttlInSec;
|
long nowInSec = localDeletionTime - ttlInSec;
|
||||||
String cql = "UPDATE system." + PAXOS + " USING TIMESTAMP ? AND TTL ? SET proposal_ballot = ?, proposal = ?, proposal_version = ? WHERE row_key = ? AND cf_id = ?";
|
String cql = "UPDATE system." + PAXOS + " USING TIMESTAMP ? AND TTL ? SET proposal_ballot = ?, proposal = ?, proposal_version = ? WHERE row_key = ? AND cf_id = ?";
|
||||||
executeInternalWithNowInSec(cql,
|
executeInternalWithNowInSec(cql,
|
||||||
nowInSec,
|
nowInSec,
|
||||||
|
|
@ -1416,9 +1416,9 @@ public final class SystemKeyspace
|
||||||
// even though that's really just an optimization since SP.beginAndRepairPaxos will exclude accepted proposal older than the mrc.
|
// even though that's really just an optimization since SP.beginAndRepairPaxos will exclude accepted proposal older than the mrc.
|
||||||
if (commit instanceof Commit.CommittedWithTTL)
|
if (commit instanceof Commit.CommittedWithTTL)
|
||||||
{
|
{
|
||||||
int localDeletionTime = ((Commit.CommittedWithTTL) commit).localDeletionTime;
|
long localDeletionTime = ((Commit.CommittedWithTTL) commit).localDeletionTime;
|
||||||
int ttlInSec = legacyPaxosTtlSec(commit.update.metadata());
|
int ttlInSec = legacyPaxosTtlSec(commit.update.metadata());
|
||||||
int nowInSec = localDeletionTime - ttlInSec;
|
long nowInSec = localDeletionTime - ttlInSec;
|
||||||
String cql = "UPDATE system." + PAXOS + " USING TIMESTAMP ? AND TTL ? SET proposal_ballot = null, proposal = null, proposal_version = null, most_recent_commit_at = ?, most_recent_commit = ?, most_recent_commit_version = ? WHERE row_key = ? AND cf_id = ?";
|
String cql = "UPDATE system." + PAXOS + " USING TIMESTAMP ? AND TTL ? SET proposal_ballot = null, proposal = null, proposal_version = null, most_recent_commit_at = ?, most_recent_commit = ?, most_recent_commit_version = ? WHERE row_key = ? AND cf_id = ?";
|
||||||
executeInternalWithNowInSec(cql,
|
executeInternalWithNowInSec(cql,
|
||||||
nowInSec,
|
nowInSec,
|
||||||
|
|
@ -1550,10 +1550,10 @@ public final class SystemKeyspace
|
||||||
public static void updateSizeEstimates(String keyspace, String table, Map<Range<Token>, Pair<Long, Long>> estimates)
|
public static void updateSizeEstimates(String keyspace, String table, Map<Range<Token>, Pair<Long, Long>> estimates)
|
||||||
{
|
{
|
||||||
long timestamp = FBUtilities.timestampMicros();
|
long timestamp = FBUtilities.timestampMicros();
|
||||||
int nowInSec = FBUtilities.nowInSeconds();
|
long nowInSec = FBUtilities.nowInSeconds();
|
||||||
PartitionUpdate.Builder update = new PartitionUpdate.Builder(LegacySizeEstimates, UTF8Type.instance.decompose(keyspace), LegacySizeEstimates.regularAndStaticColumns(), estimates.size());
|
PartitionUpdate.Builder update = new PartitionUpdate.Builder(LegacySizeEstimates, UTF8Type.instance.decompose(keyspace), LegacySizeEstimates.regularAndStaticColumns(), estimates.size());
|
||||||
// delete all previous values with a single range tombstone.
|
// delete all previous values with a single range tombstone.
|
||||||
update.add(new RangeTombstone(Slice.make(LegacySizeEstimates.comparator, table), new DeletionTime(timestamp - 1, nowInSec)));
|
update.add(new RangeTombstone(Slice.make(LegacySizeEstimates.comparator, table), DeletionTime.build(timestamp - 1, nowInSec)));
|
||||||
|
|
||||||
// add a CQL row for each primary token range.
|
// add a CQL row for each primary token range.
|
||||||
for (Map.Entry<Range<Token>, Pair<Long, Long>> entry : estimates.entrySet())
|
for (Map.Entry<Range<Token>, Pair<Long, Long>> entry : estimates.entrySet())
|
||||||
|
|
@ -1575,11 +1575,11 @@ public final class SystemKeyspace
|
||||||
public static void updateTableEstimates(String keyspace, String table, String type, Map<Range<Token>, Pair<Long, Long>> estimates)
|
public static void updateTableEstimates(String keyspace, String table, String type, Map<Range<Token>, Pair<Long, Long>> estimates)
|
||||||
{
|
{
|
||||||
long timestamp = FBUtilities.timestampMicros();
|
long timestamp = FBUtilities.timestampMicros();
|
||||||
int nowInSec = FBUtilities.nowInSeconds();
|
long nowInSec = FBUtilities.nowInSeconds();
|
||||||
PartitionUpdate.Builder update = new PartitionUpdate.Builder(TableEstimates, UTF8Type.instance.decompose(keyspace), TableEstimates.regularAndStaticColumns(), estimates.size());
|
PartitionUpdate.Builder update = new PartitionUpdate.Builder(TableEstimates, UTF8Type.instance.decompose(keyspace), TableEstimates.regularAndStaticColumns(), estimates.size());
|
||||||
|
|
||||||
// delete all previous values with a single range tombstone.
|
// delete all previous values with a single range tombstone.
|
||||||
update.add(new RangeTombstone(Slice.make(TableEstimates.comparator, table, type), new DeletionTime(timestamp - 1, nowInSec)));
|
update.add(new RangeTombstone(Slice.make(TableEstimates.comparator, table, type), DeletionTime.build(timestamp - 1, nowInSec)));
|
||||||
|
|
||||||
// add a CQL row for each primary token range.
|
// add a CQL row for each primary token range.
|
||||||
for (Map.Entry<Range<Token>, Pair<Long, Long>> entry : estimates.entrySet())
|
for (Map.Entry<Range<Token>, Pair<Long, Long>> entry : estimates.entrySet())
|
||||||
|
|
|
||||||
|
|
@ -62,13 +62,14 @@ public class CommitLogDescriptor
|
||||||
// We don't support anything pre-3.0
|
// We don't support anything pre-3.0
|
||||||
public static final int VERSION_30 = 6;
|
public static final int VERSION_30 = 6;
|
||||||
public static final int VERSION_40 = 7;
|
public static final int VERSION_40 = 7;
|
||||||
|
public static final int VERSION_50 = 8;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Increment this number if there is a changes in the commit log disc layout or MessagingVersion changes.
|
* Increment this number if there is a changes in the commit log disc layout or MessagingVersion changes.
|
||||||
* Note: make sure to handle {@link #getMessagingVersion()}
|
* Note: make sure to handle {@link #getMessagingVersion()}
|
||||||
*/
|
*/
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public static final int current_version = VERSION_40;
|
public static final int current_version = DatabaseDescriptor.getStorageCompatibilityMode().isBefore(5) ? VERSION_40 : VERSION_50;
|
||||||
|
|
||||||
final int version;
|
final int version;
|
||||||
public final long id;
|
public final long id;
|
||||||
|
|
@ -222,6 +223,8 @@ public class CommitLogDescriptor
|
||||||
return MessagingService.VERSION_30;
|
return MessagingService.VERSION_30;
|
||||||
case VERSION_40:
|
case VERSION_40:
|
||||||
return MessagingService.VERSION_40;
|
return MessagingService.VERSION_40;
|
||||||
|
case VERSION_50:
|
||||||
|
return MessagingService.VERSION_50;
|
||||||
default:
|
default:
|
||||||
throw new IllegalStateException("Unknown commitlog version " + version);
|
throw new IllegalStateException("Unknown commitlog version " + version);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -178,7 +178,7 @@ public abstract class AbstractCompactionStrategy
|
||||||
*
|
*
|
||||||
* Is responsible for marking its sstables as compaction-pending.
|
* Is responsible for marking its sstables as compaction-pending.
|
||||||
*/
|
*/
|
||||||
public abstract AbstractCompactionTask getNextBackgroundTask(final int gcBefore);
|
public abstract AbstractCompactionTask getNextBackgroundTask(final long gcBefore);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param gcBefore throw away tombstones older than this
|
* @param gcBefore throw away tombstones older than this
|
||||||
|
|
@ -188,7 +188,7 @@ public abstract class AbstractCompactionStrategy
|
||||||
*
|
*
|
||||||
* Is responsible for marking its sstables as compaction-pending.
|
* Is responsible for marking its sstables as compaction-pending.
|
||||||
*/
|
*/
|
||||||
public abstract Collection<AbstractCompactionTask> getMaximalTask(final int gcBefore, boolean splitOutput);
|
public abstract Collection<AbstractCompactionTask> getMaximalTask(final long gcBefore, boolean splitOutput);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param sstables SSTables to compact. Must be marked as compacting.
|
* @param sstables SSTables to compact. Must be marked as compacting.
|
||||||
|
|
@ -199,9 +199,9 @@ public abstract class AbstractCompactionStrategy
|
||||||
*
|
*
|
||||||
* Is responsible for marking its sstables as compaction-pending.
|
* Is responsible for marking its sstables as compaction-pending.
|
||||||
*/
|
*/
|
||||||
public abstract AbstractCompactionTask getUserDefinedTask(Collection<SSTableReader> sstables, final int gcBefore);
|
public abstract AbstractCompactionTask getUserDefinedTask(Collection<SSTableReader> sstables, final long gcBefore);
|
||||||
|
|
||||||
public AbstractCompactionTask getCompactionTask(LifecycleTransaction txn, final int gcBefore, long maxSSTableBytes)
|
public AbstractCompactionTask getCompactionTask(LifecycleTransaction txn, final long gcBefore, long maxSSTableBytes)
|
||||||
{
|
{
|
||||||
return new CompactionTask(cfs, txn, gcBefore);
|
return new CompactionTask(cfs, txn, gcBefore);
|
||||||
}
|
}
|
||||||
|
|
@ -397,7 +397,7 @@ public abstract class AbstractCompactionStrategy
|
||||||
* @param gcBefore time to drop tombstones
|
* @param gcBefore time to drop tombstones
|
||||||
* @return true if given sstable's tombstones are expected to be removed
|
* @return true if given sstable's tombstones are expected to be removed
|
||||||
*/
|
*/
|
||||||
protected boolean worthDroppingTombstones(SSTableReader sstable, int gcBefore)
|
protected boolean worthDroppingTombstones(SSTableReader sstable, long gcBefore)
|
||||||
{
|
{
|
||||||
if (disableTombstoneCompactions || CompactionController.NEVER_PURGE_TOMBSTONES_PROPERTY_VALUE || cfs.getNeverPurgeTombstones())
|
if (disableTombstoneCompactions || CompactionController.NEVER_PURGE_TOMBSTONES_PROPERTY_VALUE || cfs.getNeverPurgeTombstones())
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -169,11 +169,11 @@ public abstract class AbstractStrategyHolder
|
||||||
|
|
||||||
public abstract Iterable<AbstractCompactionStrategy> allStrategies();
|
public abstract Iterable<AbstractCompactionStrategy> allStrategies();
|
||||||
|
|
||||||
public abstract Collection<TaskSupplier> getBackgroundTaskSuppliers(int gcBefore);
|
public abstract Collection<TaskSupplier> getBackgroundTaskSuppliers(long gcBefore);
|
||||||
|
|
||||||
public abstract Collection<AbstractCompactionTask> getMaximalTasks(int gcBefore, boolean splitOutput);
|
public abstract Collection<AbstractCompactionTask> getMaximalTasks(long gcBefore, boolean splitOutput);
|
||||||
|
|
||||||
public abstract Collection<AbstractCompactionTask> getUserDefinedTasks(GroupedSSTableContainer sstables, int gcBefore);
|
public abstract Collection<AbstractCompactionTask> getUserDefinedTasks(GroupedSSTableContainer sstables, long gcBefore);
|
||||||
|
|
||||||
public GroupedSSTableContainer createGroupedSSTableContainer()
|
public GroupedSSTableContainer createGroupedSSTableContainer()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -68,18 +68,18 @@ public class CompactionController extends AbstractCompactionController
|
||||||
private final long minTimestamp;
|
private final long minTimestamp;
|
||||||
final Map<SSTableReader, FileDataInput> openDataFiles = new HashMap<>();
|
final Map<SSTableReader, FileDataInput> openDataFiles = new HashMap<>();
|
||||||
|
|
||||||
protected CompactionController(ColumnFamilyStore cfs, int maxValue)
|
protected CompactionController(ColumnFamilyStore cfs, long maxValue)
|
||||||
{
|
{
|
||||||
this(cfs, null, maxValue);
|
this(cfs, null, maxValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CompactionController(ColumnFamilyStore cfs, Set<SSTableReader> compacting, int gcBefore)
|
public CompactionController(ColumnFamilyStore cfs, Set<SSTableReader> compacting, long gcBefore)
|
||||||
{
|
{
|
||||||
this(cfs, compacting, gcBefore, null,
|
this(cfs, compacting, gcBefore, null,
|
||||||
cfs.getCompactionStrategyManager().getCompactionParams().tombstoneOption());
|
cfs.getCompactionStrategyManager().getCompactionParams().tombstoneOption());
|
||||||
}
|
}
|
||||||
|
|
||||||
public CompactionController(ColumnFamilyStore cfs, Set<SSTableReader> compacting, int gcBefore, RateLimiter limiter, TombstoneOption tombstoneOption)
|
public CompactionController(ColumnFamilyStore cfs, Set<SSTableReader> compacting, long gcBefore, RateLimiter limiter, TombstoneOption tombstoneOption)
|
||||||
{
|
{
|
||||||
super(cfs, gcBefore, tombstoneOption);
|
super(cfs, gcBefore, tombstoneOption);
|
||||||
this.compacting = compacting;
|
this.compacting = compacting;
|
||||||
|
|
@ -157,7 +157,7 @@ public class CompactionController extends AbstractCompactionController
|
||||||
public static Set<SSTableReader> getFullyExpiredSSTables(ColumnFamilyStore cfStore,
|
public static Set<SSTableReader> getFullyExpiredSSTables(ColumnFamilyStore cfStore,
|
||||||
Iterable<SSTableReader> compacting,
|
Iterable<SSTableReader> compacting,
|
||||||
Iterable<SSTableReader> overlapping,
|
Iterable<SSTableReader> overlapping,
|
||||||
int gcBefore,
|
long gcBefore,
|
||||||
boolean ignoreOverlaps)
|
boolean ignoreOverlaps)
|
||||||
{
|
{
|
||||||
logger.trace("Checking droppable sstables in {}", cfStore);
|
logger.trace("Checking droppable sstables in {}", cfStore);
|
||||||
|
|
@ -233,7 +233,7 @@ public class CompactionController extends AbstractCompactionController
|
||||||
public static Set<SSTableReader> getFullyExpiredSSTables(ColumnFamilyStore cfStore,
|
public static Set<SSTableReader> getFullyExpiredSSTables(ColumnFamilyStore cfStore,
|
||||||
Iterable<SSTableReader> compacting,
|
Iterable<SSTableReader> compacting,
|
||||||
Iterable<SSTableReader> overlapping,
|
Iterable<SSTableReader> overlapping,
|
||||||
int gcBefore)
|
long gcBefore)
|
||||||
{
|
{
|
||||||
return getFullyExpiredSSTables(cfStore, compacting, overlapping, gcBefore, false);
|
return getFullyExpiredSSTables(cfStore, compacting, overlapping, gcBefore, false);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ public class CompactionIterator extends CompactionInfo.Holder implements Unfilte
|
||||||
private final AbstractCompactionController controller;
|
private final AbstractCompactionController controller;
|
||||||
private final List<ISSTableScanner> scanners;
|
private final List<ISSTableScanner> scanners;
|
||||||
private final ImmutableSet<SSTableReader> sstables;
|
private final ImmutableSet<SSTableReader> sstables;
|
||||||
private final int nowInSec;
|
private final long nowInSec;
|
||||||
private final TimeUUID compactionId;
|
private final TimeUUID compactionId;
|
||||||
private final long totalBytes;
|
private final long totalBytes;
|
||||||
private long bytesRead;
|
private long bytesRead;
|
||||||
|
|
@ -113,7 +113,7 @@ public class CompactionIterator extends CompactionInfo.Holder implements Unfilte
|
||||||
private final UnfilteredPartitionIterator compacted;
|
private final UnfilteredPartitionIterator compacted;
|
||||||
private final ActiveCompactionsTracker activeCompactions;
|
private final ActiveCompactionsTracker activeCompactions;
|
||||||
|
|
||||||
public CompactionIterator(OperationType type, List<ISSTableScanner> scanners, AbstractCompactionController controller, int nowInSec, TimeUUID compactionId)
|
public CompactionIterator(OperationType type, List<ISSTableScanner> scanners, AbstractCompactionController controller, long nowInSec, TimeUUID compactionId)
|
||||||
{
|
{
|
||||||
this(type, scanners, controller, nowInSec, compactionId, ActiveCompactionsTracker.NOOP, null);
|
this(type, scanners, controller, nowInSec, compactionId, ActiveCompactionsTracker.NOOP, null);
|
||||||
}
|
}
|
||||||
|
|
@ -122,7 +122,7 @@ public class CompactionIterator extends CompactionInfo.Holder implements Unfilte
|
||||||
public CompactionIterator(OperationType type,
|
public CompactionIterator(OperationType type,
|
||||||
List<ISSTableScanner> scanners,
|
List<ISSTableScanner> scanners,
|
||||||
AbstractCompactionController controller,
|
AbstractCompactionController controller,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
TimeUUID compactionId,
|
TimeUUID compactionId,
|
||||||
ActiveCompactionsTracker activeCompactions,
|
ActiveCompactionsTracker activeCompactions,
|
||||||
TopPartitionTracker.Collector topPartitionCollector)
|
TopPartitionTracker.Collector topPartitionCollector)
|
||||||
|
|
@ -340,9 +340,9 @@ public class CompactionIterator extends CompactionInfo.Holder implements Unfilte
|
||||||
|
|
||||||
private long compactedUnfiltered;
|
private long compactedUnfiltered;
|
||||||
|
|
||||||
private Purger(AbstractCompactionController controller, int nowInSec)
|
private Purger(AbstractCompactionController controller, long nowInSec)
|
||||||
{
|
{
|
||||||
super(nowInSec, controller.gcBefore, controller.compactingRepaired() ? Integer.MAX_VALUE : Integer.MIN_VALUE,
|
super(nowInSec, controller.gcBefore, controller.compactingRepaired() ? Long.MAX_VALUE : Integer.MIN_VALUE,
|
||||||
controller.cfs.getCompactionStrategyManager().onlyPurgeRepairedTombstones(),
|
controller.cfs.getCompactionStrategyManager().onlyPurgeRepairedTombstones(),
|
||||||
controller.cfs.metadata.get().enforceStrictLiveness());
|
controller.cfs.metadata.get().enforceStrictLiveness());
|
||||||
this.controller = controller;
|
this.controller = controller;
|
||||||
|
|
|
||||||
|
|
@ -959,13 +959,13 @@ public class CompactionManager implements CompactionManagerMBean
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("resource") // the tasks are executed in parallel on the executor, making sure that they get closed
|
@SuppressWarnings("resource") // the tasks are executed in parallel on the executor, making sure that they get closed
|
||||||
public List<Future<?>> submitMaximal(final ColumnFamilyStore cfStore, final int gcBefore, boolean splitOutput)
|
public List<Future<?>> submitMaximal(final ColumnFamilyStore cfStore, final long gcBefore, boolean splitOutput)
|
||||||
{
|
{
|
||||||
return submitMaximal(cfStore, gcBefore, splitOutput, OperationType.MAJOR_COMPACTION);
|
return submitMaximal(cfStore, gcBefore, splitOutput, OperationType.MAJOR_COMPACTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("resource")
|
@SuppressWarnings("resource")
|
||||||
public List<Future<?>> submitMaximal(final ColumnFamilyStore cfStore, final int gcBefore, boolean splitOutput, OperationType operationType)
|
public List<Future<?>> submitMaximal(final ColumnFamilyStore cfStore, final long gcBefore, boolean splitOutput, OperationType operationType)
|
||||||
{
|
{
|
||||||
// here we compute the task off the compaction executor, so having that present doesn't
|
// here we compute the task off the compaction executor, so having that present doesn't
|
||||||
// confuse runWithCompactionsDisabled -- i.e., we don't want to deadlock ourselves, waiting
|
// confuse runWithCompactionsDisabled -- i.e., we don't want to deadlock ourselves, waiting
|
||||||
|
|
@ -1144,7 +1144,7 @@ public class CompactionManager implements CompactionManagerMBean
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Future<?>> futures = new ArrayList<>(descriptors.size());
|
List<Future<?>> futures = new ArrayList<>(descriptors.size());
|
||||||
int nowInSec = FBUtilities.nowInSeconds();
|
long nowInSec = FBUtilities.nowInSeconds();
|
||||||
for (ColumnFamilyStore cfs : descriptors.keySet())
|
for (ColumnFamilyStore cfs : descriptors.keySet())
|
||||||
futures.add(submitUserDefined(cfs, descriptors.get(cfs), getDefaultGcBefore(cfs, nowInSec)));
|
futures.add(submitUserDefined(cfs, descriptors.get(cfs), getDefaultGcBefore(cfs, nowInSec)));
|
||||||
FBUtilities.waitOnFutures(futures);
|
FBUtilities.waitOnFutures(futures);
|
||||||
|
|
@ -1207,7 +1207,7 @@ public class CompactionManager implements CompactionManagerMBean
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Future<?> submitUserDefined(final ColumnFamilyStore cfs, final Collection<Descriptor> dataFiles, final int gcBefore)
|
public Future<?> submitUserDefined(final ColumnFamilyStore cfs, final Collection<Descriptor> dataFiles, final long gcBefore)
|
||||||
{
|
{
|
||||||
Runnable runnable = new WrappedRunnable()
|
Runnable runnable = new WrappedRunnable()
|
||||||
{
|
{
|
||||||
|
|
@ -1414,7 +1414,7 @@ public class CompactionManager implements CompactionManagerMBean
|
||||||
|
|
||||||
List<SSTableReader> finished;
|
List<SSTableReader> finished;
|
||||||
|
|
||||||
int nowInSec = FBUtilities.nowInSeconds();
|
long nowInSec = FBUtilities.nowInSeconds();
|
||||||
try (SSTableRewriter writer = SSTableRewriter.construct(cfs, txn, false, sstable.maxDataAge);
|
try (SSTableRewriter writer = SSTableRewriter.construct(cfs, txn, false, sstable.maxDataAge);
|
||||||
ISSTableScanner scanner = cleanupStrategy.getScanner(sstable);
|
ISSTableScanner scanner = cleanupStrategy.getScanner(sstable);
|
||||||
CompactionController controller = new CompactionController(cfs, txn.originals(), getDefaultGcBefore(cfs, nowInSec));
|
CompactionController controller = new CompactionController(cfs, txn.originals(), getDefaultGcBefore(cfs, nowInSec));
|
||||||
|
|
@ -1483,15 +1483,15 @@ public class CompactionManager implements CompactionManagerMBean
|
||||||
private static abstract class CleanupStrategy
|
private static abstract class CleanupStrategy
|
||||||
{
|
{
|
||||||
protected final Collection<Range<Token>> ranges;
|
protected final Collection<Range<Token>> ranges;
|
||||||
protected final int nowInSec;
|
protected final long nowInSec;
|
||||||
|
|
||||||
protected CleanupStrategy(Collection<Range<Token>> ranges, int nowInSec)
|
protected CleanupStrategy(Collection<Range<Token>> ranges, long nowInSec)
|
||||||
{
|
{
|
||||||
this.ranges = ranges;
|
this.ranges = ranges;
|
||||||
this.nowInSec = nowInSec;
|
this.nowInSec = nowInSec;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CleanupStrategy get(ColumnFamilyStore cfs, Collection<Range<Token>> ranges, Collection<Range<Token>> transientRanges, boolean isRepaired, int nowInSec)
|
public static CleanupStrategy get(ColumnFamilyStore cfs, Collection<Range<Token>> ranges, Collection<Range<Token>> transientRanges, boolean isRepaired, long nowInSec)
|
||||||
{
|
{
|
||||||
if (cfs.indexManager.hasIndexes())
|
if (cfs.indexManager.hasIndexes())
|
||||||
{
|
{
|
||||||
|
|
@ -1513,7 +1513,7 @@ public class CompactionManager implements CompactionManagerMBean
|
||||||
private final Collection<Range<Token>> transientRanges;
|
private final Collection<Range<Token>> transientRanges;
|
||||||
private final boolean isRepaired;
|
private final boolean isRepaired;
|
||||||
|
|
||||||
public Bounded(final ColumnFamilyStore cfs, Collection<Range<Token>> ranges, Collection<Range<Token>> transientRanges, boolean isRepaired, int nowInSec)
|
public Bounded(final ColumnFamilyStore cfs, Collection<Range<Token>> ranges, Collection<Range<Token>> transientRanges, boolean isRepaired, long nowInSec)
|
||||||
{
|
{
|
||||||
super(ranges, nowInSec);
|
super(ranges, nowInSec);
|
||||||
instance.cacheCleanupExecutor.submit(new Runnable()
|
instance.cacheCleanupExecutor.submit(new Runnable()
|
||||||
|
|
@ -1554,7 +1554,7 @@ public class CompactionManager implements CompactionManagerMBean
|
||||||
{
|
{
|
||||||
private final ColumnFamilyStore cfs;
|
private final ColumnFamilyStore cfs;
|
||||||
|
|
||||||
public Full(ColumnFamilyStore cfs, Collection<Range<Token>> ranges, int nowInSec)
|
public Full(ColumnFamilyStore cfs, Collection<Range<Token>> ranges, long nowInSec)
|
||||||
{
|
{
|
||||||
super(ranges, nowInSec);
|
super(ranges, nowInSec);
|
||||||
this.cfs = cfs;
|
this.cfs = cfs;
|
||||||
|
|
@ -1717,7 +1717,7 @@ public class CompactionManager implements CompactionManagerMBean
|
||||||
Set<SSTableReader> sstableAsSet = txn.originals();
|
Set<SSTableReader> sstableAsSet = txn.originals();
|
||||||
|
|
||||||
File destination = cfs.getDirectories().getWriteableLocationAsFile(cfs.getExpectedCompactedFileSize(sstableAsSet, OperationType.ANTICOMPACTION));
|
File destination = cfs.getDirectories().getWriteableLocationAsFile(cfs.getExpectedCompactedFileSize(sstableAsSet, OperationType.ANTICOMPACTION));
|
||||||
int nowInSec = FBUtilities.nowInSeconds();
|
long nowInSec = FBUtilities.nowInSeconds();
|
||||||
RateLimiter limiter = getRateLimiter();
|
RateLimiter limiter = getRateLimiter();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -1855,7 +1855,7 @@ public class CompactionManager implements CompactionManagerMBean
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public static CompactionIterator getAntiCompactionIterator(List<ISSTableScanner> scanners, CompactionController controller, int nowInSec, TimeUUID timeUUID, ActiveCompactionsTracker activeCompactions, BooleanSupplier isCancelled)
|
public static CompactionIterator getAntiCompactionIterator(List<ISSTableScanner> scanners, CompactionController controller, long nowInSec, TimeUUID timeUUID, ActiveCompactionsTracker activeCompactions, BooleanSupplier isCancelled)
|
||||||
{
|
{
|
||||||
return new CompactionIterator(OperationType.ANTICOMPACTION, scanners, controller, nowInSec, timeUUID, activeCompactions, null)
|
return new CompactionIterator(OperationType.ANTICOMPACTION, scanners, controller, nowInSec, timeUUID, activeCompactions, null)
|
||||||
{
|
{
|
||||||
|
|
@ -1947,7 +1947,7 @@ public class CompactionManager implements CompactionManagerMBean
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getDefaultGcBefore(ColumnFamilyStore cfs, int nowInSec)
|
public static long getDefaultGcBefore(ColumnFamilyStore cfs, long nowInSec)
|
||||||
{
|
{
|
||||||
// 2ndary indexes have ExpiringColumns too, so we need to purge tombstones deleted before now. We do not need to
|
// 2ndary indexes have ExpiringColumns too, so we need to purge tombstones deleted before now. We do not need to
|
||||||
// add any GcGrace however since 2ndary indexes are local to a node.
|
// add any GcGrace however since 2ndary indexes are local to a node.
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,7 @@ public class CompactionStrategyHolder extends AbstractStrategyHolder
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<TaskSupplier> getBackgroundTaskSuppliers(int gcBefore)
|
public Collection<TaskSupplier> getBackgroundTaskSuppliers(long gcBefore)
|
||||||
{
|
{
|
||||||
List<TaskSupplier> suppliers = new ArrayList<>(strategies.size());
|
List<TaskSupplier> suppliers = new ArrayList<>(strategies.size());
|
||||||
for (AbstractCompactionStrategy strategy : strategies)
|
for (AbstractCompactionStrategy strategy : strategies)
|
||||||
|
|
@ -111,7 +111,7 @@ public class CompactionStrategyHolder extends AbstractStrategyHolder
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<AbstractCompactionTask> getMaximalTasks(int gcBefore, boolean splitOutput)
|
public Collection<AbstractCompactionTask> getMaximalTasks(long gcBefore, boolean splitOutput)
|
||||||
{
|
{
|
||||||
List<AbstractCompactionTask> tasks = new ArrayList<>(strategies.size());
|
List<AbstractCompactionTask> tasks = new ArrayList<>(strategies.size());
|
||||||
for (AbstractCompactionStrategy strategy : strategies)
|
for (AbstractCompactionStrategy strategy : strategies)
|
||||||
|
|
@ -124,7 +124,7 @@ public class CompactionStrategyHolder extends AbstractStrategyHolder
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<AbstractCompactionTask> getUserDefinedTasks(GroupedSSTableContainer sstables, int gcBefore)
|
public Collection<AbstractCompactionTask> getUserDefinedTasks(GroupedSSTableContainer sstables, long gcBefore)
|
||||||
{
|
{
|
||||||
List<AbstractCompactionTask> tasks = new ArrayList<>(strategies.size());
|
List<AbstractCompactionTask> tasks = new ArrayList<>(strategies.size());
|
||||||
for (int i = 0; i < strategies.size(); i++)
|
for (int i = 0; i < strategies.size(); i++)
|
||||||
|
|
|
||||||
|
|
@ -193,7 +193,7 @@ public class CompactionStrategyManager implements INotificationConsumer
|
||||||
*
|
*
|
||||||
* Returns a task for the compaction strategy that needs it the most (most estimated remaining tasks)
|
* Returns a task for the compaction strategy that needs it the most (most estimated remaining tasks)
|
||||||
*/
|
*/
|
||||||
public AbstractCompactionTask getNextBackgroundTask(int gcBefore)
|
public AbstractCompactionTask getNextBackgroundTask(long gcBefore)
|
||||||
{
|
{
|
||||||
maybeReloadDiskBoundaries();
|
maybeReloadDiskBoundaries();
|
||||||
readLock.lock();
|
readLock.lock();
|
||||||
|
|
@ -1017,7 +1017,7 @@ public class CompactionStrategyManager implements INotificationConsumer
|
||||||
return maxSSTableSizeBytes;
|
return maxSSTableSizeBytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbstractCompactionTask getCompactionTask(LifecycleTransaction txn, int gcBefore, long maxSSTableBytes)
|
public AbstractCompactionTask getCompactionTask(LifecycleTransaction txn, long gcBefore, long maxSSTableBytes)
|
||||||
{
|
{
|
||||||
maybeReloadDiskBoundaries();
|
maybeReloadDiskBoundaries();
|
||||||
readLock.lock();
|
readLock.lock();
|
||||||
|
|
@ -1060,7 +1060,7 @@ public class CompactionStrategyManager implements INotificationConsumer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CompactionTasks getMaximalTasks(final int gcBefore, final boolean splitOutput, OperationType operationType)
|
public CompactionTasks getMaximalTasks(final long gcBefore, final boolean splitOutput, OperationType operationType)
|
||||||
{
|
{
|
||||||
maybeReloadDiskBoundaries();
|
maybeReloadDiskBoundaries();
|
||||||
// runWithCompactionsDisabled cancels active compactions and disables them, then we are able
|
// runWithCompactionsDisabled cancels active compactions and disables them, then we are able
|
||||||
|
|
@ -1096,7 +1096,7 @@ public class CompactionStrategyManager implements INotificationConsumer
|
||||||
* @param gcBefore gc grace period, throw away tombstones older than this
|
* @param gcBefore gc grace period, throw away tombstones older than this
|
||||||
* @return a list of compaction tasks corresponding to the sstables requested
|
* @return a list of compaction tasks corresponding to the sstables requested
|
||||||
*/
|
*/
|
||||||
public CompactionTasks getUserDefinedTasks(Collection<SSTableReader> sstables, int gcBefore)
|
public CompactionTasks getUserDefinedTasks(Collection<SSTableReader> sstables, long gcBefore)
|
||||||
{
|
{
|
||||||
maybeReloadDiskBoundaries();
|
maybeReloadDiskBoundaries();
|
||||||
List<AbstractCompactionTask> ret = new ArrayList<>();
|
List<AbstractCompactionTask> ret = new ArrayList<>();
|
||||||
|
|
|
||||||
|
|
@ -58,17 +58,17 @@ import static org.apache.cassandra.utils.FBUtilities.now;
|
||||||
public class CompactionTask extends AbstractCompactionTask
|
public class CompactionTask extends AbstractCompactionTask
|
||||||
{
|
{
|
||||||
protected static final Logger logger = LoggerFactory.getLogger(CompactionTask.class);
|
protected static final Logger logger = LoggerFactory.getLogger(CompactionTask.class);
|
||||||
protected final int gcBefore;
|
protected final long gcBefore;
|
||||||
protected final boolean keepOriginals;
|
protected final boolean keepOriginals;
|
||||||
protected static long totalBytesCompacted = 0;
|
protected static long totalBytesCompacted = 0;
|
||||||
private ActiveCompactionsTracker activeCompactions;
|
private ActiveCompactionsTracker activeCompactions;
|
||||||
|
|
||||||
public CompactionTask(ColumnFamilyStore cfs, LifecycleTransaction txn, int gcBefore)
|
public CompactionTask(ColumnFamilyStore cfs, LifecycleTransaction txn, long gcBefore)
|
||||||
{
|
{
|
||||||
this(cfs, txn, gcBefore, false);
|
this(cfs, txn, gcBefore, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CompactionTask(ColumnFamilyStore cfs, LifecycleTransaction txn, int gcBefore, boolean keepOriginals)
|
public CompactionTask(ColumnFamilyStore cfs, LifecycleTransaction txn, long gcBefore, boolean keepOriginals)
|
||||||
{
|
{
|
||||||
super(cfs, txn);
|
super(cfs, txn);
|
||||||
this.gcBefore = gcBefore;
|
this.gcBefore = gcBefore;
|
||||||
|
|
@ -180,7 +180,7 @@ public class CompactionTask extends AbstractCompactionTask
|
||||||
long[] mergedRowCounts;
|
long[] mergedRowCounts;
|
||||||
long totalSourceCQLRows;
|
long totalSourceCQLRows;
|
||||||
|
|
||||||
int nowInSec = FBUtilities.nowInSeconds();
|
long nowInSec = FBUtilities.nowInSeconds();
|
||||||
try (Refs<SSTableReader> refs = Refs.ref(actuallyCompact);
|
try (Refs<SSTableReader> refs = Refs.ref(actuallyCompact);
|
||||||
AbstractCompactionStrategy.ScannerList scanners = strategy.getScanners(actuallyCompact);
|
AbstractCompactionStrategy.ScannerList scanners = strategy.getScanners(actuallyCompact);
|
||||||
CompactionIterator ci = new CompactionIterator(compactionType, scanners.scanners, controller, nowInSec, taskId))
|
CompactionIterator ci = new CompactionIterator(compactionType, scanners.scanners, controller, nowInSec, taskId))
|
||||||
|
|
|
||||||
|
|
@ -127,7 +127,7 @@ public class LeveledCompactionStrategy extends AbstractCompactionStrategy
|
||||||
* (by explicit user request) even when compaction is disabled.
|
* (by explicit user request) even when compaction is disabled.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("resource") // transaction is closed by AbstractCompactionTask::execute
|
@SuppressWarnings("resource") // transaction is closed by AbstractCompactionTask::execute
|
||||||
public AbstractCompactionTask getNextBackgroundTask(int gcBefore)
|
public AbstractCompactionTask getNextBackgroundTask(long gcBefore)
|
||||||
{
|
{
|
||||||
Collection<SSTableReader> previousCandidate = null;
|
Collection<SSTableReader> previousCandidate = null;
|
||||||
while (true)
|
while (true)
|
||||||
|
|
@ -180,7 +180,7 @@ public class LeveledCompactionStrategy extends AbstractCompactionStrategy
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("resource") // transaction is closed by AbstractCompactionTask::execute
|
@SuppressWarnings("resource") // transaction is closed by AbstractCompactionTask::execute
|
||||||
public synchronized Collection<AbstractCompactionTask> getMaximalTask(int gcBefore, boolean splitOutput)
|
public synchronized Collection<AbstractCompactionTask> getMaximalTask(long gcBefore, boolean splitOutput)
|
||||||
{
|
{
|
||||||
Iterable<SSTableReader> sstables = manifest.getSSTables();
|
Iterable<SSTableReader> sstables = manifest.getSSTables();
|
||||||
|
|
||||||
|
|
@ -196,7 +196,7 @@ public class LeveledCompactionStrategy extends AbstractCompactionStrategy
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("resource") // transaction is closed by AbstractCompactionTask::execute
|
@SuppressWarnings("resource") // transaction is closed by AbstractCompactionTask::execute
|
||||||
public AbstractCompactionTask getUserDefinedTask(Collection<SSTableReader> sstables, int gcBefore)
|
public AbstractCompactionTask getUserDefinedTask(Collection<SSTableReader> sstables, long gcBefore)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (sstables.isEmpty())
|
if (sstables.isEmpty())
|
||||||
|
|
@ -213,7 +213,7 @@ public class LeveledCompactionStrategy extends AbstractCompactionStrategy
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AbstractCompactionTask getCompactionTask(LifecycleTransaction txn, int gcBefore, long maxSSTableBytes)
|
public AbstractCompactionTask getCompactionTask(LifecycleTransaction txn, long gcBefore, long maxSSTableBytes)
|
||||||
{
|
{
|
||||||
assert txn.originals().size() > 0;
|
assert txn.originals().size() > 0;
|
||||||
int level = -1;
|
int level = -1;
|
||||||
|
|
@ -522,7 +522,7 @@ public class LeveledCompactionStrategy extends AbstractCompactionStrategy
|
||||||
return String.format("LCS@%d(%s)", hashCode(), cfs.name);
|
return String.format("LCS@%d(%s)", hashCode(), cfs.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
private SSTableReader findDroppableSSTable(final int gcBefore)
|
private SSTableReader findDroppableSSTable(final long gcBefore)
|
||||||
{
|
{
|
||||||
level:
|
level:
|
||||||
for (int i = manifest.getLevelCount(); i >= 0; i--)
|
for (int i = manifest.getLevelCount(); i >= 0; i--)
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ public class LeveledCompactionTask extends CompactionTask
|
||||||
private final long maxSSTableBytes;
|
private final long maxSSTableBytes;
|
||||||
private final boolean majorCompaction;
|
private final boolean majorCompaction;
|
||||||
|
|
||||||
public LeveledCompactionTask(ColumnFamilyStore cfs, LifecycleTransaction txn, int level, int gcBefore, long maxSSTableBytes, boolean majorCompaction)
|
public LeveledCompactionTask(ColumnFamilyStore cfs, LifecycleTransaction txn, int level, long gcBefore, long maxSSTableBytes, boolean majorCompaction)
|
||||||
{
|
{
|
||||||
super(cfs, txn, gcBefore);
|
super(cfs, txn, gcBefore);
|
||||||
this.level = level;
|
this.level = level;
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@ public class PendingRepairHolder extends AbstractStrategyHolder
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<TaskSupplier> getBackgroundTaskSuppliers(int gcBefore)
|
public Collection<TaskSupplier> getBackgroundTaskSuppliers(long gcBefore)
|
||||||
{
|
{
|
||||||
List<TaskSupplier> suppliers = new ArrayList<>(managers.size());
|
List<TaskSupplier> suppliers = new ArrayList<>(managers.size());
|
||||||
for (PendingRepairManager manager : managers)
|
for (PendingRepairManager manager : managers)
|
||||||
|
|
@ -121,7 +121,7 @@ public class PendingRepairHolder extends AbstractStrategyHolder
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<AbstractCompactionTask> getMaximalTasks(int gcBefore, boolean splitOutput)
|
public Collection<AbstractCompactionTask> getMaximalTasks(long gcBefore, boolean splitOutput)
|
||||||
{
|
{
|
||||||
List<AbstractCompactionTask> tasks = new ArrayList<>(managers.size());
|
List<AbstractCompactionTask> tasks = new ArrayList<>(managers.size());
|
||||||
for (PendingRepairManager manager : managers)
|
for (PendingRepairManager manager : managers)
|
||||||
|
|
@ -134,7 +134,7 @@ public class PendingRepairHolder extends AbstractStrategyHolder
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<AbstractCompactionTask> getUserDefinedTasks(GroupedSSTableContainer sstables, int gcBefore)
|
public Collection<AbstractCompactionTask> getUserDefinedTasks(GroupedSSTableContainer sstables, long gcBefore)
|
||||||
{
|
{
|
||||||
List<AbstractCompactionTask> tasks = new ArrayList<>(managers.size());
|
List<AbstractCompactionTask> tasks = new ArrayList<>(managers.size());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -365,7 +365,7 @@ class PendingRepairManager
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized AbstractCompactionTask getNextBackgroundTask(int gcBefore)
|
synchronized AbstractCompactionTask getNextBackgroundTask(long gcBefore)
|
||||||
{
|
{
|
||||||
if (strategies.isEmpty())
|
if (strategies.isEmpty())
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -392,7 +392,7 @@ class PendingRepairManager
|
||||||
return get(sessionID).getNextBackgroundTask(gcBefore);
|
return get(sessionID).getNextBackgroundTask(gcBefore);
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized Collection<AbstractCompactionTask> getMaximalTasks(int gcBefore, boolean splitOutput)
|
synchronized Collection<AbstractCompactionTask> getMaximalTasks(long gcBefore, boolean splitOutput)
|
||||||
{
|
{
|
||||||
if (strategies.isEmpty())
|
if (strategies.isEmpty())
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -479,7 +479,7 @@ class PendingRepairManager
|
||||||
return strategy != null && strategy.getSSTables().contains(sstable);
|
return strategy != null && strategy.getSSTables().contains(sstable);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<AbstractCompactionTask> createUserDefinedTasks(Collection<SSTableReader> sstables, int gcBefore)
|
public Collection<AbstractCompactionTask> createUserDefinedTasks(Collection<SSTableReader> sstables, long gcBefore)
|
||||||
{
|
{
|
||||||
Map<TimeUUID, List<SSTableReader>> group = sstables.stream().collect(Collectors.groupingBy(s -> s.getSSTableMetadata().pendingRepair));
|
Map<TimeUUID, List<SSTableReader>> group = sstables.stream().collect(Collectors.groupingBy(s -> s.getSSTableMetadata().pendingRepair));
|
||||||
return group.entrySet().stream().map(g -> strategies.get(g.getKey()).getUserDefinedTask(g.getValue(), gcBefore)).collect(Collectors.toList());
|
return group.entrySet().stream().map(g -> strategies.get(g.getKey()).getUserDefinedTask(g.getValue(), gcBefore)).collect(Collectors.toList());
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ public class SizeTieredCompactionStrategy extends AbstractCompactionStrategy
|
||||||
this.sizeTieredOptions = new SizeTieredCompactionStrategyOptions(options);
|
this.sizeTieredOptions = new SizeTieredCompactionStrategyOptions(options);
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized List<SSTableReader> getNextBackgroundSSTables(final int gcBefore)
|
private synchronized List<SSTableReader> getNextBackgroundSSTables(final long gcBefore)
|
||||||
{
|
{
|
||||||
// make local copies so they can't be changed out from under us mid-method
|
// make local copies so they can't be changed out from under us mid-method
|
||||||
int minThreshold = cfs.getMinimumCompactionThreshold();
|
int minThreshold = cfs.getMinimumCompactionThreshold();
|
||||||
|
|
@ -176,7 +176,7 @@ public class SizeTieredCompactionStrategy extends AbstractCompactionStrategy
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("resource")
|
@SuppressWarnings("resource")
|
||||||
public AbstractCompactionTask getNextBackgroundTask(int gcBefore)
|
public AbstractCompactionTask getNextBackgroundTask(long gcBefore)
|
||||||
{
|
{
|
||||||
List<SSTableReader> previousCandidate = null;
|
List<SSTableReader> previousCandidate = null;
|
||||||
while (true)
|
while (true)
|
||||||
|
|
@ -204,7 +204,7 @@ public class SizeTieredCompactionStrategy extends AbstractCompactionStrategy
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("resource")
|
@SuppressWarnings("resource")
|
||||||
public synchronized Collection<AbstractCompactionTask> getMaximalTask(final int gcBefore, boolean splitOutput)
|
public synchronized Collection<AbstractCompactionTask> getMaximalTask(final long gcBefore, boolean splitOutput)
|
||||||
{
|
{
|
||||||
Iterable<SSTableReader> filteredSSTables = filterSuspectSSTables(sstables);
|
Iterable<SSTableReader> filteredSSTables = filterSuspectSSTables(sstables);
|
||||||
if (Iterables.isEmpty(filteredSSTables))
|
if (Iterables.isEmpty(filteredSSTables))
|
||||||
|
|
@ -218,7 +218,7 @@ public class SizeTieredCompactionStrategy extends AbstractCompactionStrategy
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("resource")
|
@SuppressWarnings("resource")
|
||||||
public AbstractCompactionTask getUserDefinedTask(Collection<SSTableReader> sstables, final int gcBefore)
|
public AbstractCompactionTask getUserDefinedTask(Collection<SSTableReader> sstables, final long gcBefore)
|
||||||
{
|
{
|
||||||
assert !sstables.isEmpty(); // checked for by CM.submitUserDefined
|
assert !sstables.isEmpty(); // checked for by CM.submitUserDefined
|
||||||
|
|
||||||
|
|
@ -350,7 +350,7 @@ public class SizeTieredCompactionStrategy extends AbstractCompactionStrategy
|
||||||
|
|
||||||
private static class SplittingCompactionTask extends CompactionTask
|
private static class SplittingCompactionTask extends CompactionTask
|
||||||
{
|
{
|
||||||
public SplittingCompactionTask(ColumnFamilyStore cfs, LifecycleTransaction txn, int gcBefore)
|
public SplittingCompactionTask(ColumnFamilyStore cfs, LifecycleTransaction txn, long gcBefore)
|
||||||
{
|
{
|
||||||
super(cfs, txn, gcBefore);
|
super(cfs, txn, gcBefore);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ public class TimeWindowCompactionController extends CompactionController
|
||||||
|
|
||||||
private final boolean ignoreOverlaps;
|
private final boolean ignoreOverlaps;
|
||||||
|
|
||||||
public TimeWindowCompactionController(ColumnFamilyStore cfs, Set<SSTableReader> compacting, int gcBefore, boolean ignoreOverlaps)
|
public TimeWindowCompactionController(ColumnFamilyStore cfs, Set<SSTableReader> compacting, long gcBefore, boolean ignoreOverlaps)
|
||||||
{
|
{
|
||||||
super(cfs, compacting, gcBefore);
|
super(cfs, compacting, gcBefore);
|
||||||
this.ignoreOverlaps = ignoreOverlaps;
|
this.ignoreOverlaps = ignoreOverlaps;
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ public class TimeWindowCompactionStrategy extends AbstractCompactionStrategy
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("resource") // transaction is closed by AbstractCompactionTask::execute
|
@SuppressWarnings("resource") // transaction is closed by AbstractCompactionTask::execute
|
||||||
public AbstractCompactionTask getNextBackgroundTask(int gcBefore)
|
public AbstractCompactionTask getNextBackgroundTask(long gcBefore)
|
||||||
{
|
{
|
||||||
List<SSTableReader> previousCandidate = null;
|
List<SSTableReader> previousCandidate = null;
|
||||||
while (true)
|
while (true)
|
||||||
|
|
@ -113,7 +113,7 @@ public class TimeWindowCompactionStrategy extends AbstractCompactionStrategy
|
||||||
* @param gcBefore
|
* @param gcBefore
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private synchronized List<SSTableReader> getNextBackgroundSSTables(final int gcBefore)
|
private synchronized List<SSTableReader> getNextBackgroundSSTables(final long gcBefore)
|
||||||
{
|
{
|
||||||
if (Iterables.isEmpty(cfs.getSSTables(SSTableSet.LIVE)))
|
if (Iterables.isEmpty(cfs.getSSTables(SSTableSet.LIVE)))
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
|
|
@ -147,7 +147,7 @@ public class TimeWindowCompactionStrategy extends AbstractCompactionStrategy
|
||||||
return compactionCandidates;
|
return compactionCandidates;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<SSTableReader> getNextNonExpiredSSTables(Iterable<SSTableReader> nonExpiringSSTables, final int gcBefore)
|
private List<SSTableReader> getNextNonExpiredSSTables(Iterable<SSTableReader> nonExpiringSSTables, final long gcBefore)
|
||||||
{
|
{
|
||||||
List<SSTableReader> mostInteresting = getCompactionCandidates(nonExpiringSSTables);
|
List<SSTableReader> mostInteresting = getCompactionCandidates(nonExpiringSSTables);
|
||||||
|
|
||||||
|
|
@ -381,7 +381,7 @@ public class TimeWindowCompactionStrategy extends AbstractCompactionStrategy
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("resource") // transaction is closed by AbstractCompactionTask::execute
|
@SuppressWarnings("resource") // transaction is closed by AbstractCompactionTask::execute
|
||||||
public synchronized Collection<AbstractCompactionTask> getMaximalTask(int gcBefore, boolean splitOutput)
|
public synchronized Collection<AbstractCompactionTask> getMaximalTask(long gcBefore, boolean splitOutput)
|
||||||
{
|
{
|
||||||
Iterable<SSTableReader> filteredSSTables = filterSuspectSSTables(sstables);
|
Iterable<SSTableReader> filteredSSTables = filterSuspectSSTables(sstables);
|
||||||
if (Iterables.isEmpty(filteredSSTables))
|
if (Iterables.isEmpty(filteredSSTables))
|
||||||
|
|
@ -408,7 +408,7 @@ public class TimeWindowCompactionStrategy extends AbstractCompactionStrategy
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("resource") // transaction is closed by AbstractCompactionTask::execute
|
@SuppressWarnings("resource") // transaction is closed by AbstractCompactionTask::execute
|
||||||
public synchronized AbstractCompactionTask getUserDefinedTask(Collection<SSTableReader> sstables, int gcBefore)
|
public synchronized AbstractCompactionTask getUserDefinedTask(Collection<SSTableReader> sstables, long gcBefore)
|
||||||
{
|
{
|
||||||
assert !sstables.isEmpty(); // checked for by CM.submitUserDefined
|
assert !sstables.isEmpty(); // checked for by CM.submitUserDefined
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ public class TimeWindowCompactionTask extends CompactionTask
|
||||||
{
|
{
|
||||||
private final boolean ignoreOverlaps;
|
private final boolean ignoreOverlaps;
|
||||||
|
|
||||||
public TimeWindowCompactionTask(ColumnFamilyStore cfs, LifecycleTransaction txn, int gcBefore, boolean ignoreOverlaps)
|
public TimeWindowCompactionTask(ColumnFamilyStore cfs, LifecycleTransaction txn, long gcBefore, boolean ignoreOverlaps)
|
||||||
{
|
{
|
||||||
super(cfs, txn, gcBefore);
|
super(cfs, txn, gcBefore);
|
||||||
this.ignoreOverlaps = ignoreOverlaps;
|
this.ignoreOverlaps = ignoreOverlaps;
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ public class Upgrader
|
||||||
public void upgrade(boolean keepOriginals)
|
public void upgrade(boolean keepOriginals)
|
||||||
{
|
{
|
||||||
outputHandler.output("Upgrading " + sstable);
|
outputHandler.output("Upgrading " + sstable);
|
||||||
int nowInSec = FBUtilities.nowInSeconds();
|
long nowInSec = FBUtilities.nowInSeconds();
|
||||||
try (SSTableRewriter writer = SSTableRewriter.construct(cfs, transaction, keepOriginals, CompactionTask.getMaxDataAge(transaction.originals()));
|
try (SSTableRewriter writer = SSTableRewriter.construct(cfs, transaction, keepOriginals, CompactionTask.getMaxDataAge(transaction.originals()));
|
||||||
AbstractCompactionStrategy.ScannerList scanners = strategyManager.getScanners(transaction.originals());
|
AbstractCompactionStrategy.ScannerList scanners = strategyManager.getScanners(transaction.originals());
|
||||||
CompactionIterator iter = new CompactionIterator(transaction.opType(), scanners.scanners, controller, nowInSec, nextTimeUUID()))
|
CompactionIterator iter = new CompactionIterator(transaction.opType(), scanners.scanners, controller, nowInSec, nextTimeUUID()))
|
||||||
|
|
|
||||||
|
|
@ -50,14 +50,14 @@ public abstract class DataLimits
|
||||||
public static final DataLimits NONE = new CQLLimits(NO_LIMIT)
|
public static final DataLimits NONE = new CQLLimits(NO_LIMIT)
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public boolean hasEnoughLiveData(CachedPartition cached, int nowInSec, boolean countPartitionsWithOnlyStaticData, boolean enforceStrictLiveness)
|
public boolean hasEnoughLiveData(CachedPartition cached, long nowInSec, boolean countPartitionsWithOnlyStaticData, boolean enforceStrictLiveness)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnfilteredPartitionIterator filter(UnfilteredPartitionIterator iter,
|
public UnfilteredPartitionIterator filter(UnfilteredPartitionIterator iter,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
boolean countPartitionsWithOnlyStaticData)
|
boolean countPartitionsWithOnlyStaticData)
|
||||||
{
|
{
|
||||||
return iter;
|
return iter;
|
||||||
|
|
@ -65,14 +65,14 @@ public abstract class DataLimits
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UnfilteredRowIterator filter(UnfilteredRowIterator iter,
|
public UnfilteredRowIterator filter(UnfilteredRowIterator iter,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
boolean countPartitionsWithOnlyStaticData)
|
boolean countPartitionsWithOnlyStaticData)
|
||||||
{
|
{
|
||||||
return iter;
|
return iter;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PartitionIterator filter(PartitionIterator iter, int nowInSec, boolean countPartitionsWithOnlyStaticData, boolean enforceStrictLiveness)
|
public PartitionIterator filter(PartitionIterator iter, long nowInSec, boolean countPartitionsWithOnlyStaticData, boolean enforceStrictLiveness)
|
||||||
{
|
{
|
||||||
return iter;
|
return iter;
|
||||||
}
|
}
|
||||||
|
|
@ -156,7 +156,7 @@ public abstract class DataLimits
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract boolean hasEnoughLiveData(CachedPartition cached,
|
public abstract boolean hasEnoughLiveData(CachedPartition cached,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
boolean countPartitionsWithOnlyStaticData,
|
boolean countPartitionsWithOnlyStaticData,
|
||||||
boolean enforceStrictLiveness);
|
boolean enforceStrictLiveness);
|
||||||
|
|
||||||
|
|
@ -173,7 +173,7 @@ public abstract class DataLimits
|
||||||
* normally retrieved from {@link org.apache.cassandra.schema.TableMetadata#enforceStrictLiveness()}
|
* normally retrieved from {@link org.apache.cassandra.schema.TableMetadata#enforceStrictLiveness()}
|
||||||
* @return a new {@code Counter} for this limits.
|
* @return a new {@code Counter} for this limits.
|
||||||
*/
|
*/
|
||||||
public abstract Counter newCounter(int nowInSec,
|
public abstract Counter newCounter(long nowInSec,
|
||||||
boolean assumeLiveData,
|
boolean assumeLiveData,
|
||||||
boolean countPartitionsWithOnlyStaticData,
|
boolean countPartitionsWithOnlyStaticData,
|
||||||
boolean enforceStrictLiveness);
|
boolean enforceStrictLiveness);
|
||||||
|
|
@ -197,7 +197,7 @@ public abstract class DataLimits
|
||||||
public abstract DataLimits withoutState();
|
public abstract DataLimits withoutState();
|
||||||
|
|
||||||
public UnfilteredPartitionIterator filter(UnfilteredPartitionIterator iter,
|
public UnfilteredPartitionIterator filter(UnfilteredPartitionIterator iter,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
boolean countPartitionsWithOnlyStaticData)
|
boolean countPartitionsWithOnlyStaticData)
|
||||||
{
|
{
|
||||||
return this.newCounter(nowInSec,
|
return this.newCounter(nowInSec,
|
||||||
|
|
@ -208,7 +208,7 @@ public abstract class DataLimits
|
||||||
}
|
}
|
||||||
|
|
||||||
public UnfilteredRowIterator filter(UnfilteredRowIterator iter,
|
public UnfilteredRowIterator filter(UnfilteredRowIterator iter,
|
||||||
int nowInSec,
|
long nowInSec,
|
||||||
boolean countPartitionsWithOnlyStaticData)
|
boolean countPartitionsWithOnlyStaticData)
|
||||||
{
|
{
|
||||||
return this.newCounter(nowInSec,
|
return this.newCounter(nowInSec,
|
||||||
|
|
@ -218,7 +218,7 @@ public abstract class DataLimits
|
||||||
.applyTo(iter);
|
.applyTo(iter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PartitionIterator filter(PartitionIterator iter, int nowInSec, boolean countPartitionsWithOnlyStaticData, boolean enforceStrictLiveness)
|
public PartitionIterator filter(PartitionIterator iter, long nowInSec, boolean countPartitionsWithOnlyStaticData, boolean enforceStrictLiveness)
|
||||||
{
|
{
|
||||||
return this.newCounter(nowInSec, true, countPartitionsWithOnlyStaticData, enforceStrictLiveness).applyTo(iter);
|
return this.newCounter(nowInSec, true, countPartitionsWithOnlyStaticData, enforceStrictLiveness).applyTo(iter);
|
||||||
}
|
}
|
||||||
|
|
@ -230,14 +230,14 @@ public abstract class DataLimits
|
||||||
|
|
||||||
public static abstract class Counter extends StoppingTransformation<BaseRowIterator<?>>
|
public static abstract class Counter extends StoppingTransformation<BaseRowIterator<?>>
|
||||||
{
|
{
|
||||||
protected final int nowInSec;
|
protected final long nowInSec;
|
||||||
protected final boolean assumeLiveData;
|
protected final boolean assumeLiveData;
|
||||||
private final boolean enforceStrictLiveness;
|
private final boolean enforceStrictLiveness;
|
||||||
|
|
||||||
// false means we do not propagate our stop signals onto the iterator, we only count
|
// false means we do not propagate our stop signals onto the iterator, we only count
|
||||||
protected boolean enforceLimits = true;
|
protected boolean enforceLimits = true;
|
||||||
|
|
||||||
protected Counter(int nowInSec, boolean assumeLiveData, boolean enforceStrictLiveness)
|
protected Counter(long nowInSec, boolean assumeLiveData, boolean enforceStrictLiveness)
|
||||||
{
|
{
|
||||||
this.nowInSec = nowInSec;
|
this.nowInSec = nowInSec;
|
||||||
this.assumeLiveData = assumeLiveData;
|
this.assumeLiveData = assumeLiveData;
|
||||||
|
|
@ -402,7 +402,7 @@ public abstract class DataLimits
|
||||||
return new CQLLimits(toFetch, perPartitionLimit, isDistinct);
|
return new CQLLimits(toFetch, perPartitionLimit, isDistinct);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasEnoughLiveData(CachedPartition cached, int nowInSec, boolean countPartitionsWithOnlyStaticData, boolean enforceStrictLiveness)
|
public boolean hasEnoughLiveData(CachedPartition cached, long nowInSec, boolean countPartitionsWithOnlyStaticData, boolean enforceStrictLiveness)
|
||||||
{
|
{
|
||||||
// We want the number of row that are currently live. Getting that precise number forces
|
// We want the number of row that are currently live. Getting that precise number forces
|
||||||
// us to iterate the cached partition in general, but we can avoid that if:
|
// us to iterate the cached partition in general, but we can avoid that if:
|
||||||
|
|
@ -428,7 +428,7 @@ public abstract class DataLimits
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Counter newCounter(int nowInSec,
|
public Counter newCounter(long nowInSec,
|
||||||
boolean assumeLiveData,
|
boolean assumeLiveData,
|
||||||
boolean countPartitionsWithOnlyStaticData,
|
boolean countPartitionsWithOnlyStaticData,
|
||||||
boolean enforceStrictLiveness)
|
boolean enforceStrictLiveness)
|
||||||
|
|
@ -467,7 +467,7 @@ public abstract class DataLimits
|
||||||
|
|
||||||
protected boolean hasLiveStaticRow;
|
protected boolean hasLiveStaticRow;
|
||||||
|
|
||||||
public CQLCounter(int nowInSec,
|
public CQLCounter(long nowInSec,
|
||||||
boolean assumeLiveData,
|
boolean assumeLiveData,
|
||||||
boolean countPartitionsWithOnlyStaticData,
|
boolean countPartitionsWithOnlyStaticData,
|
||||||
boolean enforceStrictLiveness)
|
boolean enforceStrictLiveness)
|
||||||
|
|
@ -597,14 +597,14 @@ public abstract class DataLimits
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Counter newCounter(int nowInSec, boolean assumeLiveData, boolean countPartitionsWithOnlyStaticData, boolean enforceStrictLiveness)
|
public Counter newCounter(long nowInSec, boolean assumeLiveData, boolean countPartitionsWithOnlyStaticData, boolean enforceStrictLiveness)
|
||||||
{
|
{
|
||||||
return new PagingAwareCounter(nowInSec, assumeLiveData, countPartitionsWithOnlyStaticData, enforceStrictLiveness);
|
return new PagingAwareCounter(nowInSec, assumeLiveData, countPartitionsWithOnlyStaticData, enforceStrictLiveness);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class PagingAwareCounter extends CQLCounter
|
private class PagingAwareCounter extends CQLCounter
|
||||||
{
|
{
|
||||||
private PagingAwareCounter(int nowInSec,
|
private PagingAwareCounter(long nowInSec,
|
||||||
boolean assumeLiveData,
|
boolean assumeLiveData,
|
||||||
boolean countPartitionsWithOnlyStaticData,
|
boolean countPartitionsWithOnlyStaticData,
|
||||||
boolean enforceStrictLiveness)
|
boolean enforceStrictLiveness)
|
||||||
|
|
@ -745,7 +745,7 @@ public abstract class DataLimits
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Counter newCounter(int nowInSec,
|
public Counter newCounter(long nowInSec,
|
||||||
boolean assumeLiveData,
|
boolean assumeLiveData,
|
||||||
boolean countPartitionsWithOnlyStaticData,
|
boolean countPartitionsWithOnlyStaticData,
|
||||||
boolean enforceStrictLiveness)
|
boolean enforceStrictLiveness)
|
||||||
|
|
@ -845,7 +845,7 @@ public abstract class DataLimits
|
||||||
|
|
||||||
protected boolean hasReturnedRowsFromCurrentPartition;
|
protected boolean hasReturnedRowsFromCurrentPartition;
|
||||||
|
|
||||||
private GroupByAwareCounter(int nowInSec,
|
private GroupByAwareCounter(long nowInSec,
|
||||||
boolean assumeLiveData,
|
boolean assumeLiveData,
|
||||||
boolean countPartitionsWithOnlyStaticData,
|
boolean countPartitionsWithOnlyStaticData,
|
||||||
boolean enforceStrictLiveness)
|
boolean enforceStrictLiveness)
|
||||||
|
|
@ -1096,7 +1096,7 @@ public abstract class DataLimits
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Counter newCounter(int nowInSec, boolean assumeLiveData, boolean countPartitionsWithOnlyStaticData, boolean enforceStrictLiveness)
|
public Counter newCounter(long nowInSec, boolean assumeLiveData, boolean countPartitionsWithOnlyStaticData, boolean enforceStrictLiveness)
|
||||||
{
|
{
|
||||||
assert state == GroupingState.EMPTY_STATE || lastReturnedKey.equals(state.partitionKey());
|
assert state == GroupingState.EMPTY_STATE || lastReturnedKey.equals(state.partitionKey());
|
||||||
return new PagingGroupByAwareCounter(nowInSec, assumeLiveData, countPartitionsWithOnlyStaticData, enforceStrictLiveness);
|
return new PagingGroupByAwareCounter(nowInSec, assumeLiveData, countPartitionsWithOnlyStaticData, enforceStrictLiveness);
|
||||||
|
|
@ -1110,7 +1110,7 @@ public abstract class DataLimits
|
||||||
|
|
||||||
private class PagingGroupByAwareCounter extends GroupByAwareCounter
|
private class PagingGroupByAwareCounter extends GroupByAwareCounter
|
||||||
{
|
{
|
||||||
private PagingGroupByAwareCounter(int nowInSec, boolean assumeLiveData, boolean countPartitionsWithOnlyStaticData, boolean enforceStrictLiveness)
|
private PagingGroupByAwareCounter(long nowInSec, boolean assumeLiveData, boolean countPartitionsWithOnlyStaticData, boolean enforceStrictLiveness)
|
||||||
{
|
{
|
||||||
super(nowInSec, assumeLiveData, countPartitionsWithOnlyStaticData, enforceStrictLiveness);
|
super(nowInSec, assumeLiveData, countPartitionsWithOnlyStaticData, enforceStrictLiveness);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -130,7 +130,7 @@ public abstract class RowFilter implements Iterable<RowFilter.Expression>
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract Transformation<BaseRowIterator<?>> filter(TableMetadata metadata, int nowInSec);
|
protected abstract Transformation<BaseRowIterator<?>> filter(TableMetadata metadata, long nowInSec);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filters the provided iterator so that only the row satisfying the expression of this filter
|
* Filters the provided iterator so that only the row satisfying the expression of this filter
|
||||||
|
|
@ -140,7 +140,7 @@ public abstract class RowFilter implements Iterable<RowFilter.Expression>
|
||||||
* @param nowInSec the time of query in seconds.
|
* @param nowInSec the time of query in seconds.
|
||||||
* @return the filtered iterator.
|
* @return the filtered iterator.
|
||||||
*/
|
*/
|
||||||
public UnfilteredPartitionIterator filter(UnfilteredPartitionIterator iter, int nowInSec)
|
public UnfilteredPartitionIterator filter(UnfilteredPartitionIterator iter, long nowInSec)
|
||||||
{
|
{
|
||||||
return expressions.isEmpty() ? iter : Transformation.apply(iter, filter(iter.metadata(), nowInSec));
|
return expressions.isEmpty() ? iter : Transformation.apply(iter, filter(iter.metadata(), nowInSec));
|
||||||
}
|
}
|
||||||
|
|
@ -153,7 +153,7 @@ public abstract class RowFilter implements Iterable<RowFilter.Expression>
|
||||||
* @param nowInSec the time of query in seconds.
|
* @param nowInSec the time of query in seconds.
|
||||||
* @return the filtered iterator.
|
* @return the filtered iterator.
|
||||||
*/
|
*/
|
||||||
public PartitionIterator filter(PartitionIterator iter, TableMetadata metadata, int nowInSec)
|
public PartitionIterator filter(PartitionIterator iter, TableMetadata metadata, long nowInSec)
|
||||||
{
|
{
|
||||||
return expressions.isEmpty() ? iter : Transformation.apply(iter, filter(metadata, nowInSec));
|
return expressions.isEmpty() ? iter : Transformation.apply(iter, filter(metadata, nowInSec));
|
||||||
}
|
}
|
||||||
|
|
@ -167,7 +167,7 @@ public abstract class RowFilter implements Iterable<RowFilter.Expression>
|
||||||
* @param nowInSec the current time in seconds (to know what is live and what isn't).
|
* @param nowInSec the current time in seconds (to know what is live and what isn't).
|
||||||
* @return {@code true} if {@code row} in partition {@code partitionKey} satisfies this row filter.
|
* @return {@code true} if {@code row} in partition {@code partitionKey} satisfies this row filter.
|
||||||
*/
|
*/
|
||||||
public boolean isSatisfiedBy(TableMetadata metadata, DecoratedKey partitionKey, Row row, int nowInSec)
|
public boolean isSatisfiedBy(TableMetadata metadata, DecoratedKey partitionKey, Row row, long nowInSec)
|
||||||
{
|
{
|
||||||
// We purge all tombstones as the expressions isSatisfiedBy methods expects it
|
// We purge all tombstones as the expressions isSatisfiedBy methods expects it
|
||||||
Row purged = row.purge(DeletionPurger.PURGE_ALL, nowInSec, metadata.enforceStrictLiveness());
|
Row purged = row.purge(DeletionPurger.PURGE_ALL, nowInSec, metadata.enforceStrictLiveness());
|
||||||
|
|
@ -308,7 +308,7 @@ public abstract class RowFilter implements Iterable<RowFilter.Expression>
|
||||||
super(expressions);
|
super(expressions);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Transformation<BaseRowIterator<?>> filter(TableMetadata metadata, int nowInSec)
|
protected Transformation<BaseRowIterator<?>> filter(TableMetadata metadata, long nowInSec)
|
||||||
{
|
{
|
||||||
List<Expression> partitionLevelExpressions = new ArrayList<>();
|
List<Expression> partitionLevelExpressions = new ArrayList<>();
|
||||||
List<Expression> rowLevelExpressions = new ArrayList<>();
|
List<Expression> rowLevelExpressions = new ArrayList<>();
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ class ByteArrayObjectFactory implements ValueAccessor.ObjectFactory<byte[]>
|
||||||
private static final ArrayClusteringBound MIN_END_BOUND = new ArrayClusteringBound(ClusteringPrefix.Kind.EXCL_END_BOUND,
|
private static final ArrayClusteringBound MIN_END_BOUND = new ArrayClusteringBound(ClusteringPrefix.Kind.EXCL_END_BOUND,
|
||||||
AbstractArrayClusteringPrefix.EMPTY_VALUES_ARRAY);
|
AbstractArrayClusteringPrefix.EMPTY_VALUES_ARRAY);
|
||||||
|
|
||||||
public Cell<byte[]> cell(ColumnMetadata column, long timestamp, int ttl, int localDeletionTime, byte[] value, CellPath path)
|
public Cell<byte[]> cell(ColumnMetadata column, long timestamp, int ttl, long localDeletionTime, byte[] value, CellPath path)
|
||||||
{
|
{
|
||||||
return new ArrayCell(column, timestamp, ttl, localDeletionTime, value, path);
|
return new ArrayCell(column, timestamp, ttl, localDeletionTime, value, path);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ class ByteBufferObjectFactory implements ValueAccessor.ObjectFactory<ByteBuffer>
|
||||||
|
|
||||||
private ByteBufferObjectFactory() {}
|
private ByteBufferObjectFactory() {}
|
||||||
|
|
||||||
public Cell<ByteBuffer> cell(ColumnMetadata column, long timestamp, int ttl, int localDeletionTime, ByteBuffer value, CellPath path)
|
public Cell<ByteBuffer> cell(ColumnMetadata column, long timestamp, int ttl, long localDeletionTime, ByteBuffer value, CellPath path)
|
||||||
{
|
{
|
||||||
return new BufferCell(column, timestamp, ttl, localDeletionTime, value, path);
|
return new BufferCell(column, timestamp, ttl, localDeletionTime, value, path);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ public interface ValueAccessor<V>
|
||||||
*/
|
*/
|
||||||
public interface ObjectFactory<V>
|
public interface ObjectFactory<V>
|
||||||
{
|
{
|
||||||
Cell<V> cell(ColumnMetadata column, long timestamp, int ttl, int localDeletionTime, V value, CellPath path);
|
Cell<V> cell(ColumnMetadata column, long timestamp, int ttl, long localDeletionTime, V value, CellPath path);
|
||||||
Clustering<V> clustering(V... values);
|
Clustering<V> clustering(V... values);
|
||||||
Clustering<V> clustering();
|
Clustering<V> clustering();
|
||||||
Clustering<V> staticClustering();
|
Clustering<V> staticClustering();
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ public abstract class AbstractMemtable implements Memtable
|
||||||
// The smallest timestamp for all partitions stored in this memtable
|
// The smallest timestamp for all partitions stored in this memtable
|
||||||
protected AtomicLong minTimestamp = new AtomicLong(Long.MAX_VALUE);
|
protected AtomicLong minTimestamp = new AtomicLong(Long.MAX_VALUE);
|
||||||
// The smallest local deletion time for all partitions in this memtable
|
// The smallest local deletion time for all partitions in this memtable
|
||||||
protected AtomicInteger minLocalDeletionTime = new AtomicInteger(Integer.MAX_VALUE);
|
protected AtomicLong minLocalDeletionTime = new AtomicLong(Long.MAX_VALUE);
|
||||||
// Note: statsCollector has corresponding statistics to the two above, but starts with an epoch value which is not
|
// Note: statsCollector has corresponding statistics to the two above, but starts with an epoch value which is not
|
||||||
// correct for their usage.
|
// correct for their usage.
|
||||||
|
|
||||||
|
|
@ -81,7 +81,7 @@ public abstract class AbstractMemtable implements Memtable
|
||||||
return minTimestamp.get() != EncodingStats.NO_STATS.minTimestamp ? minTimestamp.get() : NO_MIN_TIMESTAMP;
|
return minTimestamp.get() != EncodingStats.NO_STATS.minTimestamp ? minTimestamp.get() : NO_MIN_TIMESTAMP;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getMinLocalDeletionTime()
|
public long getMinLocalDeletionTime()
|
||||||
{
|
{
|
||||||
return minLocalDeletionTime.get();
|
return minLocalDeletionTime.get();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.ConcurrentNavigableMap;
|
import java.util.concurrent.ConcurrentNavigableMap;
|
||||||
import java.util.concurrent.ConcurrentSkipListMap;
|
import java.util.concurrent.ConcurrentSkipListMap;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
|
|
@ -174,11 +173,11 @@ public class ShardedSkipListMemtable extends AbstractShardedMemtable
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMinLocalDeletionTime()
|
public long getMinLocalDeletionTime()
|
||||||
{
|
{
|
||||||
int min = Integer.MAX_VALUE;
|
long min = Long.MAX_VALUE;
|
||||||
for (MemtableShard shard : shards)
|
for (MemtableShard shard : shards)
|
||||||
min = Integer.min(min, shard.minLocalDeletionTime());
|
min = Long.min(min, shard.minLocalDeletionTime());
|
||||||
return min;
|
return min;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -318,7 +317,7 @@ public class ShardedSkipListMemtable extends AbstractShardedMemtable
|
||||||
|
|
||||||
// The smallest timestamp for all partitions stored in this shard
|
// The smallest timestamp for all partitions stored in this shard
|
||||||
private final AtomicLong minTimestamp = new AtomicLong(Long.MAX_VALUE);
|
private final AtomicLong minTimestamp = new AtomicLong(Long.MAX_VALUE);
|
||||||
private final AtomicInteger minLocalDeletionTime = new AtomicInteger(Integer.MAX_VALUE);
|
private final AtomicLong minLocalDeletionTime = new AtomicLong(Long.MAX_VALUE);
|
||||||
|
|
||||||
private final AtomicLong liveDataSize = new AtomicLong(0);
|
private final AtomicLong liveDataSize = new AtomicLong(0);
|
||||||
|
|
||||||
|
|
@ -431,7 +430,7 @@ public class ShardedSkipListMemtable extends AbstractShardedMemtable
|
||||||
return currentOperations.get();
|
return currentOperations.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int minLocalDeletionTime()
|
public long minLocalDeletionTime()
|
||||||
{
|
{
|
||||||
return minLocalDeletionTime.get();
|
return minLocalDeletionTime.get();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -270,11 +270,11 @@ public class TrieMemtable extends AbstractShardedMemtable
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMinLocalDeletionTime()
|
public long getMinLocalDeletionTime()
|
||||||
{
|
{
|
||||||
int min = Integer.MAX_VALUE;
|
long min = Long.MAX_VALUE;
|
||||||
for (MemtableShard shard : shards)
|
for (MemtableShard shard : shards)
|
||||||
min = Integer.min(min, shard.minLocalDeletionTime());
|
min = Long.min(min, shard.minLocalDeletionTime());
|
||||||
return min;
|
return min;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -428,7 +428,7 @@ public class TrieMemtable extends AbstractShardedMemtable
|
||||||
// The smallest timestamp for all partitions stored in this shard
|
// The smallest timestamp for all partitions stored in this shard
|
||||||
private volatile long minTimestamp = Long.MAX_VALUE;
|
private volatile long minTimestamp = Long.MAX_VALUE;
|
||||||
|
|
||||||
private volatile int minLocalDeletionTime = Integer.MAX_VALUE;
|
private volatile long minLocalDeletionTime = Long.MAX_VALUE;
|
||||||
|
|
||||||
private volatile long liveDataSize = 0;
|
private volatile long liveDataSize = 0;
|
||||||
|
|
||||||
|
|
@ -544,7 +544,7 @@ public class TrieMemtable extends AbstractShardedMemtable
|
||||||
return currentOperations;
|
return currentOperations;
|
||||||
}
|
}
|
||||||
|
|
||||||
int minLocalDeletionTime()
|
long minLocalDeletionTime()
|
||||||
{
|
{
|
||||||
return minLocalDeletionTime;
|
return minLocalDeletionTime;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,11 +29,12 @@ import org.apache.cassandra.net.MessagingService;
|
||||||
import org.apache.cassandra.schema.Schema;
|
import org.apache.cassandra.schema.Schema;
|
||||||
import org.apache.cassandra.schema.TableId;
|
import org.apache.cassandra.schema.TableId;
|
||||||
import org.apache.cassandra.schema.TableMetadata;
|
import org.apache.cassandra.schema.TableMetadata;
|
||||||
|
import org.apache.cassandra.utils.CassandraUInt;
|
||||||
import org.apache.cassandra.utils.btree.BTree;
|
import org.apache.cassandra.utils.btree.BTree;
|
||||||
|
|
||||||
public class CachedBTreePartition extends ImmutableBTreePartition implements CachedPartition
|
public class CachedBTreePartition extends ImmutableBTreePartition implements CachedPartition
|
||||||
{
|
{
|
||||||
private final int createdAtInSec;
|
private final long createdAtInSec;
|
||||||
|
|
||||||
private final int cachedLiveRows;
|
private final int cachedLiveRows;
|
||||||
private final int rowsWithNonExpiringCells;
|
private final int rowsWithNonExpiringCells;
|
||||||
|
|
@ -41,7 +42,7 @@ public class CachedBTreePartition extends ImmutableBTreePartition implements Cac
|
||||||
private CachedBTreePartition(TableMetadata metadata,
|
private CachedBTreePartition(TableMetadata metadata,
|
||||||
DecoratedKey partitionKey,
|
DecoratedKey partitionKey,
|
||||||
BTreePartitionData holder,
|
BTreePartitionData holder,
|
||||||
int createdAtInSec,
|
long createdAtInSec,
|
||||||
int cachedLiveRows,
|
int cachedLiveRows,
|
||||||
int rowsWithNonExpiringCells)
|
int rowsWithNonExpiringCells)
|
||||||
{
|
{
|
||||||
|
|
@ -61,7 +62,7 @@ public class CachedBTreePartition extends ImmutableBTreePartition implements Cac
|
||||||
* @param nowInSec the time of the creation in seconds. This is the time at which {@link #cachedLiveRows} applies.
|
* @param nowInSec the time of the creation in seconds. This is the time at which {@link #cachedLiveRows} applies.
|
||||||
* @return the created partition.
|
* @return the created partition.
|
||||||
*/
|
*/
|
||||||
public static CachedBTreePartition create(UnfilteredRowIterator iterator, int nowInSec)
|
public static CachedBTreePartition create(UnfilteredRowIterator iterator, long nowInSec)
|
||||||
{
|
{
|
||||||
return create(iterator, 16, nowInSec);
|
return create(iterator, 16, nowInSec);
|
||||||
}
|
}
|
||||||
|
|
@ -78,7 +79,7 @@ public class CachedBTreePartition extends ImmutableBTreePartition implements Cac
|
||||||
* @param nowInSec the time of the creation in seconds. This is the time at which {@link #cachedLiveRows} applies.
|
* @param nowInSec the time of the creation in seconds. This is the time at which {@link #cachedLiveRows} applies.
|
||||||
* @return the created partition.
|
* @return the created partition.
|
||||||
*/
|
*/
|
||||||
public static CachedBTreePartition create(UnfilteredRowIterator iterator, int initialRowCapacity, int nowInSec)
|
public static CachedBTreePartition create(UnfilteredRowIterator iterator, int initialRowCapacity, long nowInSec)
|
||||||
{
|
{
|
||||||
BTreePartitionData holder = ImmutableBTreePartition.build(iterator, initialRowCapacity);
|
BTreePartitionData holder = ImmutableBTreePartition.build(iterator, initialRowCapacity);
|
||||||
|
|
||||||
|
|
@ -150,7 +151,7 @@ public class CachedBTreePartition extends ImmutableBTreePartition implements Cac
|
||||||
assert partition instanceof CachedBTreePartition;
|
assert partition instanceof CachedBTreePartition;
|
||||||
CachedBTreePartition p = (CachedBTreePartition)partition;
|
CachedBTreePartition p = (CachedBTreePartition)partition;
|
||||||
|
|
||||||
out.writeInt(p.createdAtInSec);
|
out.writeInt(CassandraUInt.fromLong(p.createdAtInSec));
|
||||||
out.writeInt(p.cachedLiveRows);
|
out.writeInt(p.cachedLiveRows);
|
||||||
out.writeInt(p.rowsWithNonExpiringCells);
|
out.writeInt(p.rowsWithNonExpiringCells);
|
||||||
partition.metadata().id.serialize(out);
|
partition.metadata().id.serialize(out);
|
||||||
|
|
@ -171,7 +172,7 @@ public class CachedBTreePartition extends ImmutableBTreePartition implements Cac
|
||||||
// 2) saves the creation of a temporary iterator: rows are directly written to the partition, which
|
// 2) saves the creation of a temporary iterator: rows are directly written to the partition, which
|
||||||
// is slightly faster.
|
// is slightly faster.
|
||||||
|
|
||||||
int createdAtInSec = in.readInt();
|
long createdAtInSec = CassandraUInt.toLong(in.readInt());
|
||||||
int cachedLiveRows = in.readInt();
|
int cachedLiveRows = in.readInt();
|
||||||
int rowsWithNonExpiringCells = in.readInt();
|
int rowsWithNonExpiringCells = in.readInt();
|
||||||
|
|
||||||
|
|
@ -204,7 +205,7 @@ public class CachedBTreePartition extends ImmutableBTreePartition implements Cac
|
||||||
|
|
||||||
try (UnfilteredRowIterator iter = p.unfilteredIterator())
|
try (UnfilteredRowIterator iter = p.unfilteredIterator())
|
||||||
{
|
{
|
||||||
return TypeSizes.sizeof(p.createdAtInSec)
|
return TypeSizes.INT_SIZE //createdAtInSec
|
||||||
+ TypeSizes.sizeof(p.cachedLiveRows)
|
+ TypeSizes.sizeof(p.cachedLiveRows)
|
||||||
+ TypeSizes.sizeof(p.rowsWithNonExpiringCells)
|
+ TypeSizes.sizeof(p.rowsWithNonExpiringCells)
|
||||||
+ partition.metadata().id.serializedSize()
|
+ partition.metadata().id.serializedSize()
|
||||||
|
|
|
||||||
|
|
@ -114,7 +114,7 @@ public class PartitionUpdate extends AbstractBTreePartition
|
||||||
*
|
*
|
||||||
* @return the newly created partition deletion update.
|
* @return the newly created partition deletion update.
|
||||||
*/
|
*/
|
||||||
public static PartitionUpdate fullPartitionDelete(TableMetadata metadata, DecoratedKey key, long timestamp, int nowInSec)
|
public static PartitionUpdate fullPartitionDelete(TableMetadata metadata, DecoratedKey key, long timestamp, long nowInSec)
|
||||||
{
|
{
|
||||||
MutableDeletionInfo deletionInfo = new MutableDeletionInfo(timestamp, nowInSec);
|
MutableDeletionInfo deletionInfo = new MutableDeletionInfo(timestamp, nowInSec);
|
||||||
BTreePartitionData holder = new BTreePartitionData(RegularAndStaticColumns.NONE, BTree.empty(), deletionInfo, Rows.EMPTY_STATIC_ROW, EncodingStats.NO_STATS);
|
BTreePartitionData holder = new BTreePartitionData(RegularAndStaticColumns.NONE, BTree.empty(), deletionInfo, Rows.EMPTY_STATIC_ROW, EncodingStats.NO_STATS);
|
||||||
|
|
@ -291,7 +291,7 @@ public class PartitionUpdate extends AbstractBTreePartition
|
||||||
*
|
*
|
||||||
* @return the newly created partition deletion update.
|
* @return the newly created partition deletion update.
|
||||||
*/
|
*/
|
||||||
public static PartitionUpdate fullPartitionDelete(TableMetadata metadata, ByteBuffer key, long timestamp, int nowInSec)
|
public static PartitionUpdate fullPartitionDelete(TableMetadata metadata, ByteBuffer key, long timestamp, long nowInSec)
|
||||||
{
|
{
|
||||||
return fullPartitionDelete(metadata, metadata.partitioner.decorateKey(key), timestamp, nowInSec);
|
return fullPartitionDelete(metadata, metadata.partitioner.decorateKey(key), timestamp, nowInSec);
|
||||||
}
|
}
|
||||||
|
|
@ -597,7 +597,7 @@ public class PartitionUpdate extends AbstractBTreePartition
|
||||||
* time in seconds will be used.
|
* time in seconds will be used.
|
||||||
* @return this builder.
|
* @return this builder.
|
||||||
*/
|
*/
|
||||||
public SimpleBuilder nowInSec(int nowInSec);
|
public SimpleBuilder nowInSec(long nowInSec);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds the row identifier by the provided clustering and return a builder for that row.
|
* Adds the row identifier by the provided clustering and return a builder for that row.
|
||||||
|
|
|
||||||
|
|
@ -26,14 +26,14 @@ import org.apache.cassandra.db.transform.Transformation;
|
||||||
public abstract class PurgeFunction extends Transformation<UnfilteredRowIterator>
|
public abstract class PurgeFunction extends Transformation<UnfilteredRowIterator>
|
||||||
{
|
{
|
||||||
private final DeletionPurger purger;
|
private final DeletionPurger purger;
|
||||||
private final int nowInSec;
|
private final long nowInSec;
|
||||||
|
|
||||||
private final boolean enforceStrictLiveness;
|
private final boolean enforceStrictLiveness;
|
||||||
private boolean isReverseOrder;
|
private boolean isReverseOrder;
|
||||||
|
|
||||||
private boolean ignoreGcGraceSeconds;
|
private boolean ignoreGcGraceSeconds;
|
||||||
|
|
||||||
public PurgeFunction(int nowInSec, int gcBefore, int oldestUnrepairedTombstone, boolean onlyPurgeRepairedTombstones,
|
public PurgeFunction(long nowInSec, long gcBefore, long oldestUnrepairedTombstone, boolean onlyPurgeRepairedTombstones,
|
||||||
boolean enforceStrictLiveness)
|
boolean enforceStrictLiveness)
|
||||||
{
|
{
|
||||||
this.nowInSec = nowInSec;
|
this.nowInSec = nowInSec;
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ public abstract class UnfilteredPartitionIterators
|
||||||
return MorePartitions.extend(iterators.get(0), new Extend());
|
return MorePartitions.extend(iterators.get(0), new Extend());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PartitionIterator filter(final UnfilteredPartitionIterator iterator, final int nowInSec)
|
public static PartitionIterator filter(final UnfilteredPartitionIterator iterator, final long nowInSec)
|
||||||
{
|
{
|
||||||
return FilteredPartitions.filter(iterator, nowInSec);
|
return FilteredPartitions.filter(iterator, nowInSec);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ public class CassandraTableRepairManager implements TableRepairManager
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ValidationPartitionIterator getValidationIterator(Collection<Range<Token>> ranges, TimeUUID parentId, TimeUUID sessionID, boolean isIncremental, int nowInSec, TopPartitionTracker.Collector topPartitionCollector) throws IOException, NoSuchRepairSessionException
|
public ValidationPartitionIterator getValidationIterator(Collection<Range<Token>> ranges, TimeUUID parentId, TimeUUID sessionID, boolean isIncremental, long nowInSec, TopPartitionTracker.Collector topPartitionCollector) throws IOException, NoSuchRepairSessionException
|
||||||
{
|
{
|
||||||
return new CassandraValidationIterator(cfs, ranges, parentId, sessionID, isIncremental, nowInSec, topPartitionCollector);
|
return new CassandraValidationIterator(cfs, ranges, parentId, sessionID, isIncremental, nowInSec, topPartitionCollector);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ public class CassandraValidationIterator extends ValidationPartitionIterator
|
||||||
*/
|
*/
|
||||||
private static class ValidationCompactionController extends CompactionController
|
private static class ValidationCompactionController extends CompactionController
|
||||||
{
|
{
|
||||||
public ValidationCompactionController(ColumnFamilyStore cfs, int gcBefore)
|
public ValidationCompactionController(ColumnFamilyStore cfs, long gcBefore)
|
||||||
{
|
{
|
||||||
super(cfs, gcBefore);
|
super(cfs, gcBefore);
|
||||||
}
|
}
|
||||||
|
|
@ -96,7 +96,7 @@ public class CassandraValidationIterator extends ValidationPartitionIterator
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getDefaultGcBefore(ColumnFamilyStore cfs, int nowInSec)
|
public static long getDefaultGcBefore(ColumnFamilyStore cfs, long nowInSec)
|
||||||
{
|
{
|
||||||
// 2ndary indexes have ExpiringColumns too, so we need to purge tombstones deleted before now. We do not need to
|
// 2ndary indexes have ExpiringColumns too, so we need to purge tombstones deleted before now. We do not need to
|
||||||
// add any GcGrace however since 2ndary indexes are local to a node.
|
// add any GcGrace however since 2ndary indexes are local to a node.
|
||||||
|
|
@ -105,7 +105,7 @@ public class CassandraValidationIterator extends ValidationPartitionIterator
|
||||||
|
|
||||||
private static class ValidationCompactionIterator extends CompactionIterator
|
private static class ValidationCompactionIterator extends CompactionIterator
|
||||||
{
|
{
|
||||||
public ValidationCompactionIterator(List<ISSTableScanner> scanners, ValidationCompactionController controller, int nowInSec, ActiveCompactionsTracker activeCompactions, TopPartitionTracker.Collector topPartitionCollector)
|
public ValidationCompactionIterator(List<ISSTableScanner> scanners, ValidationCompactionController controller, long nowInSec, ActiveCompactionsTracker activeCompactions, TopPartitionTracker.Collector topPartitionCollector)
|
||||||
{
|
{
|
||||||
super(OperationType.VALIDATION, scanners, controller, nowInSec, nextTimeUUID(), activeCompactions, topPartitionCollector);
|
super(OperationType.VALIDATION, scanners, controller, nowInSec, nextTimeUUID(), activeCompactions, topPartitionCollector);
|
||||||
}
|
}
|
||||||
|
|
@ -172,7 +172,7 @@ public class CassandraValidationIterator extends ValidationPartitionIterator
|
||||||
private final long estimatedPartitions;
|
private final long estimatedPartitions;
|
||||||
private final Map<Range<Token>, Long> rangePartitionCounts;
|
private final Map<Range<Token>, Long> rangePartitionCounts;
|
||||||
|
|
||||||
public CassandraValidationIterator(ColumnFamilyStore cfs, Collection<Range<Token>> ranges, TimeUUID parentId, TimeUUID sessionID, boolean isIncremental, int nowInSec, TopPartitionTracker.Collector topPartitionCollector) throws IOException, NoSuchRepairSessionException
|
public CassandraValidationIterator(ColumnFamilyStore cfs, Collection<Range<Token>> ranges, TimeUUID parentId, TimeUUID sessionID, boolean isIncremental, long nowInSec, TopPartitionTracker.Collector topPartitionCollector) throws IOException, NoSuchRepairSessionException
|
||||||
{
|
{
|
||||||
this.cfs = cfs;
|
this.cfs = cfs;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ public abstract class AbstractCell<V> extends Cell<V>
|
||||||
return !isTombstone() && column.isCounterColumn();
|
return !isTombstone() && column.isCounterColumn();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isLive(int nowInSec)
|
public boolean isLive(long nowInSec)
|
||||||
{
|
{
|
||||||
return localDeletionTime() == NO_DELETION_TIME || (ttl() != NO_TTL && nowInSec < localDeletionTime());
|
return localDeletionTime() == NO_DELETION_TIME || (ttl() != NO_TTL && nowInSec < localDeletionTime());
|
||||||
}
|
}
|
||||||
|
|
@ -75,7 +75,7 @@ public abstract class AbstractCell<V> extends Cell<V>
|
||||||
return marked == value ? this : new BufferCell(column, timestamp(), ttl(), localDeletionTime(), marked, path());
|
return marked == value ? this : new BufferCell(column, timestamp(), ttl(), localDeletionTime(), marked, path());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Cell<?> purge(DeletionPurger purger, int nowInSec)
|
public Cell<?> purge(DeletionPurger purger, long nowInSec)
|
||||||
{
|
{
|
||||||
if (!isLive(nowInSec))
|
if (!isLive(nowInSec))
|
||||||
{
|
{
|
||||||
|
|
@ -147,6 +147,8 @@ public abstract class AbstractCell<V> extends Cell<V>
|
||||||
throw new MarshalException("A TTL should not be negative");
|
throw new MarshalException("A TTL should not be negative");
|
||||||
if (localDeletionTime() < 0)
|
if (localDeletionTime() < 0)
|
||||||
throw new MarshalException("A local deletion time should not be negative");
|
throw new MarshalException("A local deletion time should not be negative");
|
||||||
|
if (localDeletionTime() == INVALID_DELETION_TIME)
|
||||||
|
throw new MarshalException("A local deletion time should not be a legacy overflowed value");
|
||||||
if (isExpiring() && localDeletionTime() == NO_DELETION_TIME)
|
if (isExpiring() && localDeletionTime() == NO_DELETION_TIME)
|
||||||
throw new MarshalException("Shoud not have a TTL without an associated local deletion time");
|
throw new MarshalException("Shoud not have a TTL without an associated local deletion time");
|
||||||
|
|
||||||
|
|
@ -159,7 +161,7 @@ public abstract class AbstractCell<V> extends Cell<V>
|
||||||
|
|
||||||
public boolean hasInvalidDeletions()
|
public boolean hasInvalidDeletions()
|
||||||
{
|
{
|
||||||
if (ttl() < 0 || localDeletionTime() < 0 || (isExpiring() && localDeletionTime() == NO_DELETION_TIME))
|
if (ttl() < 0 || localDeletionTime() == INVALID_DELETION_TIME || localDeletionTime() < 0 || (isExpiring() && localDeletionTime() == NO_DELETION_TIME))
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ public abstract class AbstractRow implements Row
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasLiveData(int nowInSec, boolean enforceStrictLiveness)
|
public boolean hasLiveData(long nowInSec, boolean enforceStrictLiveness)
|
||||||
{
|
{
|
||||||
if (primaryKeyLivenessInfo().isLive(nowInSec))
|
if (primaryKeyLivenessInfo().isLive(nowInSec))
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -34,19 +34,27 @@ public class ArrayCell extends AbstractCell<byte[]>
|
||||||
{
|
{
|
||||||
private static final long EMPTY_SIZE = ObjectSizes.measure(new ArrayCell(ColumnMetadata.regularColumn("", "", "", ByteType.instance), 0L, 0, 0, EMPTY_BYTE_ARRAY, null));
|
private static final long EMPTY_SIZE = ObjectSizes.measure(new ArrayCell(ColumnMetadata.regularColumn("", "", "", ByteType.instance), 0L, 0, 0, EMPTY_BYTE_ARRAY, null));
|
||||||
|
|
||||||
|
// Careful: Adding vars here has an impact on memtable size
|
||||||
private final long timestamp;
|
private final long timestamp;
|
||||||
private final int ttl;
|
private final int ttl;
|
||||||
private final int localDeletionTime;
|
private final int localDeletionTimeUnsignedInteger;
|
||||||
|
|
||||||
private final byte[] value;
|
private final byte[] value;
|
||||||
private final CellPath path;
|
private final CellPath path;
|
||||||
|
|
||||||
public ArrayCell(ColumnMetadata column, long timestamp, int ttl, int localDeletionTime, byte[] value, CellPath path)
|
// Please keep both int/long overloaded ctros public. Otherwise silent casts will mess timestamps when one is not
|
||||||
|
// available.
|
||||||
|
public ArrayCell(ColumnMetadata column, long timestamp, int ttl, long localDeletionTime, byte[] value, CellPath path)
|
||||||
|
{
|
||||||
|
this(column, timestamp, ttl, Cell.deletionTimeLongToUnsignedInteger(localDeletionTime), value, path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayCell(ColumnMetadata column, long timestamp, int ttl, int localDeletionTimeUnsignedInteger, byte[] value, CellPath path)
|
||||||
{
|
{
|
||||||
super(column);
|
super(column);
|
||||||
this.timestamp = timestamp;
|
this.timestamp = timestamp;
|
||||||
this.ttl = ttl;
|
this.ttl = ttl;
|
||||||
this.localDeletionTime = localDeletionTime;
|
this.localDeletionTimeUnsignedInteger = localDeletionTimeUnsignedInteger;
|
||||||
this.value = value;
|
this.value = value;
|
||||||
this.path = path;
|
this.path = path;
|
||||||
}
|
}
|
||||||
|
|
@ -61,11 +69,6 @@ public class ArrayCell extends AbstractCell<byte[]>
|
||||||
return ttl;
|
return ttl;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int localDeletionTime()
|
|
||||||
{
|
|
||||||
return localDeletionTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] value()
|
public byte[] value()
|
||||||
{
|
{
|
||||||
return value;
|
return value;
|
||||||
|
|
@ -83,15 +86,15 @@ public class ArrayCell extends AbstractCell<byte[]>
|
||||||
|
|
||||||
public Cell<?> withUpdatedColumn(ColumnMetadata newColumn)
|
public Cell<?> withUpdatedColumn(ColumnMetadata newColumn)
|
||||||
{
|
{
|
||||||
return new ArrayCell(newColumn, timestamp, ttl, localDeletionTime, value, path);
|
return new ArrayCell(newColumn, timestamp, ttl, localDeletionTimeUnsignedInteger, value, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Cell<?> withUpdatedValue(ByteBuffer newValue)
|
public Cell<?> withUpdatedValue(ByteBuffer newValue)
|
||||||
{
|
{
|
||||||
return new ArrayCell(column, timestamp, ttl, localDeletionTime, ByteBufferUtil.getArray(newValue), path);
|
return new ArrayCell(column, timestamp, ttl, localDeletionTimeUnsignedInteger, ByteBufferUtil.getArray(newValue), path);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Cell<?> withUpdatedTimestampAndLocalDeletionTime(long newTimestamp, int newLocalDeletionTime)
|
public Cell<?> withUpdatedTimestampAndLocalDeletionTime(long newTimestamp, long newLocalDeletionTime)
|
||||||
{
|
{
|
||||||
return new ArrayCell(column, newTimestamp, ttl, newLocalDeletionTime, value, path);
|
return new ArrayCell(column, newTimestamp, ttl, newLocalDeletionTime, value, path);
|
||||||
}
|
}
|
||||||
|
|
@ -99,7 +102,7 @@ public class ArrayCell extends AbstractCell<byte[]>
|
||||||
@Override
|
@Override
|
||||||
public Cell<?> withSkippedValue()
|
public Cell<?> withSkippedValue()
|
||||||
{
|
{
|
||||||
return new ArrayCell(column, timestamp, ttl, localDeletionTime, EMPTY_BYTE_ARRAY, path);
|
return new ArrayCell(column, timestamp, ttl, localDeletionTimeUnsignedInteger, EMPTY_BYTE_ARRAY, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -122,4 +125,10 @@ public class ArrayCell extends AbstractCell<byte[]>
|
||||||
{
|
{
|
||||||
return EMPTY_SIZE + ObjectSizes.sizeOfArray(value) - value.length + (path == null ? 0 : path.unsharedHeapSizeExcludingData());
|
return EMPTY_SIZE + ObjectSizes.sizeOfArray(value) - value.length + (path == null ? 0 : path.unsharedHeapSizeExcludingData());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int localDeletionTimeAsUnsignedInt()
|
||||||
|
{
|
||||||
|
return localDeletionTimeUnsignedInteger;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -74,8 +74,8 @@ public class BTreeRow extends AbstractRow
|
||||||
// The data for each columns present in this row in column sorted order.
|
// The data for each columns present in this row in column sorted order.
|
||||||
private final Object[] btree;
|
private final Object[] btree;
|
||||||
|
|
||||||
private static final ColumnData FIRST_COMPLEX_STATIC = new ComplexColumnData(Columns.FIRST_COMPLEX_STATIC, new Object[0], new DeletionTime(0, 0));
|
private static final ColumnData FIRST_COMPLEX_STATIC = new ComplexColumnData(Columns.FIRST_COMPLEX_STATIC, new Object[0], DeletionTime.build(0, 0));
|
||||||
private static final ColumnData FIRST_COMPLEX_REGULAR = new ComplexColumnData(Columns.FIRST_COMPLEX_REGULAR, new Object[0], new DeletionTime(0, 0));
|
private static final ColumnData FIRST_COMPLEX_REGULAR = new ComplexColumnData(Columns.FIRST_COMPLEX_REGULAR, new Object[0], DeletionTime.build(0, 0));
|
||||||
private static final Comparator<ColumnData> COLUMN_COMPARATOR = (cd1, cd2) -> cd1.column.compareTo(cd2.column);
|
private static final Comparator<ColumnData> COLUMN_COMPARATOR = (cd1, cd2) -> cd1.column.compareTo(cd2.column);
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -84,15 +84,15 @@ public class BTreeRow extends AbstractRow
|
||||||
// we want to speed up that case by not having to iterate/copy the row in this case. We could keep a single boolean telling us if we have tombstones,
|
// we want to speed up that case by not having to iterate/copy the row in this case. We could keep a single boolean telling us if we have tombstones,
|
||||||
// but that doesn't work for expiring columns. So instead we keep the deletion time for the first thing in the row to be deleted. This allow at any given
|
// but that doesn't work for expiring columns. So instead we keep the deletion time for the first thing in the row to be deleted. This allow at any given
|
||||||
// time to know if we have any deleted information or not. If we any "true" tombstone (i.e. not an expiring cell), this value will be forced to
|
// time to know if we have any deleted information or not. If we any "true" tombstone (i.e. not an expiring cell), this value will be forced to
|
||||||
// Integer.MIN_VALUE, but if we don't and have expiring cells, this will the time at which the first expiring cell expires. If we have no tombstones and
|
// Long.MIN_VALUE, but if we don't and have expiring cells, this will the time at which the first expiring cell expires. If we have no tombstones and
|
||||||
// no expiring cells, this will be Integer.MAX_VALUE;
|
// no expiring cells, this will be Cell.MAX_DELETION_TIME;
|
||||||
private final int minLocalDeletionTime;
|
private final long minLocalDeletionTime;
|
||||||
|
|
||||||
private BTreeRow(Clustering clustering,
|
private BTreeRow(Clustering clustering,
|
||||||
LivenessInfo primaryKeyLivenessInfo,
|
LivenessInfo primaryKeyLivenessInfo,
|
||||||
Deletion deletion,
|
Deletion deletion,
|
||||||
Object[] btree,
|
Object[] btree,
|
||||||
int minLocalDeletionTime)
|
long minLocalDeletionTime)
|
||||||
{
|
{
|
||||||
assert !deletion.isShadowedBy(primaryKeyLivenessInfo);
|
assert !deletion.isShadowedBy(primaryKeyLivenessInfo);
|
||||||
this.clustering = clustering;
|
this.clustering = clustering;
|
||||||
|
|
@ -102,7 +102,7 @@ public class BTreeRow extends AbstractRow
|
||||||
this.minLocalDeletionTime = minLocalDeletionTime;
|
this.minLocalDeletionTime = minLocalDeletionTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
private BTreeRow(Clustering<?> clustering, Object[] btree, int minLocalDeletionTime)
|
private BTreeRow(Clustering<?> clustering, Object[] btree, long minLocalDeletionTime)
|
||||||
{
|
{
|
||||||
this(clustering, LivenessInfo.EMPTY, Deletion.LIVE, btree, minLocalDeletionTime);
|
this(clustering, LivenessInfo.EMPTY, Deletion.LIVE, btree, minLocalDeletionTime);
|
||||||
}
|
}
|
||||||
|
|
@ -113,11 +113,11 @@ public class BTreeRow extends AbstractRow
|
||||||
Deletion deletion,
|
Deletion deletion,
|
||||||
Object[] btree)
|
Object[] btree)
|
||||||
{
|
{
|
||||||
int minDeletionTime = Math.min(minDeletionTime(primaryKeyLivenessInfo), minDeletionTime(deletion.time()));
|
long minDeletionTime = Math.min(minDeletionTime(primaryKeyLivenessInfo), minDeletionTime(deletion.time()));
|
||||||
if (minDeletionTime != Integer.MIN_VALUE)
|
if (minDeletionTime != Long.MIN_VALUE)
|
||||||
{
|
{
|
||||||
long result = BTree.<ColumnData>accumulate(btree, (cd, l) -> Math.min(l, minDeletionTime(cd)) , minDeletionTime);
|
long result = BTree.<ColumnData>accumulate(btree, (cd, l) -> Math.min(l, minDeletionTime(cd)) , minDeletionTime);
|
||||||
minDeletionTime = Ints.checkedCast(result);
|
minDeletionTime = result;
|
||||||
}
|
}
|
||||||
|
|
||||||
return create(clustering, primaryKeyLivenessInfo, deletion, btree, minDeletionTime);
|
return create(clustering, primaryKeyLivenessInfo, deletion, btree, minDeletionTime);
|
||||||
|
|
@ -127,14 +127,14 @@ public class BTreeRow extends AbstractRow
|
||||||
LivenessInfo primaryKeyLivenessInfo,
|
LivenessInfo primaryKeyLivenessInfo,
|
||||||
Deletion deletion,
|
Deletion deletion,
|
||||||
Object[] btree,
|
Object[] btree,
|
||||||
int minDeletionTime)
|
long minDeletionTime)
|
||||||
{
|
{
|
||||||
return new BTreeRow(clustering, primaryKeyLivenessInfo, deletion, btree, minDeletionTime);
|
return new BTreeRow(clustering, primaryKeyLivenessInfo, deletion, btree, minDeletionTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BTreeRow emptyRow(Clustering<?> clustering)
|
public static BTreeRow emptyRow(Clustering<?> clustering)
|
||||||
{
|
{
|
||||||
return new BTreeRow(clustering, BTree.empty(), Integer.MAX_VALUE);
|
return new BTreeRow(clustering, BTree.empty(), Cell.MAX_DELETION_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BTreeRow singleCellRow(Clustering<?> clustering, Cell<?> cell)
|
public static BTreeRow singleCellRow(Clustering<?> clustering, Cell<?> cell)
|
||||||
|
|
@ -149,7 +149,7 @@ public class BTreeRow extends AbstractRow
|
||||||
public static BTreeRow emptyDeletedRow(Clustering<?> clustering, Deletion deletion)
|
public static BTreeRow emptyDeletedRow(Clustering<?> clustering, Deletion deletion)
|
||||||
{
|
{
|
||||||
assert !deletion.isLive();
|
assert !deletion.isLive();
|
||||||
return new BTreeRow(clustering, LivenessInfo.EMPTY, deletion, BTree.empty(), Integer.MIN_VALUE);
|
return new BTreeRow(clustering, LivenessInfo.EMPTY, deletion, BTree.empty(), Long.MIN_VALUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BTreeRow noCellLiveRow(Clustering<?> clustering, LivenessInfo primaryKeyLivenessInfo)
|
public static BTreeRow noCellLiveRow(Clustering<?> clustering, LivenessInfo primaryKeyLivenessInfo)
|
||||||
|
|
@ -162,34 +162,34 @@ public class BTreeRow extends AbstractRow
|
||||||
minDeletionTime(primaryKeyLivenessInfo));
|
minDeletionTime(primaryKeyLivenessInfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int minDeletionTime(Cell<?> cell)
|
private static long minDeletionTime(Cell<?> cell)
|
||||||
{
|
{
|
||||||
return cell.isTombstone() ? Integer.MIN_VALUE : cell.localDeletionTime();
|
return cell.isTombstone() ? Long.MIN_VALUE : cell.localDeletionTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int minDeletionTime(LivenessInfo info)
|
private static long minDeletionTime(LivenessInfo info)
|
||||||
{
|
{
|
||||||
return info.isExpiring() ? info.localExpirationTime() : Integer.MAX_VALUE;
|
return info.isExpiring() ? info.localExpirationTime() : Cell.MAX_DELETION_TIME;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int minDeletionTime(DeletionTime dt)
|
private static long minDeletionTime(DeletionTime dt)
|
||||||
{
|
{
|
||||||
return dt.isLive() ? Integer.MAX_VALUE : Integer.MIN_VALUE;
|
return dt.isLive() ? Cell.MAX_DELETION_TIME : Long.MIN_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int minDeletionTime(ComplexColumnData cd)
|
private static long minDeletionTime(ComplexColumnData cd)
|
||||||
{
|
{
|
||||||
int min = minDeletionTime(cd.complexDeletion());
|
long min = minDeletionTime(cd.complexDeletion());
|
||||||
for (Cell<?> cell : cd)
|
for (Cell<?> cell : cd)
|
||||||
{
|
{
|
||||||
min = Math.min(min, minDeletionTime(cell));
|
min = Math.min(min, minDeletionTime(cell));
|
||||||
if (min == Integer.MIN_VALUE)
|
if (min == Long.MIN_VALUE)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return min;
|
return min;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int minDeletionTime(ColumnData cd)
|
private static long minDeletionTime(ColumnData cd)
|
||||||
{
|
{
|
||||||
return cd.column().isSimple() ? minDeletionTime((Cell<?>) cd) : minDeletionTime((ComplexColumnData)cd);
|
return cd.column().isSimple() ? minDeletionTime((Cell<?>) cd) : minDeletionTime((ComplexColumnData)cd);
|
||||||
}
|
}
|
||||||
|
|
@ -224,10 +224,10 @@ public class BTreeRow extends AbstractRow
|
||||||
return BTree.accumulate(btree, accumulator, arg, comparator, from, initialValue);
|
return BTree.accumulate(btree, accumulator, arg, comparator, from, initialValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int minDeletionTime(Object[] btree, LivenessInfo info, DeletionTime rowDeletion)
|
private static long minDeletionTime(Object[] btree, LivenessInfo info, DeletionTime rowDeletion)
|
||||||
{
|
{
|
||||||
long min = Math.min(minDeletionTime(info), minDeletionTime(rowDeletion));
|
long min = Math.min(minDeletionTime(info), minDeletionTime(rowDeletion));
|
||||||
return (int) BTree.<ColumnData>accumulate(btree, (cd, l) -> Math.min(l, minDeletionTime(cd)), min);
|
return BTree.<ColumnData>accumulate(btree, (cd, l) -> Math.min(l, minDeletionTime(cd)), min);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Clustering<?> clustering()
|
public Clustering<?> clustering()
|
||||||
|
|
@ -399,9 +399,9 @@ public class BTreeRow extends AbstractRow
|
||||||
|
|
||||||
public boolean hasComplexDeletion()
|
public boolean hasComplexDeletion()
|
||||||
{
|
{
|
||||||
long result = accumulate((cd, v) -> ((ComplexColumnData) cd).complexDeletion().isLive() ? 0 : Long.MAX_VALUE,
|
long result = accumulate((cd, v) -> ((ComplexColumnData) cd).complexDeletion().isLive() ? 0 : Cell.MAX_DELETION_TIME,
|
||||||
COLUMN_COMPARATOR, isStatic() ? FIRST_COMPLEX_STATIC : FIRST_COMPLEX_REGULAR, 0L);
|
COLUMN_COMPARATOR, isStatic() ? FIRST_COMPLEX_STATIC : FIRST_COMPLEX_REGULAR, 0L);
|
||||||
return result == Long.MAX_VALUE;
|
return result == Cell.MAX_DELETION_TIME;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Row markCounterLocalToBeCleared()
|
public Row markCounterLocalToBeCleared()
|
||||||
|
|
@ -410,7 +410,7 @@ public class BTreeRow extends AbstractRow
|
||||||
: cd);
|
: cd);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasDeletion(int nowInSec)
|
public boolean hasDeletion(long nowInSec)
|
||||||
{
|
{
|
||||||
return nowInSec >= minLocalDeletionTime;
|
return nowInSec >= minLocalDeletionTime;
|
||||||
}
|
}
|
||||||
|
|
@ -421,7 +421,7 @@ public class BTreeRow extends AbstractRow
|
||||||
return true;
|
return true;
|
||||||
if (!deletion().time().validate())
|
if (!deletion().time().validate())
|
||||||
return true;
|
return true;
|
||||||
return accumulate((cd, v) -> cd.hasInvalidDeletions() ? Long.MAX_VALUE : v, 0) != 0;
|
return accumulate((cd, v) -> cd.hasInvalidDeletions() ? Cell.MAX_DELETION_TIME : v, 0) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -437,7 +437,7 @@ public class BTreeRow extends AbstractRow
|
||||||
// should get rid of said deletion.
|
// should get rid of said deletion.
|
||||||
Deletion newDeletion = deletion.isLive() || (deletion.isShadowable() && !primaryKeyLivenessInfo.isEmpty())
|
Deletion newDeletion = deletion.isLive() || (deletion.isShadowable() && !primaryKeyLivenessInfo.isEmpty())
|
||||||
? Deletion.LIVE
|
? Deletion.LIVE
|
||||||
: new Deletion(new DeletionTime(newTimestamp - 1, deletion.time().localDeletionTime()), deletion.isShadowable());
|
: new Deletion(DeletionTime.build(newTimestamp - 1, deletion.time().localDeletionTime()), deletion.isShadowable());
|
||||||
|
|
||||||
return transformAndFilter(newInfo, newDeletion, (cd) -> cd.updateAllTimestamp(newTimestamp));
|
return transformAndFilter(newInfo, newDeletion, (cd) -> cd.updateAllTimestamp(newTimestamp));
|
||||||
}
|
}
|
||||||
|
|
@ -451,10 +451,10 @@ public class BTreeRow extends AbstractRow
|
||||||
// - we set the minLocalDeletionTime to MIN_VALUE because we know the deletion is live
|
// - we set the minLocalDeletionTime to MIN_VALUE because we know the deletion is live
|
||||||
return newDeletion.isLive() || !deletion.isLive()
|
return newDeletion.isLive() || !deletion.isLive()
|
||||||
? this
|
? this
|
||||||
: new BTreeRow(clustering, primaryKeyLivenessInfo, Deletion.regular(newDeletion), btree, Integer.MIN_VALUE);
|
: new BTreeRow(clustering, primaryKeyLivenessInfo, Deletion.regular(newDeletion), btree, Long.MIN_VALUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Row purge(DeletionPurger purger, int nowInSec, boolean enforceStrictLiveness)
|
public Row purge(DeletionPurger purger, long nowInSec, boolean enforceStrictLiveness)
|
||||||
{
|
{
|
||||||
if (!hasDeletion(nowInSec))
|
if (!hasDeletion(nowInSec))
|
||||||
return this;
|
return this;
|
||||||
|
|
@ -495,7 +495,7 @@ public class BTreeRow extends AbstractRow
|
||||||
if (info.isEmpty() && deletion.isLive() && BTree.isEmpty(newTree))
|
if (info.isEmpty() && deletion.isLive() && BTree.isEmpty(newTree))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
int minDeletionTime = minDeletionTime(newTree, info, deletion.time());
|
long minDeletionTime = minDeletionTime(newTree, info, deletion.time());
|
||||||
return BTreeRow.create(clustering, info, deletion, newTree, minDeletionTime);
|
return BTreeRow.create(clustering, info, deletion, newTree, minDeletionTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -774,7 +774,7 @@ public class BTreeRow extends AbstractRow
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (cell.timestamp() > deletion.markedForDeleteAt())
|
if (cell.timestamp() > deletion.markedForDeleteAt())
|
||||||
deletion = new DeletionTime(cell.timestamp(), cell.localDeletionTime());
|
deletion = DeletionTime.build(cell.timestamp(), cell.localDeletionTime());
|
||||||
lb++;
|
lb++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -921,7 +921,7 @@ public class BTreeRow extends AbstractRow
|
||||||
if (deletion.isShadowedBy(primaryKeyLivenessInfo))
|
if (deletion.isShadowedBy(primaryKeyLivenessInfo))
|
||||||
deletion = Deletion.LIVE;
|
deletion = Deletion.LIVE;
|
||||||
|
|
||||||
int minDeletionTime = minDeletionTime(btree, primaryKeyLivenessInfo, deletion.time());
|
long minDeletionTime = minDeletionTime(btree, primaryKeyLivenessInfo, deletion.time());
|
||||||
Row row = BTreeRow.create(clustering, primaryKeyLivenessInfo, deletion, btree, minDeletionTime);
|
Row row = BTreeRow.create(clustering, primaryKeyLivenessInfo, deletion, btree, minDeletionTime);
|
||||||
reset();
|
reset();
|
||||||
return row;
|
return row;
|
||||||
|
|
|
||||||
|
|
@ -34,21 +34,29 @@ public class BufferCell extends AbstractCell<ByteBuffer>
|
||||||
{
|
{
|
||||||
private static final long EMPTY_SIZE = ObjectSizes.measure(new BufferCell(ColumnMetadata.regularColumn("", "", "", ByteType.instance), 0L, 0, 0, ByteBufferUtil.EMPTY_BYTE_BUFFER, null));
|
private static final long EMPTY_SIZE = ObjectSizes.measure(new BufferCell(ColumnMetadata.regularColumn("", "", "", ByteType.instance), 0L, 0, 0, ByteBufferUtil.EMPTY_BYTE_BUFFER, null));
|
||||||
|
|
||||||
|
// Careful: Adding vars here has an impact on memtable size
|
||||||
private final long timestamp;
|
private final long timestamp;
|
||||||
private final int ttl;
|
private final int ttl;
|
||||||
private final int localDeletionTime;
|
private final int localDeletionTimeUnsignedInteger;
|
||||||
|
|
||||||
private final ByteBuffer value;
|
private final ByteBuffer value;
|
||||||
private final CellPath path;
|
private final CellPath path;
|
||||||
|
|
||||||
public BufferCell(ColumnMetadata column, long timestamp, int ttl, int localDeletionTime, ByteBuffer value, CellPath path)
|
// Please keep both int/long overloaded ctros public. Otherwise silent casts will mess timestamps when one is not
|
||||||
|
// available.
|
||||||
|
public BufferCell(ColumnMetadata column, long timestamp, int ttl, long localDeletionTime, ByteBuffer value, CellPath path)
|
||||||
|
{
|
||||||
|
this(column, timestamp, ttl, deletionTimeLongToUnsignedInteger(localDeletionTime), value, path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BufferCell(ColumnMetadata column, long timestamp, int ttl, int localDeletionTimeUnsignedInteger, ByteBuffer value, CellPath path)
|
||||||
{
|
{
|
||||||
super(column);
|
super(column);
|
||||||
assert !column.isPrimaryKeyColumn();
|
assert !column.isPrimaryKeyColumn();
|
||||||
assert column.isComplex() == (path != null) : format("Column %s.%s(%s: %s) isComplex: %b with cellpath: %s", column.ksName, column.cfName, column.name, column.type.toString(), column.isComplex(), path);
|
assert column.isComplex() == (path != null) : format("Column %s.%s(%s: %s) isComplex: %b with cellpath: %s", column.ksName, column.cfName, column.name, column.type.toString(), column.isComplex(), path);
|
||||||
this.timestamp = timestamp;
|
this.timestamp = timestamp;
|
||||||
this.ttl = ttl;
|
this.ttl = ttl;
|
||||||
this.localDeletionTime = localDeletionTime;
|
this.localDeletionTimeUnsignedInteger = localDeletionTimeUnsignedInteger;
|
||||||
this.value = value;
|
this.value = value;
|
||||||
this.path = path;
|
this.path = path;
|
||||||
}
|
}
|
||||||
|
|
@ -63,23 +71,23 @@ public class BufferCell extends AbstractCell<ByteBuffer>
|
||||||
return new BufferCell(column, timestamp, NO_TTL, NO_DELETION_TIME, value, path);
|
return new BufferCell(column, timestamp, NO_TTL, NO_DELETION_TIME, value, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BufferCell expiring(ColumnMetadata column, long timestamp, int ttl, int nowInSec, ByteBuffer value)
|
public static BufferCell expiring(ColumnMetadata column, long timestamp, int ttl, long nowInSec, ByteBuffer value)
|
||||||
{
|
{
|
||||||
return expiring(column, timestamp, ttl, nowInSec, value, null);
|
return expiring(column, timestamp, ttl, nowInSec, value, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BufferCell expiring(ColumnMetadata column, long timestamp, int ttl, int nowInSec, ByteBuffer value, CellPath path)
|
public static BufferCell expiring(ColumnMetadata column, long timestamp, int ttl, long nowInSec, ByteBuffer value, CellPath path)
|
||||||
{
|
{
|
||||||
assert ttl != NO_TTL;
|
assert ttl != NO_TTL;
|
||||||
return new BufferCell(column, timestamp, ttl, ExpirationDateOverflowHandling.computeLocalExpirationTime(nowInSec, ttl), value, path);
|
return new BufferCell(column, timestamp, ttl, ExpirationDateOverflowHandling.computeLocalExpirationTime(nowInSec, ttl), value, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BufferCell tombstone(ColumnMetadata column, long timestamp, int nowInSec)
|
public static BufferCell tombstone(ColumnMetadata column, long timestamp, long nowInSec)
|
||||||
{
|
{
|
||||||
return tombstone(column, timestamp, nowInSec, null);
|
return tombstone(column, timestamp, nowInSec, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BufferCell tombstone(ColumnMetadata column, long timestamp, int nowInSec, CellPath path)
|
public static BufferCell tombstone(ColumnMetadata column, long timestamp, long nowInSec, CellPath path)
|
||||||
{
|
{
|
||||||
return new BufferCell(column, timestamp, NO_TTL, nowInSec, ByteBufferUtil.EMPTY_BYTE_BUFFER, path);
|
return new BufferCell(column, timestamp, NO_TTL, nowInSec, ByteBufferUtil.EMPTY_BYTE_BUFFER, path);
|
||||||
}
|
}
|
||||||
|
|
@ -94,11 +102,6 @@ public class BufferCell extends AbstractCell<ByteBuffer>
|
||||||
return ttl;
|
return ttl;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int localDeletionTime()
|
|
||||||
{
|
|
||||||
return localDeletionTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ByteBuffer value()
|
public ByteBuffer value()
|
||||||
{
|
{
|
||||||
return value;
|
return value;
|
||||||
|
|
@ -116,15 +119,15 @@ public class BufferCell extends AbstractCell<ByteBuffer>
|
||||||
|
|
||||||
public Cell<?> withUpdatedColumn(ColumnMetadata newColumn)
|
public Cell<?> withUpdatedColumn(ColumnMetadata newColumn)
|
||||||
{
|
{
|
||||||
return new BufferCell(newColumn, timestamp, ttl, localDeletionTime, value, path);
|
return new BufferCell(newColumn, timestamp, ttl, localDeletionTimeUnsignedInteger, value, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Cell<?> withUpdatedValue(ByteBuffer newValue)
|
public Cell<?> withUpdatedValue(ByteBuffer newValue)
|
||||||
{
|
{
|
||||||
return new BufferCell(column, timestamp, ttl, localDeletionTime, newValue, path);
|
return new BufferCell(column, timestamp, ttl, localDeletionTimeUnsignedInteger, newValue, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Cell<?> withUpdatedTimestampAndLocalDeletionTime(long newTimestamp, int newLocalDeletionTime)
|
public Cell<?> withUpdatedTimestampAndLocalDeletionTime(long newTimestamp, long newLocalDeletionTime)
|
||||||
{
|
{
|
||||||
return new BufferCell(column, newTimestamp, ttl, newLocalDeletionTime, value, path);
|
return new BufferCell(column, newTimestamp, ttl, newLocalDeletionTime, value, path);
|
||||||
}
|
}
|
||||||
|
|
@ -154,4 +157,10 @@ public class BufferCell extends AbstractCell<ByteBuffer>
|
||||||
{
|
{
|
||||||
return EMPTY_SIZE + ObjectSizes.sizeOnHeapExcludingData(value) + (path == null ? 0 : path.unsharedHeapSizeExcludingData());
|
return EMPTY_SIZE + ObjectSizes.sizeOnHeapExcludingData(value) + (path == null ? 0 : path.unsharedHeapSizeExcludingData());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int localDeletionTimeAsUnsignedInt()
|
||||||
|
{
|
||||||
|
return localDeletionTimeUnsignedInteger;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,10 @@ import org.apache.cassandra.config.*;
|
||||||
import org.apache.cassandra.db.*;
|
import org.apache.cassandra.db.*;
|
||||||
import org.apache.cassandra.db.marshal.ValueAccessor;
|
import org.apache.cassandra.db.marshal.ValueAccessor;
|
||||||
import org.apache.cassandra.io.util.DataOutputPlus;
|
import org.apache.cassandra.io.util.DataOutputPlus;
|
||||||
|
import org.apache.cassandra.net.MessagingService;
|
||||||
import org.apache.cassandra.io.util.DataInputPlus;
|
import org.apache.cassandra.io.util.DataInputPlus;
|
||||||
import org.apache.cassandra.schema.ColumnMetadata;
|
import org.apache.cassandra.schema.ColumnMetadata;
|
||||||
|
import org.apache.cassandra.utils.CassandraUInt;
|
||||||
import org.apache.cassandra.utils.memory.ByteBufferCloner;
|
import org.apache.cassandra.utils.memory.ByteBufferCloner;
|
||||||
import org.apache.cassandra.utils.memory.Cloner;
|
import org.apache.cassandra.utils.memory.Cloner;
|
||||||
|
|
||||||
|
|
@ -42,8 +44,15 @@ import org.apache.cassandra.utils.memory.Cloner;
|
||||||
public abstract class Cell<V> extends ColumnData
|
public abstract class Cell<V> extends ColumnData
|
||||||
{
|
{
|
||||||
public static final int NO_TTL = 0;
|
public static final int NO_TTL = 0;
|
||||||
public static final int NO_DELETION_TIME = Integer.MAX_VALUE;
|
public static final long NO_DELETION_TIME = Long.MAX_VALUE;
|
||||||
public static final int MAX_DELETION_TIME = Integer.MAX_VALUE - 1;
|
public static final int NO_DELETION_TIME_UNSIGNED_INTEGER = CassandraUInt.MAX_VALUE_UINT;
|
||||||
|
public static final long MAX_DELETION_TIME = CassandraUInt.MAX_VALUE_LONG - 2;
|
||||||
|
public static final int MAX_DELETION_TIME_UNSIGNED_INTEGER = CassandraUInt.fromLong(MAX_DELETION_TIME);
|
||||||
|
|
||||||
|
// Since C14227 we only support Uints, negative ldts (corruption, overflow) get converted to this
|
||||||
|
public static final long INVALID_DELETION_TIME = CassandraUInt.MAX_VALUE_LONG - 1;
|
||||||
|
// Do not use. Only for legacy ser/deser pre CASSANDRA-14227 and backwards compatible CAP policies
|
||||||
|
public static final int MAX_DELETION_TIME_2038_LEGACY_CAP = Integer.MAX_VALUE - 1;
|
||||||
|
|
||||||
public final static Comparator<Cell<?>> comparator = (c1, c2) ->
|
public final static Comparator<Cell<?>> comparator = (c1, c2) ->
|
||||||
{
|
{
|
||||||
|
|
@ -59,7 +68,7 @@ public abstract class Cell<V> extends ColumnData
|
||||||
|
|
||||||
public interface Factory<V>
|
public interface Factory<V>
|
||||||
{
|
{
|
||||||
Cell<V> create(ColumnMetadata column, long timestamp, int ttl, int localDeletionTime, V value, CellPath path);
|
Cell<V> create(ColumnMetadata column, long timestamp, int ttl, long localDeletionTime, V value, CellPath path);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Cell(ColumnMetadata column)
|
protected Cell(ColumnMetadata column)
|
||||||
|
|
@ -67,8 +76,29 @@ public abstract class Cell<V> extends ColumnData
|
||||||
super(column);
|
super(column);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int deletionTimeLongToUnsignedInteger(long deletionTime)
|
||||||
|
{
|
||||||
|
return deletionTime == NO_DELETION_TIME ? NO_DELETION_TIME_UNSIGNED_INTEGER : CassandraUInt.fromLong(deletionTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static long deletionTimeUnsignedIntegerToLong(int deletionTimeUnsignedInteger)
|
||||||
|
{
|
||||||
|
return deletionTimeUnsignedInteger == NO_DELETION_TIME_UNSIGNED_INTEGER ? NO_DELETION_TIME : CassandraUInt.toLong(deletionTimeUnsignedInteger);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static long getVersionedMaxDeletiontionTime()
|
||||||
|
{
|
||||||
|
if (DatabaseDescriptor.getStorageCompatibilityMode().disabled())
|
||||||
|
// The whole cluster is 2016, we're out of the 2038/2106 mixed cluster scenario. Shortcut to avoid the 'minClusterVersion' volatile read
|
||||||
|
return Cell.MAX_DELETION_TIME;
|
||||||
|
else
|
||||||
|
return MessagingService.instance().versions.minClusterVersion >= MessagingService.VERSION_50
|
||||||
|
? Cell.MAX_DELETION_TIME
|
||||||
|
: Cell.MAX_DELETION_TIME_2038_LEGACY_CAP;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether the cell is a counter cell or not.
|
* Whether the cell is a counter cell or not.CassandraUInt
|
||||||
*
|
*
|
||||||
* @return whether the cell is a counter cell or not.
|
* @return whether the cell is a counter cell or not.
|
||||||
*/
|
*/
|
||||||
|
|
@ -108,7 +138,10 @@ public abstract class Cell<V> extends ColumnData
|
||||||
* @return the cell local deletion time, or {@code NO_DELETION_TIME} if the cell is neither
|
* @return the cell local deletion time, or {@code NO_DELETION_TIME} if the cell is neither
|
||||||
* a tombstone nor an expiring one.
|
* a tombstone nor an expiring one.
|
||||||
*/
|
*/
|
||||||
public abstract int localDeletionTime();
|
public long localDeletionTime()
|
||||||
|
{
|
||||||
|
return deletionTimeUnsignedIntegerToLong(localDeletionTimeAsUnsignedInt());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether the cell is a tombstone or not.
|
* Whether the cell is a tombstone or not.
|
||||||
|
|
@ -135,7 +168,7 @@ public abstract class Cell<V> extends ColumnData
|
||||||
* decide if an expiring cell is expired or live.
|
* decide if an expiring cell is expired or live.
|
||||||
* @return whether the cell is live or not at {@code nowInSec}.
|
* @return whether the cell is live or not at {@code nowInSec}.
|
||||||
*/
|
*/
|
||||||
public abstract boolean isLive(int nowInSec);
|
public abstract boolean isLive(long nowInSec);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For cells belonging to complex types (non-frozen collection and UDT), the
|
* For cells belonging to complex types (non-frozen collection and UDT), the
|
||||||
|
|
@ -149,7 +182,7 @@ public abstract class Cell<V> extends ColumnData
|
||||||
|
|
||||||
public abstract Cell<?> withUpdatedValue(ByteBuffer newValue);
|
public abstract Cell<?> withUpdatedValue(ByteBuffer newValue);
|
||||||
|
|
||||||
public abstract Cell<?> withUpdatedTimestampAndLocalDeletionTime(long newTimestamp, int newLocalDeletionTime);
|
public abstract Cell<?> withUpdatedTimestampAndLocalDeletionTime(long newTimestamp, long newLocalDeletionTime);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to apply the same optimization as in {@link Cell.Serializer#deserialize} when
|
* Used to apply the same optimization as in {@link Cell.Serializer#deserialize} when
|
||||||
|
|
@ -172,11 +205,13 @@ public abstract class Cell<V> extends ColumnData
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
// Overrides super type to provide a more precise return type.
|
// Overrides super type to provide a more precise return type.
|
||||||
public abstract Cell<?> purge(DeletionPurger purger, int nowInSec);
|
public abstract Cell<?> purge(DeletionPurger purger, long nowInSec);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
// Overrides super type to provide a more precise return type.
|
// Overrides super type to provide a more precise return type.
|
||||||
public abstract Cell<?> purgeDataOlderThan(long timestamp);
|
public abstract Cell<?> purgeDataOlderThan(long timestamp);
|
||||||
|
|
||||||
|
protected abstract int localDeletionTimeAsUnsignedInt();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The serialization format for cell is:
|
* The serialization format for cell is:
|
||||||
|
|
@ -255,7 +290,7 @@ public abstract class Cell<V> extends ColumnData
|
||||||
|
|
||||||
long timestamp = useRowTimestamp ? rowLiveness.timestamp() : header.readTimestamp(in);
|
long timestamp = useRowTimestamp ? rowLiveness.timestamp() : header.readTimestamp(in);
|
||||||
|
|
||||||
int localDeletionTime = useRowTTL
|
long localDeletionTime = useRowTTL
|
||||||
? rowLiveness.localExpirationTime()
|
? rowLiveness.localExpirationTime()
|
||||||
: (isDeleted || isExpiring ? header.readLocalDeletionTime(in) : NO_DELETION_TIME);
|
: (isDeleted || isExpiring ? header.readLocalDeletionTime(in) : NO_DELETION_TIME);
|
||||||
|
|
||||||
|
|
@ -282,6 +317,11 @@ public abstract class Cell<V> extends ColumnData
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (localDeletionTime < 0)
|
||||||
|
localDeletionTime = helper.version < MessagingService.VERSION_50
|
||||||
|
? INVALID_DELETION_TIME
|
||||||
|
: deletionTimeUnsignedIntegerToLong((int) localDeletionTime);
|
||||||
|
|
||||||
return accessor.factory().cell(column, timestamp, ttl, localDeletionTime, value, path);
|
return accessor.factory().cell(column, timestamp, ttl, localDeletionTime, value, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -83,8 +83,8 @@ public abstract class Cells
|
||||||
if (leftTimestamp != rightTimestamp)
|
if (leftTimestamp != rightTimestamp)
|
||||||
return leftTimestamp > rightTimestamp ? left : right;
|
return leftTimestamp > rightTimestamp ? left : right;
|
||||||
|
|
||||||
int leftLocalDeletionTime = left.localDeletionTime();
|
long leftLocalDeletionTime = left.localDeletionTime();
|
||||||
int rightLocalDeletionTime = right.localDeletionTime();
|
long rightLocalDeletionTime = right.localDeletionTime();
|
||||||
|
|
||||||
boolean leftIsExpiringOrTombstone = leftLocalDeletionTime != Cell.NO_DELETION_TIME;
|
boolean leftIsExpiringOrTombstone = leftLocalDeletionTime != Cell.NO_DELETION_TIME;
|
||||||
boolean rightIsExpiringOrTombstone = rightLocalDeletionTime != Cell.NO_DELETION_TIME;
|
boolean rightIsExpiringOrTombstone = rightLocalDeletionTime != Cell.NO_DELETION_TIME;
|
||||||
|
|
|
||||||
|
|
@ -287,7 +287,7 @@ public abstract class ColumnData implements IMeasurableMemory
|
||||||
|
|
||||||
public abstract ColumnData markCounterLocalToBeCleared();
|
public abstract ColumnData markCounterLocalToBeCleared();
|
||||||
|
|
||||||
public abstract ColumnData purge(DeletionPurger purger, int nowInSec);
|
public abstract ColumnData purge(DeletionPurger purger, long nowInSec);
|
||||||
public abstract ColumnData purgeDataOlderThan(long timestamp);
|
public abstract ColumnData purgeDataOlderThan(long timestamp);
|
||||||
|
|
||||||
public abstract long maxTimestamp();
|
public abstract long maxTimestamp();
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue