You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by mc...@apache.org on 2023/04/24 19:53:14 UTC

[cassandra-builds] branch trunk updated: Add JDK17 support, excluding trunk's (5.0) unit and jvm-dtest jobs which still have test failures

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

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


The following commit(s) were added to refs/heads/trunk by this push:
     new 7e20525  Add JDK17 support, excluding trunk's (5.0) unit and jvm-dtest jobs which still have test failures
7e20525 is described below

commit 7e205252a001b9316efe98da329d26e3b62c1df9
Author: Mick Semb Wever <mc...@apache.org>
AuthorDate: Mon Dec 5 15:13:02 2022 +0100

    Add JDK17 support, excluding trunk's (5.0) unit and jvm-dtest jobs which still have test failures
    
     - always pull images to be on latest
     - cqlshlib-test can no longer share a workspace
     - unset JAVAN_HOME env variables
     - don't dtest-jar build older versions when they don't support jdk11 (they won't be included anyway)
     - warn and continue on git clean failures
     - update finish_release.sh post-instructions to include having to update cassandra-dtest/upgrade_tests/upgrade_manifest.py
    
     patch by Mick Semb Wever; reviewed by Brandon Williams, Ekaterina Dimitrova for CASSANDRA-17869
---
 build-scripts/cassandra-artifacts.sh           |  16 +-
 build-scripts/cassandra-deb-packaging.sh       |   2 +-
 build-scripts/cassandra-dtest-pytest-docker.sh |  37 +++-
 build-scripts/cassandra-dtest-pytest.sh        |  33 +--
 build-scripts/cassandra-rpm-packaging.sh       |   2 +-
 build-scripts/cassandra-test-docker.sh         |  20 +-
 build-scripts/cassandra-test.sh                |  25 ++-
 cassandra-release/finish_release.sh            |   1 +
 docker/build-debs.sh                           |  14 +-
 docker/build-rpms.sh                           |  14 +-
 docker/centos7-image.docker                    |   3 +-
 jenkins-dsl/cassandra_job_dsl_seed.groovy      | 267 +++++++++++++------------
 12 files changed, 268 insertions(+), 166 deletions(-)

diff --git a/build-scripts/cassandra-artifacts.sh b/build-scripts/cassandra-artifacts.sh
index 6fa60c6..7a8e6b8 100755
--- a/build-scripts/cassandra-artifacts.sh
+++ b/build-scripts/cassandra-artifacts.sh
@@ -18,6 +18,8 @@ command -v docker >/dev/null 2>&1 || { echo >&2 "docker needs to be installed";
 [ -f "build.xml" ] || { echo >&2 "build.xml must exist"; exit 1; }
 [ -d "${cassandra_builds_dir}" ] || { echo >&2 "cassandra-builds directory must exist"; exit 1; }
 
+cassandra_version="$(grep 'property\s*name=\"base.version\"' build.xml |sed -ne 's/.*value=\"\([^"]*\)\".*/\1/p')"
+
 # print debug information on versions
 ant -version
 pip --version
@@ -38,11 +40,19 @@ python -m pip install "setuptools<45" Sphinx sphinx_rtd_theme
 
 # Setup JDK
 java_version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | awk -F. '{print $1}')
-if [ "$java_version" -ge 11 ]; then
+if [ "$java_version" -ge 17 ]; then
+    java_version="17"
+    java_version_supported=`grep 'property\s*name="java.supported"' build.xml |sed -ne 's/.*value="\([^"]*\)".*/\1/p'`
+    regx_java_version="(${java_version_supported//,/|})"
+    if [[ ! "17" =~ $regx_java_version ]]; then
+        echo "Invalid JDK17 not supported against ${cassandra_version}"
+        exit 1
+    fi
+elif [ "$java_version" -ge 11 ]; then
     java_version="11"
     export CASSANDRA_USE_JDK11=true
-    if ! grep -q CASSANDRA_USE_JDK11 build.xml ; then
-        echo "Skipping build. JDK11 not supported against $(grep 'property\s*name=\"base.version\"' build.xml |sed -ne 's/.*value=\"\([^"]*\)\".*/\1/p')"
+    if ! grep -q "java.version.11" build.xml ; then
+        echo "Skipping build. JDK11 not supported against ${cassandra_version}"
         exit 0
     fi
 else
diff --git a/build-scripts/cassandra-deb-packaging.sh b/build-scripts/cassandra-deb-packaging.sh
index 363133a..4ecf884 100755
--- a/build-scripts/cassandra-deb-packaging.sh
+++ b/build-scripts/cassandra-deb-packaging.sh
@@ -6,7 +6,7 @@
 
 if [ "$#" -lt 1 ]; then
    echo "$0 <branch|tag|sha> <java version>"
-   echo "if Java version is not set, it is set to 8 by default, choose from 8 or 11"
+   echo "if Java version is not set, it is set to 8 by default, choose from 8 or 11 or 17"
    exit 1
 fi
 
diff --git a/build-scripts/cassandra-dtest-pytest-docker.sh b/build-scripts/cassandra-dtest-pytest-docker.sh
index 3d40386..e321556 100755
--- a/build-scripts/cassandra-dtest-pytest-docker.sh
+++ b/build-scripts/cassandra-dtest-pytest-docker.sh
@@ -3,7 +3,7 @@
 # A wrapper script to cassandra-dtest-pytest.sh
 #  that runs it in docker, collecting results.
 #
-# The docker image used is normally based from those found in docker/testing/
+# The docker images used by default are found in docker/testing/
 #
 # Usage: cassandra-dtest-pytest-docker.sh REPO BRANCH DTEST_REPO_URL DTEST_BRANCH BUILDS_REPO_URL BUILDS_BRANCH DOCKER_IMAGE [target] [split_chunk]
 #
@@ -15,6 +15,21 @@ if [ "$#" -lt 3 ]; then
     export LC_CTYPE=en_US.UTF-8
     export PYTHONIOENCODING=utf-8
     export PYTHONUNBUFFERED=true
+    if [ "${JAVA_VERSION}" -ge 17 ] ; then
+        sudo update-java-alternatives --set java-1.17.0-openjdk-$(dpkg --print-architecture)
+        export JAVA_HOME=$(sudo update-java-alternatives -l | grep "java-1.17.0-openjdk" | awk '{print $3}')
+    elif [ "${JAVA_VERSION}" -ge 11 ] ; then
+        sudo update-java-alternatives --set java-1.11.0-openjdk-$(dpkg --print-architecture)
+        export JAVA_HOME=$(sudo update-java-alternatives -l | grep "java-1.11.0-openjdk" | awk '{print $3}')
+    fi
+
+    # TODO – remove when no longer set in docker images
+    unset JAVA8_HOME
+    unset JAVA11_HOME
+    unset JAVA17_HOME
+
+    java -version
+    javac -version
     echo "running: git clone --depth 1 --single-branch --branch=$BRANCH https://github.com/$REPO/cassandra.git"
     git clone --quiet --depth 1 --single-branch --branch=$BRANCH https://github.com/$REPO/cassandra.git
     cd cassandra
@@ -36,11 +51,27 @@ else
     DOCKER_IMAGE=$7
     TARGET=$8
     SPLIT_CHUNK=$9
+
+    # Setup JDK
+    java_version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | awk -F. '{print $1}')
+    if [ "$java_version" -ge 17 ]; then
+        java_version="17"
+    elif [ "$java_version" -ge 11 ]; then
+        java_version="11"
+        if ! grep -q "java.version.11" build.xml ; then
+            echo "Skipping build. JDK11 not supported against $(grep 'property\s*name=\"base.version\"' build.xml |sed -ne 's/.*value=\"\([^"]*\)\".*/\1/p')"
+            exit 0
+        fi
+    else
+        java_version="8"
+    fi
+
     cat > env.list <<EOF
 REPO=$1
 BRANCH=$2
 DTEST_REPO=$3
 DTEST_BRANCH=$4
+JAVA_VERSION=${java_version}
 EOF
 
     # pre-conditions
@@ -66,7 +97,7 @@ EOF
     [[ "$(docker images -q $DOCKER_IMAGE 2>/dev/null)" != "" ]] || docker pull -q $DOCKER_IMAGE
 
     echo "cassandra-dtest-pytest-docker.sh: running: git clone --single-branch --depth 1 --branch $BUILDSBRANCH $BUILDSREPO; sh ./cassandra-builds/build-scripts/cassandra-dtest-pytest-docker.sh $TARGET $SPLIT_CHUNK"
-    ID=$(docker run --cpus=${docker_cpus} -m 15g --memory-swap 15g --env-file env.list -dt $DOCKER_IMAGE dumb-init bash -ilc "git clone --quiet --single-branch --depth 1 --branch $BUILDSBRANCH $BUILDSREPO; sh ./cassandra-builds/build-scripts/cassandra-dtest-pytest-docker.sh $TARGET $SPLIT_CHUNK")
+    ID=$(docker run --pull=always --cpus=${docker_cpus} -m 15g --memory-swap 15g --env-file env.list -dt $DOCKER_IMAGE dumb-init bash -ilc "git clone --quiet --single-branch --depth 1 --branch $BUILDSBRANCH $BUILDSREPO; sh ./cassandra-builds/build-scripts/cassandra-dtest-pytest-docker.sh $TARGET $SPLIT_CHUNK")
 
     # use docker attach instead of docker wait to get output
     docker attach --no-stdin $ID
@@ -82,7 +113,7 @@ EOF
         echo "–––"
         docker info
         echo "–––"
-        dmesg
+        dmesg || sudo dmesg || echo "warn: couldn't dmesg"
     else
         echo "$ID done (${status}), copying files"
         # dtest.sh meta
diff --git a/build-scripts/cassandra-dtest-pytest.sh b/build-scripts/cassandra-dtest-pytest.sh
index 27a8c9e..194b0a5 100755
--- a/build-scripts/cassandra-dtest-pytest.sh
+++ b/build-scripts/cassandra-dtest-pytest.sh
@@ -24,19 +24,33 @@ export CASSANDRA_DIR=${WORKSPACE}
 export CASSANDRA_SKIP_SYNC=true
 export TMPDIR="./tmp"
 
-# set JAVA_HOME environment to enable multi-version jar files for >4.0
-# both JAVA8/11_HOME env variables must exist
-grep -q _build_multi_java $CASSANDRA_DIR/build.xml
-if [ $? -eq 0 -a -n "$JAVA8_HOME" -a -n "$JAVA11_HOME" ]; then
-   export JAVA_HOME="$JAVA11_HOME"
-fi
-
 # pre-conditions
 command -v ant >/dev/null 2>&1 || { echo >&2 "ant needs to be installed"; exit 1; }
 command -v pip3 >/dev/null 2>&1 || { echo >&2 "pip3 needs to be installed"; exit 1; }
 command -v virtualenv >/dev/null 2>&1 || { echo >&2 "virtualenv needs to be installed"; exit 1; }
 
+java_version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | awk -F. '{print $1}')
+version=$(grep 'property\s*name=\"base.version\"' build.xml |sed -ne 's/.*value=\"\([^"]*\)\".*/\1/p')
+
+if [ "$java_version" -ge 17 ]; then
+  if [[ "${target}" == "dtest-upgrade" ]] ; then
+    echo "Invalid JDK17 execution. Only the oldest overlapping supported JDK can be used when upgrading."
+    exit 1
+  fi
+elif [ "$java_version" -ge 11 ]; then
+  export CASSANDRA_USE_JDK11=true
+  regx_version="(2.2|3.0|3.11|4.0|4.1)(.([0-9]+))?$"
+  if ! grep -q "java.version.11" build.xml ; then
+    echo "Skipping ${target}. JDK11 not supported against ${version}"
+    exit 0
+  elif [[ "${target}" == "dtest-upgrade"  ]] && [[ $version =~ $regx_version ]] ; then
+    echo "Skipping JDK11 execution. Only the oldest overlapping supported JDK can be used when upgrading."
+    exit 0
+  fi
+fi
+
 # print debug information on versions
+java -version
 ant -version
 pip3 --version
 virtualenv --version
@@ -56,11 +70,6 @@ if [ "${RETURN}" -ne "0" ]; then
     exit ${RETURN}
 fi
 
-# restore JAVA_HOME to Java 8 version we intent to run tests with
-if [ -n "$JAVA8_HOME" ]; then
-   export JAVA_HOME="$JAVA8_HOME"
-fi
-
 # Set up venv with dtest dependencies
 set -e # enable immediate exit if venv setup fails
 virtualenv --python=python3.8 venv
diff --git a/build-scripts/cassandra-rpm-packaging.sh b/build-scripts/cassandra-rpm-packaging.sh
index ca5e26a..3ed2255 100755
--- a/build-scripts/cassandra-rpm-packaging.sh
+++ b/build-scripts/cassandra-rpm-packaging.sh
@@ -6,7 +6,7 @@
 
 if [ "$#" -lt 1 ]; then
    echo "$0 <branch|tag|sha> <java version> [dist type]"
-   echo "if Java version is not set, it is set to 8 by default, choose from 8 or 11"
+   echo "if Java version is not set, it is set to 8 by default, choose from 8 or 11 or 17"
    echo "dist types are [rpm, noboolean] and rpm is default"
    exit 1
 fi
diff --git a/build-scripts/cassandra-test-docker.sh b/build-scripts/cassandra-test-docker.sh
index 6070c41..d60ebfb 100755
--- a/build-scripts/cassandra-test-docker.sh
+++ b/build-scripts/cassandra-test-docker.sh
@@ -15,11 +15,19 @@ if [ "$#" -lt 3 ]; then
     export LC_CTYPE=en_US.UTF-8
     export PYTHONIOENCODING=utf-8
     export PYTHONUNBUFFERED=true
-    if [ "${JAVA_VERSION}" -ge 11 ] ; then
+    if [ "${JAVA_VERSION}" -ge 17 ] ; then
+        sudo update-java-alternatives --set java-1.17.0-openjdk-$(dpkg --print-architecture)
+        export JAVA_HOME=$(sudo update-java-alternatives -l | grep "java-1.17.0-openjdk" | awk '{print $3}')
+    elif [ "${JAVA_VERSION}" -ge 11 ] ; then
         sudo update-java-alternatives --set java-1.11.0-openjdk-$(dpkg --print-architecture)
-        export CASSANDRA_USE_JDK11=true
         export JAVA_HOME=$(sudo update-java-alternatives -l | grep "java-1.11.0-openjdk" | awk '{print $3}')
     fi
+
+    # TODO – remove when no longer set in docker images
+    unset JAVA8_HOME
+    unset JAVA11_HOME
+    unset JAVA17_HOME
+
     java -version
     javac -version
     echo "running: git clone --quiet --depth 1 --single-branch --branch=$BRANCH https://github.com/$REPO/cassandra.git"
@@ -51,9 +59,11 @@ else
 
     # Setup JDK
     java_version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | awk -F. '{print $1}')
-    if [ "$java_version" -ge 11 ]; then
+    if [ "$java_version" -ge 17 ]; then
+        java_version="17"
+    elif [ "$java_version" -ge 11 ]; then
         java_version="11"
-        if ! grep -q CASSANDRA_USE_JDK11 build.xml ; then
+        if ! grep -q "java.version.11" build.xml ; then
             echo "Skipping build. JDK11 not supported against $(grep 'property\s*name=\"base.version\"' build.xml |sed -ne 's/.*value=\"\([^"]*\)\".*/\1/p')"
             exit 0
         fi
@@ -105,7 +115,7 @@ EOF
     INNER_SPLITS=$(( $(echo $SPLIT_CHUNK | cut -d"/" -f2 ) * $docker_runs ))
     INNER_SPLIT_FIRST=$(( ( $(echo $SPLIT_CHUNK | cut -d"/" -f1 ) * $docker_runs ) - ( $docker_runs - 1 ) ))
     docker_cpus=$(echo "scale=2; ${cores} / ( ${jenkins_executors} * ${docker_runs} )" | bc)
-    docker_flags="--cpus=${docker_cpus} -m 5g --memory-swap 5g --env-file env.list -dt"
+    docker_flags="--pull=always --cpus=${docker_cpus} -m 5g --memory-swap 5g --env-file env.list -dt"
 
     # hack: long-test does not handle limited CPUs
     if [ "$TARGET" == "long-test" ] ; then
diff --git a/build-scripts/cassandra-test.sh b/build-scripts/cassandra-test.sh
index eac7274..e12ec43 100755
--- a/build-scripts/cassandra-test.sh
+++ b/build-scripts/cassandra-test.sh
@@ -34,15 +34,20 @@ _timeout_for() {
 }
 
 _build_all_dtest_jars() {
+    local -r java_version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | awk -F. '{print $1}')
     mkdir -p build
     cd $TMP_DIR
     until git clone --quiet --depth 1 --no-single-branch https://github.com/apache/cassandra.git cassandra-dtest-jars ; do echo "git clone failed… trying again… " ; done
     cd cassandra-dtest-jars
     for branch in cassandra-2.2 cassandra-3.0 cassandra-3.11 cassandra-4.0 cassandra-4.1 trunk; do
         git checkout $branch
-        ant realclean
-        ant jar dtest-jar
-        cp build/dtest*.jar ../../build/
+        if [ "$java_version" -eq 11 ] && ! grep -q "java.version.11" build.xml ; then
+            echo "Skipping dtest-jar jdk11 build  of ${branch}."
+        else
+            ant realclean
+            ant jar dtest-jar
+            cp build/dtest*.jar ../../build/
+        fi
     done
     cd ../..
     rm -fR ${TMP_DIR}/cassandra-dtest-jars
@@ -73,13 +78,19 @@ _main() {
   local -r java_version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | awk -F. '{print $1}')
   local -r version=$(grep 'property\s*name=\"base.version\"' build.xml |sed -ne 's/.*value=\"\([^"]*\)\".*/\1/p')
 
-  if [ "$java_version" -ge 11 ]; then
+  if [ "$java_version" -ge 17 ]; then
+    if [[ "${target}" == "jvm-dtest-upgrade" ]] ; then
+        echo "Invalid JDK17 execution. Only the oldest overlapping supported JDK can be used when upgrading."
+        exit 1
+    fi
+  elif [ "$java_version" -ge 11 ]; then
     export CASSANDRA_USE_JDK11=true
-    if ! grep -q CASSANDRA_USE_JDK11 build.xml ; then
+    regx_version="(2.2|3.0|3.11|4.0|4.1)(.([0-9]+))?$"
+    if ! grep -q "java.version.11" build.xml ; then
         echo "Skipping ${target}. JDK11 not supported against ${version}"
         exit 0
-    elif [[ "${target}" == "jvm-dtest-upgrade" ]] ; then
-        echo "Skipping JDK11 execution. Mixed JDK compilation required for ${target}"
+    elif [[ "${target}" == "jvm-dtest-upgrade"  ]] && [[ $version =~ $regx_version ]] ; then
+        echo "Skipping JDK11 execution. Only the oldest overlapping supported JDK can be used when upgrading."
         exit 0
     fi
   fi
diff --git a/cassandra-release/finish_release.sh b/cassandra-release/finish_release.sh
index d6aa4f5..2fce5d9 100755
--- a/cassandra-release/finish_release.sh
+++ b/cassandra-release/finish_release.sh
@@ -280,3 +280,4 @@ echo ' 9) release version in JIRA'
 echo ' 10) remove old version (eg: `svn rm https://dist.apache.org/repos/dist/release/cassandra/<previous_version>`)'
 echo ' 11) increment build.xml base.version for the next release'
 echo ' 12) follow instructions in email you will receive from the \"Apache Reporter Service\" to update the project`s list of releases in reporter.apache.org'
+echo ' 13) update current_ version in cassandra-dtest/upgrade_tests/upgrade_manifest.py'
diff --git a/docker/build-debs.sh b/docker/build-debs.sh
index 3bbe892..474bfb2 100755
--- a/docker/build-debs.sh
+++ b/docker/build-debs.sh
@@ -4,7 +4,7 @@ set -e
 
 if [ "$#" -lt 1 ]; then
    echo "$0 <branch|tag|sha> <java version>"
-   echo "if Java version is not set, it is set to 8 by default, choose from 8 or 11"
+   echo "if Java version is not set, it is set to 8 by default, choose from 8 or 11 or 17"
    exit 1
 fi
 
@@ -13,6 +13,9 @@ fi
 [ "x${CASSANDRA_DIR}" != "x" ] || { echo >&2 "CASSANDRA_DIR needs to be defined"; exit 1; }
 [ -d "${CASSANDRA_DIR}" ] || { echo >&2 "Directory ${CASSANDRA_DIR} must exist"; exit 1; }
 
+cassandra_version="$(grep 'property\s*name=\"base.version\"' \"${CASSANDRA_DIR}/build.xml\" |sed -ne 's/.*value=\"\([^"]*\)\".*/\1/p')"
+
+
 CASSANDRA_SHA=$1
 JAVA_VERSION=$2
 
@@ -20,10 +23,10 @@ if [ "$JAVA_VERSION" = "" ]; then
     JAVA_VERSION=8
 fi
 
-regx_java_version="(8|11)"
+regx_java_version="(8|11|17)"
 
 if [[ ! "$JAVA_VERSION" =~ $regx_java_version ]]; then
-   echo "Error: Java version is not set to 8 nor 11, it is set to $JAVA_VERSION"
+   echo "Error: Java version is not set to 8, 11 nor 17, it is set to $JAVA_VERSION"
    exit 1
 fi
 
@@ -104,7 +107,10 @@ if [ $buildxml_version != $git_version ]; then
    echo "Warning: build.xml version ($buildxml_version) not matching git/dpkg derived version ($git_version)">&2
 fi
 
-if [ $JAVA_VERSION = "11" ]; then
+if [ $JAVA_VERSION = "17" ]; then
+   sudo update-java-alternatives --set java-1.17.0-openjdk-$(dpkg --print-architecture)
+   echo "Cassandra will be built with Java 17"
+elif [ $JAVA_VERSION = "11" ]; then
    sudo update-java-alternatives --set java-1.11.0-openjdk-$(dpkg --print-architecture)
    export CASSANDRA_USE_JDK11=true
    echo "Cassandra will be built with Java 11"
diff --git a/docker/build-rpms.sh b/docker/build-rpms.sh
index 651a7e4..5d15dd0 100755
--- a/docker/build-rpms.sh
+++ b/docker/build-rpms.sh
@@ -4,7 +4,7 @@ set -e
 
 if [ "$#" -lt 1 ]; then
    echo "$0 <branch|tag|sha> <java version> [dist type]"
-   echo "if Java version is not set, it is set to 8 by default, choose from 8 or 11"
+   echo "if Java version is not set, it is set to 8 by default, choose from 8 or 11 or 17"
    exit 1
 fi
 
@@ -15,6 +15,8 @@ fi
 [ "x${CASSANDRA_DIR}" != "x" ] || { echo >&2 "CASSANDRA_DIR needs to be defined"; exit 1; }
 [ -d "${CASSANDRA_DIR}" ] || { echo >&2 "Directory ${CASSANDRA_DIR} must exist"; exit 1; }
 
+cassandra_version="$(grep 'property\s*name=\"base.version\"' \"${CASSANDRA_DIR}/build.xml\" |sed -ne 's/.*value=\"\([^"]*\)\".*/\1/p')"
+
 CASSANDRA_SHA=$1
 JAVA_VERSION=$2
 RPM_DIST=$3
@@ -31,10 +33,10 @@ else # noboolean
     RPM_SPEC="redhat/noboolean/cassandra.spec"
 fi
 
-regx_java_version="(8|11)"
+regx_java_version="(8|11|17)"
 
 if [[ ! "$JAVA_VERSION" =~ $regx_java_version ]]; then
-   echo "Error: Java version is not set to 8 nor 11, it is set to $JAVA_VERSION"
+   echo "Error: Java version is not set to 8, 11 nor 17, it is set to $JAVA_VERSION"
    exit 1
 fi
 
@@ -89,7 +91,11 @@ else
    CASSANDRA_REVISION="${dt}git${ref}"
 fi
 
-if [ $JAVA_VERSION = "11" ]; then
+if [ $JAVA_VERSION = "17" ]; then
+   sudo alternatives --set java $(alternatives --display java | grep 'family java-17-openjdk' | cut -d' ' -f1)
+   sudo alternatives --set javac $(alternatives --display javac | grep 'family java-17-openjdk' | cut -d' ' -f1)
+   echo "Cassandra will be built with Java 17"
+elif [ $JAVA_VERSION = "11" ]; then
    sudo alternatives --set java $(alternatives --display java | grep 'family java-11-openjdk' | cut -d' ' -f1)
    sudo alternatives --set javac $(alternatives --display javac | grep 'family java-11-openjdk' | cut -d' ' -f1)
    export CASSANDRA_USE_JDK11=true
diff --git a/docker/centos7-image.docker b/docker/centos7-image.docker
index a2dbe9e..6041e6e 100644
--- a/docker/centos7-image.docker
+++ b/docker/centos7-image.docker
@@ -47,7 +47,8 @@ RUN until curl -f -S -s --retry 9 --retry-delay 1 https://download.java.net/java
 RUN tar xvf openjdk-17.0.2_linux-x64_bin.tar.gz
 RUN mv jdk-17.0.2 /opt/jdk-17
 
-
+RUN alternatives --install /usr/bin/java java /opt/jdk-17/bin/java 2 --family java-17-openjdk
+RUN alternatives --install /usr/bin/javac javac /opt/jdk-17/bin/javac 2 --family java-17-openjdk
 
 RUN pip3 install --upgrade pip
 
diff --git a/jenkins-dsl/cassandra_job_dsl_seed.groovy b/jenkins-dsl/cassandra_job_dsl_seed.groovy
index 079f438..a0b5b72 100644
--- a/jenkins-dsl/cassandra_job_dsl_seed.groovy
+++ b/jenkins-dsl/cassandra_job_dsl_seed.groovy
@@ -17,11 +17,6 @@ def jobDescription = '''
 <p>A basic mirror of all build summary pages (classic and blue ocean ui) is found here <a href="https://nightlies.apache.org/cassandra/ci-cassandra.apache.org/">here</a></p>
                     '''
 
-def jdkLabel = 'jdk_1.8_latest'
-if(binding.hasVariable("CASSANDRA_JDK_LABEL")) {
-    jdkLabel = "${CASSANDRA_JDK_LABEL}"
-}
-
 // architectures. blank is amd64
 def archs = ['', '-arm64']
 arm64_enabled = true
@@ -84,10 +79,52 @@ def testSplits = 8
 def dtestSplits = 64
 def dtestLargeSplits = 8
 
+def exists(branchName, targetName) {
+    switch (targetName) {
+        case 'artifact':
+            // migrated to in-pipeline stages
+            return true; // TODO CASSANDRA-18133 // return !(branchName = 'trunk' || branchName ==~ /cassandra-5.\d+/)
+        case 'test-cdc':
+        case 'stress-test':
+            // did not exist before 3.11
+            return !(branchName == 'cassandra-2.2' || branchName == 'cassandra-3.0')
+        case 'fqltool-test':
+            // did not exist before 4.0
+            return !(branchName ==~ /cassandra-[2-3].\d+/)
+        case 'cqlsh-tests':
+            // did not exist before 3.0
+            return branchName != 'cassandra-2.2'
+        case 'dtest-offheap':
+            // offheap was removed from 3.0 to 3.11
+            return branchName != 'cassandra-3.0'
+    }
+    return true
+}
+
 def isSplittableTest(targetName) {
     return targetName == 'test' || targetName == 'test-cdc' || targetName == 'test-compression' || targetName == 'test-burn' || targetName == 'long-test' || targetName == 'jvm-dtest' || targetName == 'jvm-dtest-upgrade';
 }
 
+def jdks(branchName, targetName) {
+    if (branchName == 'trunk' || branchName ==~ /cassandra-5.\d+/) {
+        if (targetName == 'test' || targetName == 'jvm-dtest') {
+            // todo – remove when jdk17 failures in unit and jvm-dtest are fixed
+            return ['jdk_1.8_latest','jdk_11_latest']
+        } else if (!targetName.endsWith('dtest-upgrade')) {
+            //return ['jdk_11_latest', 'jdk_17_latest'] // CASSANDRA-18255
+            return ['jdk_1.8_latest','jdk_11_latest', 'jdk_17_latest']
+        } else {
+            // upgrade tests need an overlapping jdk
+            return ['jdk_11_latest']
+        }
+    } else if ((branchName ==~ /cassandra-[4].\d+/) && !targetName.endsWith('dtest-upgrade')) {
+        return ['jdk_1.8_latest','jdk_11_latest']
+    } else {
+        // upgrade tests need an overlapping jdk
+        return ['jdk_1.8_latest']
+    }
+}
+
 ////////////////////////////////////////////////////////////
 //
 // Job Templates
@@ -144,7 +181,7 @@ matrixJob('Cassandra-template-artifacts') {
     steps {
         buildDescription('', buildDescStr)
         shell("""
-                git clean -xdff ;
+                git clean -xdff  || echo "failed to clean… continuing…";
                 git clone --depth 1 --single-branch -b ${buildsBranch} ${buildsRepo} ;
                 echo "cassandra-builds at: `git -C cassandra-builds log -1 --pretty=format:'%H %an %ad %s'`" ;
               """)
@@ -221,7 +258,7 @@ matrixJob('Cassandra-template-test') {
     steps {
         buildDescription('', buildDescStr)
         shell("""
-                git clean -xdff -e build/test/jmh-result.json ;
+                git clean -xdff -e build/test/jmh-result.json  || echo "failed to clean… continuing…";
                 git clone --depth 1 --single-branch -b ${buildsBranch} ${buildsRepo} ;
                 echo "cassandra-builds at: `git -C cassandra-builds log -1 --pretty=format:'%H %an %ad %s'`" ;
                 echo "\${BUILD_TAG}) cassandra: `git log -1 --pretty=format:'%H %an %ad %s'`" > \${BUILD_TAG}.head
@@ -283,7 +320,7 @@ matrixJob('Cassandra-template-dtest-matrix') {
     steps {
         buildDescription('', buildDescStr)
         shell("""
-                git clean -xdff ;
+                git clean -xdff  || echo "failed to clean… continuing…";
                 git clone --depth 1 --single-branch -b ${buildsBranch} ${buildsRepo} ;
                 echo "cassandra-builds at: `git -C cassandra-builds log -1 --pretty=format:'%H %an %ad %s'`" ;
                 echo "\${BUILD_TAG}) cassandra: `git log -1 --pretty=format:'%H %an %ad %s'`" > \${BUILD_TAG}.head ;
@@ -310,17 +347,6 @@ matrixJob('Cassandra-template-cqlsh-tests') {
         }
         timestamps()
     }
-    axes {
-        text('cython', 'yes', 'no')
-        jdk(jdkLabel)
-        if (use_arm64_test_label()) {
-            label('label', slaveLabel, slaveArm64Label)
-        } else {
-            label('label', slaveLabel)
-        }
-    }
-    // this should prevent long path expansion from the axis definitions
-    childCustomWorkspace('.')
     properties {
         githubProjectUrl(githubRepo)
         priorityJobProperty {
@@ -349,7 +375,7 @@ matrixJob('Cassandra-template-cqlsh-tests') {
     steps {
         buildDescription('', buildDescStr)
         shell("""
-                git clean -xdff ;
+                git clean -xdff  || echo "failed to clean… continuing…";
                 git clone --depth 1 --single-branch -b ${buildsBranch} ${buildsRepo} ;
                 echo "cassandra-builds at: `git -C cassandra-builds log -1 --pretty=format:'%H %an %ad %s'`" ;
                 echo "\${BUILD_TAG}) cassandra: `git log -1 --pretty=format:'%H %an %ad %s'`" > \${BUILD_TAG}.head
@@ -370,72 +396,70 @@ cassandraBranches.each {
     def branchName = it
     def jobNamePrefix = "Cassandra-${branchName}".replaceAll('cassandra-', '')
 
-    /**
-     * Main branch artifacts and eclipse-warnings job
-     */
-    matrixJob("${jobNamePrefix}-artifacts") {
-        disabled(false)
-        using('Cassandra-template-artifacts')
-        axes {
-            if (!(branchName ==~ /cassandra-[2-3].\d+/)) {
-                jdk('jdk_1.8_latest','jdk_11_latest')
-            } else {
-                jdk('jdk_1.8_latest')
+    if (exists(branchName, 'artifacts')) {
+        /**
+         * Main branch artifacts and eclipse-warnings job
+         */
+        matrixJob("${jobNamePrefix}-artifacts") {
+            disabled(false)
+            using('Cassandra-template-artifacts')
+            axes {
+                jdk(jdks(branchName, 'artifacts'))
+                if (arm64_enabled) {
+                    label('label', slaveLabel, slaveArm64Label)
+                } else {
+                    label('label', slaveLabel)
+                }
             }
-            if (arm64_enabled) {
-                label('label', slaveLabel, slaveArm64Label)
-            } else {
-                label('label', slaveLabel)
+            configure { node ->
+                node / scm / branches / 'hudson.plugins.git.BranchSpec' / name(branchName)
             }
-        }
-        configure { node ->
-            node / scm / branches / 'hudson.plugins.git.BranchSpec' / name(branchName)
-        }
-        steps {
-            shell("""
-                    ./cassandra-builds/build-scripts/cassandra-artifacts.sh ;
-                    wget --retry-connrefused --waitretry=1 "\${BUILD_URL}/timestamps/?time=HH:mm:ss&timeZone=UTC&appendLog" -qO - > console.log || echo wget failed ;
-                    xz console.log
-                  """)
-        }
-        publishers {
-            publishOverSsh {
-                server('Nightlies') {
-                    transferSet {
-                        sourceFiles("console.log.xz, build/apache-cassandra-*.tar.gz, build/apache-cassandra-*.jar, build/apache-cassandra-*.pom, build/cassandra*.deb, build/cassandra*.rpm")
-                        remoteDirectory("cassandra/${branchName}/${jobNamePrefix}-artifacts/\${BUILD_NUMBER}/\${JOB_NAME}/")
+            steps {
+                shell("""
+                        ./cassandra-builds/build-scripts/cassandra-artifacts.sh ;
+                        wget --retry-connrefused --waitretry=1 "\${BUILD_URL}/timestamps/?time=HH:mm:ss&timeZone=UTC&appendLog" -qO - > console.log || echo wget failed ;
+                        xz -f console.log
+                      """)
+            }
+            publishers {
+                publishOverSsh {
+                    server('Nightlies') {
+                        transferSet {
+                            sourceFiles("console.log.xz, build/apache-cassandra-*.tar.gz, build/apache-cassandra-*.jar, build/apache-cassandra-*.pom, build/cassandra*.deb, build/cassandra*.rpm")
+                            remoteDirectory("cassandra/${branchName}/${jobNamePrefix}-artifacts/\${BUILD_NUMBER}/\${JOB_NAME}/")
+                        }
+                        retry(9, 5000)
                     }
-                    retry(9, 5000)
+                    failOnError(false)
                 }
-                failOnError(false)
-            }
-            matrixPostBuildScript {
-              buildSteps {
-                markBuildUnstable(false)
-                postBuildStep {
-                    executeOn('BOTH')
-                    stopOnFailure(false)
-                    results(['SUCCESS','UNSTABLE','FAILURE','NOT_BUILT','ABORTED'])
-                    buildSteps {
-                      shell {
-                        // docker needs to (soon or later) prune its volumes too, but that can only be done when the agent is idle
-                        // if the agent is busy, just prune everything that is older than maxJobHours
-                        command("""
-                            echo "Cleaning project…"; git clean -xdff ;
-                            echo "Cleaning processes…" ;
-                            if ! pgrep -af "cassandra-builds/build-scripts" ; then pkill -9 -f org.apache.cassandra. || echo "already clean" ; fi ;
-                            echo "Pruning docker…" ;
-                            if pgrep -af "cassandra-builds/build-scripts" ; then docker system prune --all --force --filter "until=${maxJobHours}h" || true ; else  docker system prune --all --force --volumes || true ;  fi;
-                            echo "Reporting disk usage…"; df -h ;
-                            echo "Cleaning tmp…";
-                            find . -type d -name tmp -delete 2>/dev/null ;
-                            find /tmp -type f -atime +2 -user jenkins -and -not -exec fuser -s {} ';' -and -delete 2>/dev/null || echo clean tmp failed ;
-                            echo "For test report and logs see https://nightlies.apache.org/cassandra/${branchName}/${jobNamePrefix}-artifacts/\${BUILD_NUMBER}/\${JOB_NAME}/"
-                        """)
-                      }
+                matrixPostBuildScript {
+                  buildSteps {
+                    markBuildUnstable(false)
+                    postBuildStep {
+                        executeOn('BOTH')
+                        stopOnFailure(false)
+                        results(['SUCCESS','UNSTABLE','FAILURE','NOT_BUILT','ABORTED'])
+                        buildSteps {
+                          shell {
+                            // docker needs to (soon or later) prune its volumes too, but that can only be done when the agent is idle
+                            // if the agent is busy, just prune everything that is older than maxJobHours
+                            command("""
+                                echo "Cleaning project…"; git clean -xdff  || echo "failed to clean… continuing…";
+                                echo "Cleaning processes…" ;
+                                if ! ( pgrep -xa docker || pgrep -af "cassandra-builds/build-scripts" ) ; then pkill -9 -f org.apache.cassandra. || echo "already clean" ; fi ;
+                                echo "Pruning docker…" ;
+                                if pgrep -xa docker || pgrep -af "cassandra-builds/build-scripts" ; then docker system prune --all --force --filter "until=${maxJobHours}h" || true ; else  docker system prune --all --force --volumes || true ;  fi;
+                                echo "Reporting disk usage…"; df -h ;
+                                echo "Cleaning tmp…";
+                                find . -type d -name tmp -delete 2>/dev/null ;
+                                find /tmp -type f -atime +2 -user jenkins -and -not -exec fuser -s {} ';' -and -delete 2>/dev/null || echo clean tmp failed ;
+                                echo "For test report and logs see https://nightlies.apache.org/cassandra/${branchName}/${jobNamePrefix}-artifacts/\${BUILD_NUMBER}/\${JOB_NAME}/"
+                            """)
+                          }
+                        }
                     }
+                  }
                 }
-              }
             }
         }
     }
@@ -446,15 +470,7 @@ cassandraBranches.each {
     testTargets.each {
         def targetName = it
 
-        // Skip tests that don't exist before cassandra-3.11
-        if ((targetName == 'test-cdc' || targetName == 'stress-test') && ((branchName == 'cassandra-2.2') || (branchName == 'cassandra-3.0'))) {
-            println("Skipping ${targetName} on branch ${branchName}")
-
-            // Skip tests that don't exist before cassandra-4.0
-        } else if (targetName == 'fqltool-test' && branchName ==~ /cassandra-[2-3].\d+/) {
-            println("Skipping ${targetName} on branch ${branchName}")
-
-        } else {
+        if (exists(branchName, targetName)) {
             matrixJob("${jobNamePrefix}-${targetName}") {
                 disabled(false)
                 using('Cassandra-template-test')
@@ -466,12 +482,7 @@ cassandraBranches.each {
                         text('split', values)
                         _testSplits = "/${testSplits}"
                     }
-                    // jvm-dtest-upgrade would require mixed JDK compilations to support JDK11+
-                    if ((!(branchName ==~ /cassandra-[2-3].\d+/)) && targetName != 'jvm-dtest-upgrade') {
-                        jdk(jdkLabel,'jdk_11_latest')
-                    } else {
-                        jdk(jdkLabel)
-                    }
+                    jdk(jdks(branchName, targetName))
                     if (use_arm64_test_label()) {
                         label('label', slaveLabel, slaveArm64Label)
                     } else {
@@ -487,7 +498,7 @@ cassandraBranches.each {
                             ./cassandra-builds/build-scripts/cassandra-test-report.sh ;
                             xz TESTS-TestSuites.xml ;
                             wget --retry-connrefused --waitretry=1 "\${BUILD_URL}/timestamps/?time=HH:mm:ss&timeZone=UTC&appendLog" -qO - > console.log || echo wget failed ;
-                            xz console.log
+                            xz -f console.log
                           """)
                 }
                 publishers {
@@ -527,11 +538,11 @@ cassandraBranches.each {
                                   // docker needs to (soon or later) prune its volumes too, but that can only be done when the agent is idle
                                   // if the agent is busy, just prune everything that is older than maxJobHours
                                   command("""
-                                      echo "Cleaning project…"; git clean -xdff -e build/test/jmh-result.json ;
+                                      echo "Cleaning project…"; git clean -xdff -e build/test/jmh-result.json || echo "failed to clean… continuing…" ;
                                       echo "Cleaning processes…" ;
-                                      if ! pgrep -af "cassandra-builds/build-scripts" ; then pkill -9 -f org.apache.cassandra. || echo "already clean" ; fi ;
+                                        if ! ( pgrep -xa docker || pgrep -af "cassandra-builds/build-scripts" ) ; then pkill -9 -f org.apache.cassandra. || echo "already clean" ; fi ;
                                       echo "Pruning docker…" ;
-                                      if pgrep -af "cassandra-builds/build-scripts" ; then docker system prune --all --force --filter "until=${maxJobHours}h" || true ; else  docker system prune --all --force --volumes || true ;  fi;
+                                      if pgrep -xa docker || pgrep -af "cassandra-builds/build-scripts" ; then docker system prune --all --force --filter "until=${maxJobHours}h" || true ; else  docker system prune --all --force --volumes || true ;  fi;
                                       echo "Reporting disk usage…"; du -xm / 2>/dev/null | sort -rn | head -n 30 ; df -h ;
                                       echo "Cleaning tmp…";
                                       find . -type d -name tmp -delete 2>/dev/null ;
@@ -558,14 +569,12 @@ cassandraBranches.each {
             def targetName = it
             def targetArchName = targetName + arch
 
-            // Skip dtest-offheap on cassandra-3.0 branch
-            if ((targetName == 'dtest-offheap') && (branchName == 'cassandra-3.0')) {
-                println("Skipping ${targetArchName} on branch ${branchName}")
-            } else {
+            if (exists(branchName, targetName)) {
                 matrixJob("${jobNamePrefix}-${targetArchName}") {
                     disabled(false)
                     using('Cassandra-template-dtest-matrix')
                     axes {
+                        jdk(jdks(branchName, targetName))
                         List<String> values = new ArrayList<String>()
                         if (targetName == 'dtest-large' || targetName == 'dtest-large-novnode') {
                             splits = dtestLargeSplits
@@ -595,7 +604,7 @@ cassandraBranches.each {
                         shell("""
                             ./cassandra-builds/build-scripts/cassandra-dtest-pytest-docker.sh apache ${branchName} https://github.com/apache/cassandra-dtest.git trunk ${buildsRepo} ${buildsBranch} ${dtestDockerImage} ${targetName} \${split}/${splits} ;
                             wget --retry-connrefused --waitretry=1 "\${BUILD_URL}/timestamps/?time=HH:mm:ss&timeZone=UTC&appendLog" -qO - > console.log || echo wget failed ;
-                            xz console.log
+                            xz -f console.log
                             """)
                     }
                     publishers {
@@ -631,11 +640,11 @@ cassandraBranches.each {
                                     // docker needs to (soon or later) prune its volumes too, but that can only be done when the agent is idle
                                     // if the agent is busy, just prune everything that is older than maxJobHours
                                     command("""
-                                        echo "Cleaning project…"; git clean -xdff ;
+                                        echo "Cleaning project…"; git clean -xdff || echo "failed to clean… continuing…";
                                         echo "Cleaning processes…" ;
-                                        if ! pgrep -af "cassandra-builds/build-scripts" ; then pkill -9 -f org.apache.cassandra. || echo "already clean" ; fi ;
+                                        if ! ( pgrep -xa docker || pgrep -af "cassandra-builds/build-scripts" ) ; then pkill -9 -f org.apache.cassandra. || echo "already clean" ; fi ;
                                         echo "Pruning docker…" ;
-                                        if pgrep -af "cassandra-builds/build-scripts" ; then docker system prune --all --force --filter "until=${maxJobHours}h" || true ; else  docker system prune --all --force --volumes || true ;  fi;
+                                        if pgrep -xa docker || pgrep -af "cassandra-builds/build-scripts" ; then docker system prune --all --force --filter "until=${maxJobHours}h" || true ; else  docker system prune --all --force --volumes || true ;  fi;
                                         echo "Reporting disk usage…"; df -h ;
                                         echo "Cleaning tmp…";
                                         find . -type d -name tmp -delete 2>/dev/null ;
@@ -657,15 +666,22 @@ cassandraBranches.each {
     /**
      * Main branch cqlsh jobs
      */
-    if (branchName == 'cassandra-2.2') {
-        println("Skipping ${jobNamePrefix}-cqlsh-tests, not supported on branch ${branchName}")
-    } else {
+    if (exists(branchName, 'cqlsh-tests')) {
         matrixJob("${jobNamePrefix}-cqlsh-tests") {
             disabled(false)
             using('Cassandra-template-cqlsh-tests')
             configure { node ->
                 node / scm / branches / 'hudson.plugins.git.BranchSpec' / name(branchName)
             }
+            axes {
+                text('cython', 'yes', 'no')
+                jdk(jdks(branchName, 'cqlsh-tests'))
+                if (use_arm64_test_label()) {
+                    label('label', slaveLabel, slaveArm64Label)
+                } else {
+                    label('label', slaveLabel)
+                }
+            }
             publishers {
                 publishOverSsh {
                     server('Nightlies') {
@@ -691,7 +707,7 @@ cassandraBranches.each {
                     shell("""
                         ./cassandra-builds/build-scripts/cassandra-test-docker.sh apache ${branchName} ${buildsRepo} ${buildsBranch} ${testDockerImage} cqlsh-test ;
                         wget --retry-connrefused --waitretry=1 "\${BUILD_URL}/timestamps/?time=HH:mm:ss&timeZone=UTC&appendLog" -qO - > console.log || echo wget failed ;
-                        xz console.log
+                        xz -f console.log
                         """)
                 }
                 matrixPostBuildScript {
@@ -706,11 +722,11 @@ cassandraBranches.each {
                             // docker needs to (soon or later) prune its volumes too, but that can only be done when the agent is idle
                             // if the agent is busy, just prune everything that is older than maxJobHours
                             command("""
-                                echo "Cleaning project…"; git clean -xdff ;
+                                echo "Cleaning project…"; git clean -xdff  || echo "failed to clean… continuing…";
                                 echo "Cleaning processes…" ;
-                                if ! pgrep -af "cassandra-builds/build-scripts" ; then pkill -9 -f org.apache.cassandra. || echo "already clean" ; fi ;
+                                if ! (pgrep -xa docker || pgrep -af "cassandra-builds/build-scripts") ; then pkill -9 -f org.apache.cassandra. || echo "already clean" ; fi ;
                                 echo "Pruning docker…" ;
-                                if pgrep -af "cassandra-builds/build-scripts" ; then docker system prune --all --force --filter "until=${maxJobHours}h" || true ; else  docker system prune --all --force --volumes || true ;  fi;
+                                if pgrep -xa docker || pgrep -af "cassandra-builds/build-scripts" ; then docker system prune --all --force --filter "until=${maxJobHours}h" || true ; else  docker system prune --all --force --volumes || true ;  fi;
                                 echo "Reporting disk usage…"; df -h ;
                                 echo "Cleaning tmp…";
                                 find . -type d -name tmp -delete 2>/dev/null ;
@@ -791,7 +807,7 @@ matrixJob('Cassandra-devbranch-artifacts') {
     description(jobDescription)
     concurrentBuild()
     axes {
-        jdk(jdkLabel,'jdk_11_latest')
+        jdk(jdk(jdks('cassandra-4.1', 'artifacts'))) // hack to make devbranch test both jdk8 and jdk11
         if (arm64_enabled) {
             label('label', slaveLabel, slaveArm64Label)
         } else {
@@ -875,9 +891,9 @@ matrixJob('Cassandra-devbranch-artifacts') {
                     command("""
                         echo "Cleaning project…"; git clean -xdff ;
                         echo "Cleaning processes…" ;
-                        if ! pgrep -af "cassandra-builds/build-scripts" ; then pkill -9 -f org.apache.cassandra. || echo "already clean" ; fi ;
+                        if ! (pgrep -xa docker || pgrep -af "cassandra-builds/build-scripts") ; then pkill -9 -f org.apache.cassandra. || echo "already clean" ; fi ;
                         echo "Pruning docker…" ;
-                        if pgrep -af "cassandra-builds/build-scripts" ; then docker system prune --all --force --filter "until=${maxJobHours}h" || true ; else  docker system prune --all --force --volumes || true ;  fi;
+                        if pgrep -xa docker || pgrep -af "cassandra-builds/build-scripts" ; then docker system prune --all --force --filter "until=${maxJobHours}h" || true ; else  docker system prune --all --force --volumes || true ;  fi;
                         echo "Reporting disk usage…"; df -h ;
                         echo "Cleaning tmp…";
                         find . -type d -name tmp -delete 2>/dev/null ;
@@ -909,7 +925,7 @@ testTargets.each {
                 text('split', values)
                 _testSplits = "/${testSplits}"
             }
-            jdk(jdkLabel,'jdk_11_latest')
+            jdk(jdk(jdks('cassandra-4.1', targetName))) // hack to make devbranch test both jdk8 and jdk11
             if (use_arm64_test_label()) {
                 label('label', slaveLabel, slaveArm64Label)
             } else {
@@ -1006,9 +1022,9 @@ testTargets.each {
                         command("""
                             echo "Cleaning project…"; git clean -xdff ${targetName == 'microbench' ? '-e build/test/jmh-result.json' : ''};
                             echo "Cleaning processes…" ;
-                            if ! pgrep -af "cassandra-builds/build-scripts" ; then pkill -9 -f org.apache.cassandra. || echo "already clean" ; fi ;
+                            if ! (pgrep -xa docker || pgrep -af "cassandra-builds/build-scripts") ; then pkill -9 -f org.apache.cassandra. || echo "already clean" ; fi ;
                             echo "Pruning docker…" ;
-                            if pgrep -af "cassandra-builds/build-scripts" ; then docker system prune --all --force --filter "until=${maxJobHours}h" || true ; else  docker system prune --all --force --volumes || true ;  fi;
+                            if pgrep -xa docker || pgrep -af "cassandra-builds/build-scripts" ; then docker system prune --all --force --filter "until=${maxJobHours}h" || true ; else  docker system prune --all --force --volumes || true ;  fi;
                             echo "Reporting disk usage…"; du -xm / 2>/dev/null | sort -rn | head -n 30 ; df -h ;
                             echo "Cleaning tmp…";
                             find . -type d -name tmp -delete 2>/dev/null ;
@@ -1060,6 +1076,7 @@ archs.each {
                 stringParam('DOCKER_IMAGE', "${dtestDockerImage}", 'Docker image for running dtests')
             }
             axes {
+                jdk(jdk(jdks('cassandra-4.1', targetName))) // hack to make devbranch test both jdk8 and jdk11
                 List<String> values = new ArrayList<String>()
                 if (targetName == 'dtest-large' || targetName == 'dtest-large-novnode') {
                     splits = dtestLargeSplits
@@ -1152,9 +1169,9 @@ archs.each {
                             command("""
                                 echo "Cleaning project…" ; git clean -xdff ;
                                 echo "Cleaning processes…" ;
-                                if ! pgrep -af "cassandra-builds/build-scripts" ; then pkill -9 -f org.apache.cassandra. || echo "already clean" ; fi ;
+                                if ! (pgrep -xa docker || pgrep -af "cassandra-builds/build-scripts") ; then pkill -9 -f org.apache.cassandra. || echo "already clean" ; fi ;
                                 echo "Pruning docker…" ;
-                                if pgrep -af "cassandra-builds/build-scripts" ; then docker system prune --all --force --filter "until=${maxJobHours}h" || true ; else  docker system prune --all --force --volumes || true ;  fi;
+                                if pgrep -xa docker || pgrep -af "cassandra-builds/build-scripts" ; then docker system prune --all --force --filter "until=${maxJobHours}h" || true ; else  docker system prune --all --force --volumes || true ;  fi;
                                 echo "Reporting disk usage…"; df -h ;
                                 echo "Cleaning tmp…";
                                 find . -type d -name tmp -delete 2>/dev/null ;
@@ -1198,7 +1215,7 @@ matrixJob('Cassandra-devbranch-cqlsh-tests') {
     }
     axes {
         text('cython', 'yes', 'no')
-        jdk(jdkLabel)
+        jdk(jdk(jdks('cassandra-4.1', 'cqlsh-tests'))) // hack to make devbranch test both jdk8 and jdk11
         if (use_arm64_test_label()) {
             label('label', slaveLabel, slaveArm64Label)
         } else {
@@ -1275,9 +1292,9 @@ matrixJob('Cassandra-devbranch-cqlsh-tests') {
                     command("""
                         echo "Cleaning project…"; git clean -xdff ;
                         echo "Cleaning processes…" ;
-                        if ! pgrep -af "cassandra-builds/build-scripts" ; then pkill -9 -f org.apache.cassandra. || echo "already clean" ; fi ;
+                        if ! ( pgrep -xa docker || pgrep -af "cassandra-builds/build-scripts" ) ; then pkill -9 -f org.apache.cassandra. || echo "already clean" ; fi ;
                         echo "Pruning docker…" ;
-                        if pgrep -af "cassandra-builds/build-scripts" ; then docker system prune --all --force --filter "until=${maxJobHours}h" || true ; else  docker system prune --all --force --volumes || true ;  fi;
+                        if pgrep -xa docker || pgrep -af "cassandra-builds/build-scripts" ; then docker system prune --all --force --filter "until=${maxJobHours}h" || true ; else  docker system prune --all --force --volumes || true ;  fi;
                         echo "Reporting disk usage…"; df -h ;
                         echo "Cleaning tmp…";
                         find . -type d -name tmp -delete 2>/dev/null ;


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