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

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


The following commit(s) were added to refs/heads/cassandra-5.0 by this push:
     new b3ee9713f8 Implement microbench test target type
b3ee9713f8 is described below

commit b3ee9713f8fd51e65c3040f7e7af4ce662c986ae
Author: Mick Semb Wever <[email protected]>
AuthorDate: Sun Jan 4 12:59:38 2026 +0100

    Implement microbench test target type
    
     Add microbench-test target for quick test run
     Unify declaration and add assertions on target types
     Fix dirname usages for macos
     Parameter for docker_timeout
     Add more jmh class ignores (that are broken)
     Add disableResume() and better host debug to Jenkinsfile
    
     patch by Mick Semb Wever; reviewed by Dmitry Konstantinov for 
CASSANDRA-18873
---
 .build/build-artifacts.sh                          |  2 +-
 .build/build-bench.xml                             | 22 ++++++-
 .build/build-jars.sh                               |  2 +-
 .build/check-code.sh                               |  2 +-
 .build/ci/generate-ci-summary.sh                   |  2 +-
 .build/ci/generate-test-report.sh                  |  2 +-
 .build/docker/_build-debian.sh                     |  2 +-
 .build/docker/_build-redhat.sh                     |  2 +-
 .build/docker/_docker_run.sh                       |  2 +-
 .build/docker/build-artifacts.sh                   |  2 +-
 .build/docker/build-debian.sh                      |  2 +-
 .build/docker/build-jars.sh                        |  2 +-
 .build/docker/build-redhat.sh                      |  2 +-
 .build/docker/check-code.sh                        |  2 +-
 .build/docker/run-tests.sh                         | 66 +++++++++++----------
 .build/run-ci                                      |  2 +-
 .build/run-python-dtests.sh                        | 20 ++++++-
 .build/run-tests.sh                                | 42 ++++++++------
 .jenkins/Jenkinsfile                               | 67 +++++++++++++++-------
 .jenkins/k8s/jenkins-deployment.yaml               |  3 +-
 build.xml                                          |  8 ---
 .../cassandra/test/microbench/CompactionBench.java |  2 +-
 .../test/microbench/MetadataCollectorBench.java    |  2 +
 23 files changed, 159 insertions(+), 101 deletions(-)

diff --git a/.build/build-artifacts.sh b/.build/build-artifacts.sh
index a1fe16399a..3214f273f8 100755
--- a/.build/build-artifacts.sh
+++ b/.build/build-artifacts.sh
@@ -16,7 +16,7 @@
 # limitations under the License.
 
 # variables, with defaults
-[ "x${CASSANDRA_DIR}" != "x" ] || CASSANDRA_DIR="$(readlink -f $(dirname 
"$0")/..)"
+[ "x${CASSANDRA_DIR}" != "x" ] || CASSANDRA_DIR="$(readlink -f $(dirname -- 
"$0")/..)"
 
 # pre-conditions
 command -v ant >/dev/null 2>&1 || { echo >&2 "ant needs to be installed"; exit 
1; }
diff --git a/.build/build-bench.xml b/.build/build-bench.xml
index 65854c6875..b10fc64425 100644
--- a/.build/build-bench.xml
+++ b/.build/build-bench.xml
@@ -41,11 +41,22 @@
     <property name="test.profiler.opts.default" 
value="event=cpu;threads=true;output=flamegraph;simple=true;ann=true"/>
     <property name="test.profiler.output" value="${build.test.dir}/profiler"/>
 
-    <target name="-microbench">
+    <target name="microbench" depends="maybe-build-test">
         <jmh/>
     </target>
 
-    <target name="-microbench-with-profiler" depends="-fetch-async-profiler">
+    <target name="microbench-test" depends="maybe-build-test" 
description="test each microbench runs once">
+        <!-- Only used to test jmh classes run without error.  Not to be used 
for actual performance tests -->
+        <jmh>
+            <extra-args>
+                <arg value="-f"/><arg value="1"/>
+                <arg value="-wi"/><arg value="0"/>
+                <arg value="-i"/><arg value="1"/>
+            </extra-args>
+        </jmh>
+    </target>
+
+    <target name="microbench-with-profiler" 
depends="maybe-build-test,-fetch-async-profiler">
         <condition property="test.profiler.opts" 
value="${test.profiler.opts.default}" else="${profiler.opts}">
             <or>
                 <not>
@@ -83,6 +94,10 @@
                 <jvmarg line="${_std-test-jvmargs}"/>
                 <jvmarg line="${test.jvm.args}"/>
 
+                <!-- total memory must fit within the pod constraints, see 
comments in .jenkins/Jenkinsfile and dind's container resourceRequestMemory in 
.jenkins/k8s/jenkins-deployment.yaml -->
+                <!-- note! this is used for both the JMH runner and VMH fork 
-->
+                <jvmarg value="-Xmx1G"/>
+
                 <arg value="-foe"/>
                 <arg value="true"/>
                 <arg value="-rf"/>
@@ -97,8 +112,9 @@
                 <extra-args/>
 
                 <!-- TODO 
https://issues.apache.org/jira/browse/CASSANDRA-18873 -->
+                <!-- The classes listed below are broken, and so currently 
ignored, see CASSANDRA-18873 -->
                 <arg value="-e" if:blank="${benchmark.name}"/>
-                <arg 
value="ZeroCopyStreamingBench|MutationBench|FastThreadLocalBench" 
if:blank="${benchmark.name}"/>
+                <arg 
value="AtomicBTreePartitionUpdateBench|BTreeSearchIteratorBench|BTreeTransformBench|BTreeUpdateBench|FastThreadLocalBench|KeyLookupBench|MutationBench|(instance.*Bench)|ReadWriteBench|ZeroCopyStreamingBench"
 if:blank="${benchmark.name}"/>
 
                 <arg value=".*microbench.*${benchmark.name}"/>
             </java>
diff --git a/.build/build-jars.sh b/.build/build-jars.sh
index cd60e5a130..cf2b91b082 100755
--- a/.build/build-jars.sh
+++ b/.build/build-jars.sh
@@ -18,7 +18,7 @@
 # temporary between CASSANDRA-18133 and CASSANDRA-18594
 
 # variables, with defaults
-[ "x${CASSANDRA_DIR}" != "x" ] || CASSANDRA_DIR="$(readlink -f $(dirname 
"$0")/..)"
+[ "x${CASSANDRA_DIR}" != "x" ] || CASSANDRA_DIR="$(readlink -f $(dirname -- 
"$0")/..)"
 
 # pre-conditions
 command -v ant >/dev/null 2>&1 || { echo >&2 "ant needs to be installed"; exit 
1; }
diff --git a/.build/check-code.sh b/.build/check-code.sh
index 60c96dc9ad..28bc5c576a 100755
--- a/.build/check-code.sh
+++ b/.build/check-code.sh
@@ -16,7 +16,7 @@
 # limitations under the License.
 
 # variables, with defaults
-[ "x${CASSANDRA_DIR}" != "x" ] || { CASSANDRA_DIR="$(dirname "$0")/.."; }
+[ "x${CASSANDRA_DIR}" != "x" ] || { CASSANDRA_DIR="$(dirname -- "$0")/.."; }
 
 # pre-conditions
 command -v ant >/dev/null 2>&1 || { echo >&2 "ant needs to be installed"; exit 
1; }
diff --git a/.build/ci/generate-ci-summary.sh b/.build/ci/generate-ci-summary.sh
index 01de5a6d63..3828fa2c1e 100755
--- a/.build/ci/generate-ci-summary.sh
+++ b/.build/ci/generate-ci-summary.sh
@@ -28,7 +28,7 @@
 #
 
 # variables, with defaults
-[ "x${CASSANDRA_DIR}" != "x" ] || CASSANDRA_DIR="$(readlink -f $(dirname 
"$0")/../..)"
+[ "x${CASSANDRA_DIR}" != "x" ] || CASSANDRA_DIR="$(readlink -f $(dirname -- 
"$0")/../..)"
 [ "x${DIST_DIR}" != "x" ] || DIST_DIR="${CASSANDRA_DIR}/build"
 
 # pre-conditions
diff --git a/.build/ci/generate-test-report.sh 
b/.build/ci/generate-test-report.sh
index 00672ecea5..81e2296419 100755
--- a/.build/ci/generate-test-report.sh
+++ b/.build/ci/generate-test-report.sh
@@ -24,7 +24,7 @@
 #
 
 # variables, with defaults
-[ "x${CASSANDRA_DIR}" != "x" ] || CASSANDRA_DIR="$(readlink -f $(dirname 
"$0")/../..)"
+[ "x${CASSANDRA_DIR}" != "x" ] || CASSANDRA_DIR="$(readlink -f $(dirname -- 
"$0")/../..)"
 [ "x${DIST_DIR}" != "x" ] || DIST_DIR="${CASSANDRA_DIR}/build"
 
 # pre-conditions
diff --git a/.build/docker/_build-debian.sh b/.build/docker/_build-debian.sh
index c25d168b85..071c42a499 100755
--- a/.build/docker/_build-debian.sh
+++ b/.build/docker/_build-debian.sh
@@ -24,7 +24,7 @@
 [ $DEBUG ] && set -x
 
 # variables, with defaults
-[ "x${CASSANDRA_DIR}" != "x" ] || CASSANDRA_DIR="$(readlink -f $(dirname 
"$0")/..)"
+[ "x${CASSANDRA_DIR}" != "x" ] || CASSANDRA_DIR="$(readlink -f $(dirname -- 
"$0")/..)"
 [ "x${DIST_DIR}" != "x" ] || DIST_DIR="${CASSANDRA_DIR}/build"
 
 # pre-conditions
diff --git a/.build/docker/_build-redhat.sh b/.build/docker/_build-redhat.sh
index 81b03bc945..d431ad1bfd 100755
--- a/.build/docker/_build-redhat.sh
+++ b/.build/docker/_build-redhat.sh
@@ -22,7 +22,7 @@
 ################################
 
 # variables, w/ defaults, w/ checks
-[ "x${CASSANDRA_DIR}" != "x" ] || CASSANDRA_DIR="$(readlink -f $(dirname 
"$0")/..)"
+[ "x${CASSANDRA_DIR}" != "x" ] || CASSANDRA_DIR="$(readlink -f $(dirname -- 
"$0")/..)"
 [ "x${DIST_DIR}" != "x" ] || DIST_DIR="${CASSANDRA_DIR}/build"
 [ "x${RPM_BUILD_DIR}" != "x" ] || RPM_BUILD_DIR="$(mktemp -d 
/tmp/rpmbuild.XXXXXX)"
 
diff --git a/.build/docker/_docker_run.sh b/.build/docker/_docker_run.sh
index 4a2aa16c5b..1a67840bde 100755
--- a/.build/docker/_docker_run.sh
+++ b/.build/docker/_docker_run.sh
@@ -29,7 +29,7 @@
 [ $DEBUG ] && set -x
 
 # variables, with defaults
-[ "x${cassandra_dir}" != "x" ] || cassandra_dir="$(readlink -f $(dirname 
"$0")/../..)"
+[ "x${cassandra_dir}" != "x" ] || cassandra_dir="$(readlink -f $(dirname -- 
"$0")/../..)"
 [ "x${build_dir}" != "x" ] || build_dir="${cassandra_dir}/build"
 [ "x${m2_dir}" != "x" ] || m2_dir="${HOME}/.m2/repository"
 [ -d "${build_dir}" ] || { mkdir -p "${build_dir}" ; }
diff --git a/.build/docker/build-artifacts.sh b/.build/docker/build-artifacts.sh
index 85eec83005..65eb51397b 100755
--- a/.build/docker/build-artifacts.sh
+++ b/.build/docker/build-artifacts.sh
@@ -18,5 +18,5 @@
 #
 # Creates the tarball artifact
 
-$(dirname "$0")/_docker_run.sh bullseye-build.docker build-artifacts.sh $1
+$(dirname -- "$0")/_docker_run.sh bullseye-build.docker build-artifacts.sh $1
 exit $?
diff --git a/.build/docker/build-debian.sh b/.build/docker/build-debian.sh
index e265fa5e8d..43f89b6620 100755
--- a/.build/docker/build-debian.sh
+++ b/.build/docker/build-debian.sh
@@ -32,5 +32,5 @@ echo
 #
 # Creates the debian package
 
-$(dirname "$0")/_docker_run.sh bullseye-build.docker docker/_build-debian.sh $1
+$(dirname -- "$0")/_docker_run.sh bullseye-build.docker 
docker/_build-debian.sh $1
 exit $?
diff --git a/.build/docker/build-jars.sh b/.build/docker/build-jars.sh
index b8039cb0a0..a23f2e6d59 100755
--- a/.build/docker/build-jars.sh
+++ b/.build/docker/build-jars.sh
@@ -18,5 +18,5 @@
 #
 # Build the jars
 
-$(dirname "$0")/_docker_run.sh bullseye-build.docker build-jars.sh $1
+$(dirname -- "$0")/_docker_run.sh bullseye-build.docker build-jars.sh $1
 exit $?
diff --git a/.build/docker/build-redhat.sh b/.build/docker/build-redhat.sh
index adacccab6e..37cd2b8e4c 100755
--- a/.build/docker/build-redhat.sh
+++ b/.build/docker/build-redhat.sh
@@ -36,5 +36,5 @@ echo
 #
 # Creates the redhat package
 
-$(dirname "$0")/_docker_run.sh almalinux-build.docker docker/_build-redhat.sh 
"${java_version}" ${rpm_dist}
+$(dirname -- "$0")/_docker_run.sh almalinux-build.docker 
docker/_build-redhat.sh "${java_version}" ${rpm_dist}
 exit $?
diff --git a/.build/docker/check-code.sh b/.build/docker/check-code.sh
index 4afccaea98..5284c402d4 100755
--- a/.build/docker/check-code.sh
+++ b/.build/docker/check-code.sh
@@ -20,4 +20,4 @@
 
 export CASSANDRA_DOCKER_ANT_OPTS="-Ddependency-check.home.base=/tmp"
 
-$(dirname "$0")/_docker_run.sh bullseye-build.docker check-code.sh $1
+$(dirname -- "$0")/_docker_run.sh bullseye-build.docker check-code.sh $1
diff --git a/.build/docker/run-tests.sh b/.build/docker/run-tests.sh
index f835ae0928..ffade4adc8 100755
--- a/.build/docker/run-tests.sh
+++ b/.build/docker/run-tests.sh
@@ -21,10 +21,24 @@
 
 [ $DEBUG ] && set -x
 
+# variables, with defaults
+[ "x${cassandra_dir}" != "x" ] || cassandra_dir="$(readlink -f $(dirname -- 
"$0")/../..)"
+[ "x${cassandra_dtest_dir}" != "x" ] || 
cassandra_dtest_dir="${cassandra_dir}/../cassandra-dtest"
+[ "x${build_dir}" != "x" ] || build_dir="${cassandra_dir}/build"
+[ "x${m2_dir}" != "x" ] || m2_dir="${HOME}/.m2/repository"
+[ "x${docker_timeout_hours}" != "x" ] || docker_timeout_hours="1"
+[ -d "${build_dir}" ] || { mkdir -p "${build_dir}" ; }
+[ -d "${m2_dir}" ] || { mkdir -p "${m2_dir}" ; }
+
+# source TARGET_TYPES from the non-docker scripts
+_target_test_types="$(grep '^TARGET_TYPES=' 
"${cassandra_dir}/.build/run-tests.sh" | cut -d'"' -f2)"
+_target_dtest_types="$(cd ${cassandra_dir}; bash <(sed -n 
"/^TARGET_TYPES=/,/^done$/p" .build/run-python-dtests.sh; echo 'echo 
${TARGET_TYPES}'))"
+TARGET_TYPES="${_target_test_types} ${_target_dtest_types}"
+
 print_help() {
   echo ""
   echo "Usage: $0 [-a|-t|-c|-j|-h] [extra arguments]"
-  echo "   -a Test target type: test, test-compression, test-cdc, ..."
+  echo "   -a Test target type: ${TARGET_TYPES}"
   echo "   -t Test name regexp to run."
   echo "   -c Chunk to run in the form X/Y: Run chunk X from a total of Y 
chunks."
   echo "   -j Java version. Default java_version is what 'java.default' 
specifies in build.xml."
@@ -39,21 +53,20 @@ error() {
 }
 
 # legacy argument handling
-case ${1} in
-  "build_dtest_jars" | "stress-test" | "fqltool-test" | "microbench" | 
"test-burn" | "long-test" | "cqlsh-test" | "simulator-dtest" | "dtest" | 
"dtest-novnode" | "dtest-latest" | "dtest-large" | "dtest-large-novnode" | 
"dtest-upgrade" | "dtest-upgrade-novnode"| "dtest-upgrade-large" | 
"dtest-upgrade-novnode-large" | "test" | "test-cdc" | "test-compression" | 
"test-oa" | "test-system-keyspace-directory" | "test-latest" | "jvm-dtest" | 
"jvm-dtest-upgrade" | "jvm-dtest-novnode" | "jvm-dtest [...]
-    test_type="-a ${1}"
-    if [[ -z ${2} ]]; then
-      test_list=""
-    elif [[ -n ${2} && "${2}" =~ ^[0-9]+/[0-9]+$ ]]; then
-      test_list="-c ${2}";
-    else
-      test_list="-t ${2}";
-    fi
-    if [[ -n ${3} ]]; then java_version="-j ${3}"; else java_version=""; fi
-    echo "Using deprecated legacy arguments.  Please update to new parameter 
format: ${test_type} ${test_list} ${java_version}"
-    $0 ${test_type} ${test_list} ${java_version}
-    exit $?
-esac
+if [[ " ${TARGET_TYPES} " =~ " ${1} " ]]; then
+  test_type="-a ${1}"
+  if [[ -z ${2} ]]; then
+    test_list=""
+  elif [[ -n ${2} && "${2}" =~ ^[0-9]+/[0-9]+$ ]]; then
+    test_list="-c ${2}";
+  else
+    test_list="-t ${2}";
+  fi
+  if [[ -n ${3} ]]; then java_version="-j ${3}"; else java_version=""; fi
+  echo "Using deprecated legacy arguments.  Please update to new parameter 
format: ${test_type} ${test_list} ${java_version}"
+  $0 ${test_type} ${test_list} ${java_version}
+  exit $?
+fi
 
 env_vars=""
 while getopts ":a:t:c:e:hj:" opt; do
@@ -61,6 +74,7 @@ while getopts ":a:t:c:e:hj:" opt; do
   # Invalid flags check disabled as we'll pass them to other scripts
   case $opt in
     a ) test_target="$OPTARG"
+        [[ " ${TARGET_TYPES} " =~ " ${test_target/-repeat/} " ]] || error 1 
"Invalid test target type '${test_target}'. Valid types: ${TARGET_TYPES}"
         ;;
     t ) test_name_regexp="$OPTARG"
         ;;
@@ -79,14 +93,6 @@ while getopts ":a:t:c:e:hj:" opt; do
   esac
 done
 
-# variables, with defaults
-[ "x${cassandra_dir}" != "x" ] || cassandra_dir="$(readlink -f $(dirname 
"$0")/../..)"
-[ "x${cassandra_dtest_dir}" != "x" ] || 
cassandra_dtest_dir="${cassandra_dir}/../cassandra-dtest"
-[ "x${build_dir}" != "x" ] || build_dir="${cassandra_dir}/build"
-[ "x${m2_dir}" != "x" ] || m2_dir="${HOME}/.m2/repository"
-[ -d "${build_dir}" ] || { mkdir -p "${build_dir}" ; }
-[ -d "${m2_dir}" ] || { mkdir -p "${m2_dir}" ; }
-
 # pre-conditions
 command -v docker >/dev/null 2>&1 || { error 1 "docker needs to be installed"; 
}
 command -v bc >/dev/null 2>&1 || { error 1 "bc needs to be installed"; }
@@ -186,14 +192,14 @@ case ${test_target/-repeat/} in
         [[ ${mem} -gt $((1 * 1024 * 1024 * 1024 * ${jenkins_executors})) ]] || 
{ error 1 "${target} require minimum docker memory 1g (per jenkins executor 
(${jenkins_executors})), found ${mem}"; }
     ;;
     # test-burn doesn't have enough tests in it to split beyond 8, and burn 
and long we want a bit more resources anyway
-    "microbench" | "test-burn" | "long-test" | "cqlsh-test" )
+    "test-burn" | "long-test" | "cqlsh-test" )
         [[ ${mem} -gt $((5 * 1024 * 1024 * 1024 * ${jenkins_executors})) ]] || 
{ error 1 "${target} require minimum docker memory 6g (per jenkins executor 
(${jenkins_executors})), found ${mem}"; }
     ;;
-    "simulator-dtest")
+    "microbench" | "microbench-test" | "simulator-dtest")
         [[ ${mem} -gt $((15 * 1024 * 1024 * 1024 * ${jenkins_executors})) ]] 
|| { error 1 "${target} require minimum docker memory 16g (per jenkins executor 
(${jenkins_executors})), found ${mem}"; }
         docker_flags="-m 15g --memory-swap 15g"
     ;;
-    "dtest" | "dtest-novnode" | "dtest-latest" | "dtest-large" | 
"dtest-large-novnode" | "dtest-large-latest" | "dtest-upgrade" | 
"dtest-upgrade-novnode"| "dtest-upgrade-large" | "dtest-upgrade-novnode-large")
+    "dtest" | "dtest-novnode" | "dtest-latest" | "dtest-large" | 
"dtest-large-novnode" | "dtest-large-latest" | "dtest-upgrade" | 
"dtest-upgrade-novnode"| "dtest-upgrade-large" | "dtest-upgrade-large-novnode" 
| "dtest-large-novnode-latest")
         [ -f "${cassandra_dtest_dir}/dtest.py" ] || { error 1 
"${cassandra_dtest_dir}/dtest.py not found. please specify 
'cassandra_dtest_dir' to point to the local cassandra-dtest source"; }
         test_script="run-python-dtests.sh"
         docker_mounts="${docker_mounts} -v 
${cassandra_dtest_dir}:/home/cassandra/cassandra-dtest"
@@ -204,7 +210,7 @@ case ${test_target/-repeat/} in
         [[ ${mem} -gt $((5 * 1024 * 1024 * 1024 * ${jenkins_executors})) ]] || 
{ error 1 "${target} require minimum docker memory 6g (per jenkins executor 
(${jenkins_executors})), found ${mem}"; }
     ;;
     *)
-        error 1 "unrecognized test type \"${target}\""
+        error 1 "docker resource limits unconfigured for test type 
\"${target}\""
     ;;
 esac
 
@@ -231,7 +237,7 @@ chmod -R ag+rwx "${build_dir}"
 
 # define testtag.extra so tests can be aggregated together. (jdk is already 
appended in build.xml)
 case "${target}" in
-    "cqlsh-test" | "dtest" | "dtest-novnode" | "dtest-latest" | "dtest-large" 
| "dtest-large-novnode" | "dtest-upgrade" | "dtest-upgrade-large" | 
"dtest-upgrade-novnode" | "dtest-upgrade-novnode-large" )
+    "cqlsh-test" | "dtest" | "dtest-novnode" | "dtest-latest" | "dtest-large" 
| "dtest-large-novnode" | "dtest-upgrade" | "dtest-upgrade-large" | 
"dtest-upgrade-novnode" | "dtest-upgrade-large-novnode" )
         ANT_OPTS="-Dtesttag.extra=_$(arch)_python${python_version/./-}"
         # intentionally not TMP_DIR
         DTEST_TMPDIR_LOCAL="$(mktemp -d ${build_dir}/run-python-dtest.XXXXXX)"
@@ -286,7 +292,7 @@ docker_command="source 
\${CASSANDRA_DIR}/.build/docker/_set_java.sh ${java_versi
             \${CASSANDRA_DIR}/.build/docker/_docker_init_tests.sh -a ${target} 
${split_chunk_arg} ${test_name_regexp_arg} ${env_vars} ; exit \$?"
 
 # start the container, timeout after 4 hours
-docker_id=$(docker run --name ${container_name} ${docker_flags} ${docker_envs} 
${docker_mounts} ${docker_volume_opt} ${image_name} sleep 4h)
+docker_id=$(docker run --name ${container_name} ${docker_flags} ${docker_envs} 
${docker_mounts} ${docker_volume_opt} ${image_name} sleep 
${docker_timeout_hours}h)
 
 echo "Running container ${container_name} ${docker_id}"
 
diff --git a/.build/run-ci b/.build/run-ci
index 0d4f14dfef..04a257d858 100755
--- a/.build/run-ci
+++ b/.build/run-ci
@@ -267,7 +267,7 @@ def install_jenkins(kubeconfig: Optional[str], kubecontext: 
Optional[str], kube_
 
     run_kubectl_command(kubeconfig, kubecontext, kube_ns,
                         ["exec", DEFAULT_POD_NAME, "--",
-                        "curl", "-sS", 
"https://svn.apache.org/repos/asf/comdev/project-logos/originals/cassandra-6.svg";,
+                        "curl", "-sS", 
"https://www.apache.org/logos/originals/cassandra-4.svg";,
                         "-o", "/var/jenkins_cache/war/images/svgs/logo.svg"])
 
     if result.returncode != 0:
diff --git a/.build/run-python-dtests.sh b/.build/run-python-dtests.sh
index 86652db0b8..f57f69668a 100755
--- a/.build/run-python-dtests.sh
+++ b/.build/run-python-dtests.sh
@@ -27,11 +27,24 @@
 
 [ $DEBUG ] && set -x
 
+# target types
+TARGET_TYPES="dtest dtest-upgrade"
+for base in ${TARGET_TYPES}; do
+  for large in "" "-large"; do
+    for novnode in "" "-novnode"; do
+      for latest in "" "-latest"; do
+        variant="${large}${novnode}${latest}"
+        [[ -n "${variant}" ]] && TARGET_TYPES="${TARGET_TYPES} 
${base}${variant}"
+      done
+    done
+  done
+done
+
 # help
 if [ "$#" -lt 1 ] || [ "$1" == "-h" ]; then
     echo ""
     echo "Usage: $0 [-a|-t|-c|-j|-h]"
-    echo "   -a Test target type: dtest, dtest-latest, ..."
+    echo "   -a Test target type: ${TARGET_TYPES}"
     echo "   -t Test name regexp to run."
     echo "   -c Chunk to run in the form X/Y: Run chunk X from a total of Y 
chunks."
     echo ""
@@ -46,6 +59,7 @@ DTEST_TARGET="dtest"
 while getopts "a:t:c:hj:" opt; do
   case $opt in
     a ) DTEST_TARGET="$OPTARG"
+        [[ " ${TARGET_TYPES} " =~ " ${DTEST_TARGET/-repeat/} " ]] || error 1 
"Invalid test target type '${DTEST_TARGET}'. Valid types: ${TARGET_TYPES}"
         ;;
     t ) DTEST_SPLIT_CHUNK="$OPTARG"
         ;;
@@ -65,7 +79,7 @@ if [ "$#" -ne 0 ]; then
 fi
 
 # variables, with defaults
-[ "x${CASSANDRA_DIR}" != "x" ] || CASSANDRA_DIR="$(readlink -f $(dirname 
"$0")/..)"
+[ "x${CASSANDRA_DIR}" != "x" ] || CASSANDRA_DIR="$(readlink -f $(dirname -- 
"$0")/..)"
 [ "x${CASSANDRA_DTEST_DIR}" != "x" ] || CASSANDRA_DTEST_DIR="$(readlink -f 
${CASSANDRA_DIR}/../cassandra-dtest)"
 [ "x${DIST_DIR}" != "x" ] || DIST_DIR="${CASSANDRA_DIR}/build"
 [ "x${TMPDIR}" != "x" ] || { TMPDIR_SET=1 && export TMPDIR="$(mktemp -d 
${DIST_DIR}/run-python-dtest.XXXXXX)" ; }
@@ -87,7 +101,7 @@ command -v ant >/dev/null 2>&1 || { echo >&2 "ant needs to 
be installed"; exit 1
 command -v virtualenv >/dev/null 2>&1 || { echo >&2 "virtualenv needs to be 
installed"; exit 1; }
 [ -f "${CASSANDRA_DIR}/build.xml" ] || { echo >&2 "${CASSANDRA_DIR}/build.xml 
must exist"; exit 1; }
 [ -d "${DIST_DIR}" ] || { mkdir -p "${DIST_DIR}" ; }
-ALLOWED_DTEST_VARIANTS="novnode|large|latest|upgrade"
+ALLOWED_DTEST_VARIANTS="large|latest|upgrade|novnode|latest"
 [[ "${DTEST_TARGET}" =~ ^dtest(-(${ALLOWED_DTEST_VARIANTS}))*$ ]] || { echo 
>&2 "Unknown dtest target: ${DTEST_TARGET}. Allowed variants are 
${ALLOWED_DTEST_VARIANTS}"; exit 1; }
 
 java_version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | awk 
-F. '{print $1}')
diff --git a/.build/run-tests.sh b/.build/run-tests.sh
index 756c8b3b2d..344f3d9e18 100755
--- a/.build/run-tests.sh
+++ b/.build/run-tests.sh
@@ -27,9 +27,12 @@ set -o pipefail
 [ $DEBUG ] && set -x
 
 # variables, with defaults
-[ "x${CASSANDRA_DIR}" != "x" ] || CASSANDRA_DIR="$(readlink -f $(dirname 
"$0")/..)"
+[ "x${CASSANDRA_DIR}" != "x" ] || CASSANDRA_DIR="$(readlink -f $(dirname -- 
"$0")/..)"
 [ "x${DIST_DIR}" != "x" ] || DIST_DIR="${CASSANDRA_DIR}/build"
 
+# target types
+TARGET_TYPES="build_dtest_jars stress-test fqltool-test microbench 
microbench-test test-burn long-test cqlsh-test simulator-dtest test test-cdc 
test-compression test-oa test-system-keyspace-directory test-latest jvm-dtest 
jvm-dtest-upgrade jvm-dtest-novnode jvm-dtest-upgrade-novnode"
+
 # pre-conditions
 command -v ant >/dev/null 2>&1 || { error 1 "ant needs to be installed"; }
 command -v git >/dev/null 2>&1 || { error 1 "git needs to be installed"; }
@@ -47,7 +50,7 @@ error() {
 
 print_help() {
   echo "Usage: $0 [-a|-t|-c|-e|-i|-b|-s|-h]"
-  echo "   -a Test target type: test, test-compression, test-cdc, ..."
+  echo "   -a Test target type: ${TARGET_TYPES}"
   echo "   -t Test name regexp to run."
   echo "   -c Chunk to run in the form X/Y: Run chunk X from a total of Y 
chunks."
   echo "   -b Specify the base git branch for comparison when determining 
changed tests to"
@@ -65,20 +68,19 @@ print_help() {
 
 
 # legacy argument handling
-case ${1} in
-  "build_dtest_jars" | "stress-test" | "fqltool-test" | "microbench" | 
"test-burn" | "long-test" | "cqlsh-test" | "simulator-dtest" | "test" | 
"test-cdc" | "test-compression" | "test-oa" | "test-system-keyspace-directory" 
| "test-latest" | "jvm-dtest" | "jvm-dtest-upgrade" | "jvm-dtest-novnode" | 
"jvm-dtest-upgrade-novnode")
-    test_type="-a ${1}"
-    if [[ -z ${2} ]]; then
-      test_list=""
-    elif [[ -n ${2} && "${2}" =~ ^[0-9]+/[0-9]+$ ]]; then
-      test_list="-c ${2}";
-    else
-      test_list="-t ${2}";
-    fi
-    echo "Using deprecated legacy arguments.  Please update to new parameter 
format: ${test_type} ${test_list}"
-    $0 ${test_type} ${test_list}
-    exit $?
-esac
+if [[ " ${TARGET_TYPES} " =~ " ${1} " ]]; then
+  test_type="-a ${1}"
+  if [[ -z ${2} ]]; then
+    test_list=""
+  elif [[ -n ${2} && "${2}" =~ ^[0-9]+/[0-9]+$ ]]; then
+    test_list="-c ${2}";
+  else
+    test_list="-t ${2}";
+  fi
+  echo "Using deprecated legacy arguments.  Please update to new parameter 
format: ${test_type} ${test_list}"
+  $0 ${test_type} ${test_list}
+  exit $?
+fi
 
 
 env_vars=""
@@ -88,6 +90,7 @@ detect_changed_tests=true
 while getopts "a:t:c:e:ib:shj:" opt; do
   case $opt in
     a ) test_target="$OPTARG"
+        [[ " ${TARGET_TYPES} " =~ " ${test_target/-repeat/} " ]] || error 1 
"Invalid test target type '${test_target}'. Valid types: ${TARGET_TYPES}"
         ;;
     t ) test_name_regexp="$OPTARG"
         ;;
@@ -343,8 +346,9 @@ _main() {
       ant fqltool-build-test ${ANT_TEST_OPTS}
       ant $target ${ANT_TEST_OPTS} || echo "failed ${target} ${split_chunk}"
       ;;
-    "microbench")
-      ant $target ${ANT_TEST_OPTS} -Dmaven.test.failure.ignore=true
+    "microbench" | "microbench-test")
+      [[ "x${test_name_regexp}" != "x" ]] && 
test_name_regexp="-Dbenchmark.name=${test_name_regexp}"
+      ant $target ${ANT_TEST_OPTS} ${test_name_regexp} 
-Dmaven.test.failure.ignore=true
       ;;
     "test")
       _run_testlist "unit" "testclasslist" "${test_name_regexp}" 
"${split_chunk}" "$(_timeout_for 'test.timeout')" "${repeat_count}"
@@ -407,7 +411,7 @@ _main() {
       ./pylib/cassandra-cqlsh-tests.sh $(pwd)
       ;;
     *)
-      error 1 "unrecognized test type \"${target}\""
+      error 1 "unconfigured build command for test type \"${target}\""
       ;;
   esac
 
diff --git a/.jenkins/Jenkinsfile b/.jenkins/Jenkinsfile
index 22cbb79e92..4aa1dcd44a 100644
--- a/.jenkins/Jenkinsfile
+++ b/.jenkins/Jenkinsfile
@@ -29,21 +29,21 @@
 //
 // This Jenkinsfile is expected to work on any Jenkins infrastructure.
 // The controller should have 4 cpu, 12GB ram (and be configured to use 
`-XX:+UseG1GC -Xmx8G`)
-// It is required to have agents providing five labels, each that can provide 
docker and the following capabilities:
-//  - cassandra-amd64-small  : 1 cpu, 1GB ram
-//  - cassandra-small        : 1 cpu, 1GB ram (alias for above but for any 
arch)
-//  - cassandra-amd64-medium : 3 cpu, 5GB ram
-//  - cassandra-medium       : 3 cpu, 5GB ram (alias for above but for any 
arch)
-//  - cassandra-amd64-large  : 7 cpu, 16GB ram
-//  - cassandra-large        : 7 cpu, 16GB ram
+//
+// It is required to have agents providing 6+ labels, each that can provide 
docker and the following capabilities:
+//
+//  - cassandra-small + cassandra-${arch}-small       : 1 cpu, 1GB ram (alias 
for above but for any arch)
+//  - cassandra-medium + cassandra-${arch}-medium     : 3 cpu, 5GB ram
+//  - cassandra-large + cassandra-${arch}-large       : 7 cpu, 16GB ram
+//
+// Performance targets required a `cassandra-${arch}-large-dedicated` labelled 
nodes.
 //
 // When running builds parameterised to other architectures the corresponding 
labels are expected.
 //  For example 'arm64' requires the labels: cassandra-arm64-small, 
cassandra-arm64-medium, cassandra-arm64-large.
 //
-// The built-in node must has the "controller" label.  There must be more than 
two agents for each label.
-//
 // Plugins required are:
-//  git, workflow-job, workflow-cps, junit, workflow-aggregator, ws-cleanup, 
pipeline-build-step, test-stability, copyartifact.
+//  git, workflow-job, workflow-cps, junit, workflow-aggregator, ws-cleanup, 
pipeline-build-step, test-stability, copyartifact, jmh-report.
+// See .jenkins/k8s/jenkins-deployment.yaml for up to date list of plugins.
 //
 // Any functionality that depends upon ASF Infra ( i.e. the canonical 
ci-cassandra.a.o )
 //  will be ignored when run on other environments.
@@ -68,6 +68,7 @@ pipeline {
   options {
     // must have: avoids agents waste in idle time on controller bottleneck
     durabilityHint('PERFORMANCE_OPTIMIZED')
+    disableResume()
   }
   parameters {
     string(name: 'repository', defaultValue: params.repository ?: 
scm.userRemoteConfigs[0].url, description: 'Cassandra Repository')
@@ -140,9 +141,10 @@ def pipelineProfiles() {
   return [
     'packaging': ['artifacts', 'lint', 'debian', 'redhat'],
     'skinny': ['lint', 'cqlsh-test', 'test', 'jvm-dtest', 'simulator-dtest', 
'dtest'],
-    'pre-commit': ['artifacts', 'lint', 'debian', 'redhat', 'fqltool-test', 
'cqlsh-test', 'test', 'test-latest', 'stress-test', 'test-burn', 'jvm-dtest', 
'simulator-dtest', 'dtest', 'dtest-latest'],
-    'pre-commit w/ upgrades': ['artifacts', 'lint', 'debian', 'redhat', 
'fqltool-test', 'cqlsh-test', 'test', 'test-latest', 'stress-test', 
'test-burn', 'jvm-dtest', 'jvm-dtest-upgrade', 'simulator-dtest', 'dtest', 
'dtest-novnode', 'dtest-latest', 'dtest-upgrade'],
-    'post-commit': ['artifacts', 'lint', 'debian', 'redhat', 'fqltool-test', 
'cqlsh-test', 'test-cdc', 'test', 'test-latest', 'test-compression', 
'stress-test', 'test-burn', 'long-test', 'test-oa', 
'test-system-keyspace-directory', 'jvm-dtest', 'jvm-dtest-upgrade', 
'simulator-dtest', 'dtest', 'dtest-novnode', 'dtest-latest', 'dtest-large', 
'dtest-large-novnode', 'dtest-large-latest', 'dtest-upgrade', 
'dtest-upgrade-novnode', 'dtest-upgrade-large', 'dtest-upgrade-novnode-large'],
+    'pre-commit': ['artifacts', 'lint', 'debian', 'redhat', 'fqltool-test', 
'cqlsh-test', 'test', 'test-latest', 'stress-test', 'test-burn', 'jvm-dtest', 
'simulator-dtest', 'dtest', 'dtest-latest', 'microbench-test'],
+    'pre-commit w/ upgrades': ['artifacts', 'lint', 'debian', 'redhat', 
'fqltool-test', 'cqlsh-test', 'test', 'test-latest', 'stress-test', 
'test-burn', 'jvm-dtest', 'jvm-dtest-upgrade', 'simulator-dtest', 'dtest', 
'dtest-novnode', 'dtest-latest', 'dtest-upgrade', 'microbench-test'],
+    'post-commit': ['artifacts', 'lint', 'debian', 'redhat', 'fqltool-test', 
'cqlsh-test', 'test-cdc', 'test', 'test-latest', 'test-compression', 
'stress-test', 'test-burn', 'long-test', 'test-oa', 
'test-system-keyspace-directory', 'jvm-dtest', 'jvm-dtest-upgrade', 
'simulator-dtest', 'dtest', 'dtest-novnode', 'dtest-latest', 'dtest-large', 
'dtest-large-novnode', 'dtest-large-latest', 'dtest-upgrade', 
'dtest-upgrade-novnode', 'dtest-upgrade-large', 'dtest-upgrade-large-novnode', 
'microben [...]
+    'performance': ['microbench'],
     'custom': []
   ]
 }
@@ -203,13 +205,20 @@ def tasks() {
     'dtest-upgrade': [splits: 128, size: 'large'],
     'dtest-upgrade-novnode': [splits: 128, size: 'large'],
     'dtest-upgrade-large': [splits: 32, size: 'large'],
-    'dtest-upgrade-novnode-large': [splits: 32, size: 'large'],
+    'dtest-upgrade-large-novnode': [splits: 32, size: 'large'],
+    'microbench-test': [splits: 1, size: 'large'],
+    // performance tests need 'cassandra-*large-dedicated' nodes
+    'microbench': [splits: 1, size: 'large', timeout_hours: 6, benchmark: 
true],
   ]
   testSteps.each() {
     it.value.put('type', 'test')
     if (!it.value['size']) {
       it.value.put('size', 'medium')
     }
+    if (!it.value['timeout_hours']) {
+      // default 1 hour
+      it.value.put('timeout_hours', 1)
+    }
     if (it.key.startsWith('dtest')) {
       it.value.put('python-dtest', true)
     }
@@ -391,10 +400,11 @@ def test(command, cell) {
             script_vars = "${script_vars} cython=\'${cell.cython}\'"
           }
           script_vars = fetchDTestsSource(command, script_vars)
-          timeout(time: 1, unit: 'HOURS') { // best throughput with each cell 
at ~10 minutes
+          timeout(time: command.timeout_hours, unit: 'HOURS') { // best 
throughput with each cell at ~10 minutes
             def timer = System.currentTimeMillis()
             try {
               buildJVMDTestJars(cell, script_vars, logfile)
+              script_vars = "${script_vars} 
docker_timeout_hours=\"${command.timeout_hours}\""
               def status = sh label: "RUNNING TESTS ${cell.step}...", script: 
"${script_vars} .build/docker/run-tests.sh -a ${cell.step} -c 
'${cell.split}/${splits}' -j ${cell.jdk} 2>&1 | tee >( xz -c > build/${logfile} 
)", returnStatus: true
               dir("build") {
                 archiveArtifacts artifacts: "${logfile}", fingerprint: true
@@ -420,12 +430,14 @@ def test(command, cell) {
                 find test/output -name cqlshlib.xml -execdir mv cqlshlib.xml 
${cell.step}/cqlshlib${cell_suffix}.xml ';'
                 find test/output -name nosetests.xml -execdir mv nosetests.xml 
${cell.step}/nosetests${cell_suffix}.xml ';'
               """
-            junit testResults: 
"test/**/TEST-*.xml,test/**/cqlshlib*.xml,test/**/nosetests*.xml", 
testDataPublishers: [[$class: 'StabilityTestDataPublisher']]
+            if (!cell.step.startsWith("microbench")) {
+              junit testResults: 
"test/**/TEST-*.xml,test/**/cqlshlib*.xml,test/**/nosetests*.xml", 
testDataPublishers: [[$class: 'StabilityTestDataPublisher']]
+            }
             sh """
                 find test/output -type f -name "*.xml" -print0 | xargs -0 -r 
-n1 -P"\$(nproc)" xz -f
                 echo "test result files compressed"; find test/output -type f 
-name "*.xml.xz" | wc -l
               """
-            archiveArtifacts artifacts: 
"test/logs/**,test/**/TEST-*.xml.xz,test/**/cqlshlib*.xml.xz,test/**/nosetests*.xml.xz",
 fingerprint: true
+            archiveArtifacts artifacts: 
"test/logs/**,test/**/TEST-*.xml.xz,test/**/cqlshlib*.xml.xz,test/**/nosetests*.xml.xz,test/jmh-result.json",
 fingerprint: true
             copyToNightlies("${logfile}, test/logs/**", 
"${cell.step}/${cell.arch}/jdk${cell.jdk}/python${cell.python}/cython_${cell.cython}/"
 + "split_${cell.split}_${splits}".replace("/", "_"))
           }
           cleanAgent(cell.step)
@@ -483,8 +495,15 @@ def fetchDockerImages(dockerfiles) {
 }
 
 def getNodeLabel(command, cell) {
-  echo "using node label: cassandra-${cell.arch}-${command.size}"
-  return "cassandra-${cell.arch}-${command.size}"
+  def label = "cassandra-${cell.arch}-${command.size}"
+  if (command.containsKey('benchmark') && command.benchmark) {
+    // to provide reliable results the "microbench" target
+    // expects to be running on baremetal jenkins agents configured with only 
one executor
+    // those jenkins agents need to be manually configured to have the 
"cassandra-amd64-large-dedicated" label
+    label = "${label}-dedicated"
+  }
+  echo "using node label: ${label}"
+  return label
 }
 
 def copyToNightlies(sourceFiles, remoteDirectory='') {
@@ -507,7 +526,8 @@ def copyToNightlies(sourceFiles, remoteDirectory='') {
 }
 
 def cleanAgent(job_name) {
-  sh "hostname"
+  // get any public IP which is more helpful correlating back to the cloud 
instance
+  sh script: 'hostname; curl -sm 10 ifconfig.me', returnStatus: true
   if (isCanonical()) {
     def agentScriptsUrl = 
"https://raw.githubusercontent.com/apache/cassandra-builds/trunk/jenkins-dsl/agent_scripts/";
     cleanAgentDocker(job_name, agentScriptsUrl)
@@ -557,7 +577,7 @@ def generateTestReports() {
           unzip -x -d build/test -q output.zip ) ${teeSuffix}
          """
     } else {
-      copyArtifacts filter: 
'test/**/TEST-*.xml.xz,test/**/cqlshlib*.xml.xz,test/**/nosetests*.xml.xz', 
fingerprintArtifacts: true, projectName: env.JOB_NAME, selector: 
specific(env.BUILD_NUMBER), target: "build/", optional: true
+      copyArtifacts filter: 
'test/**/TEST-*.xml.xz,test/**/cqlshlib*.xml.xz,test/**/nosetests*.xml.xz,test/jmh-result.json',
 fingerprintArtifacts: true, projectName: env.JOB_NAME, selector: 
specific(env.BUILD_NUMBER), target: "build/", optional: true
     }
     if (fileExists('build/test/output')) {
       // merge splits for each target's test report, other axes are kept 
separate
@@ -585,9 +605,12 @@ def generateTestReports() {
 
       dir('build/') {
         archiveArtifacts artifacts: 
"ci_summary.html,results_details.tar.xz,${logfile}", fingerprint: true
-        copyToNightlies('ci_summary.html,results_details.tar.xz,${logfile}')
+        
copyToNightlies('ci_summary.html,results_details.tar.xz,${logfile},test/jmh-result.json')
       }
     }
+    if (fileExists('build/test/jmh-result.json')) {
+      jmhReport('build/test/jmh-result.json')
+    }
   }
 }
 
diff --git a/.jenkins/k8s/jenkins-deployment.yaml 
b/.jenkins/k8s/jenkins-deployment.yaml
index 585a601b0d..46cc77fc3c 100644
--- a/.jenkins/k8s/jenkins-deployment.yaml
+++ b/.jenkins/k8s/jenkins-deployment.yaml
@@ -58,6 +58,7 @@ controller:
     - pipeline-rest-api
     - test-stability
     - copyartifact
+    - jmh-report
   node-selector:
     cassandra.jenkins.controller: true
   scriptApproval:
@@ -294,7 +295,7 @@ agent:
               mountPath: /certs
     agent-dind-large: |
       - name: agent-dind-large
-        label: agent-dind cassandra-amd64-large
+        label: agent-dind cassandra-large cassandra-amd64-large 
cassandra-amd64-large-dedicated
         nodeSelector: 'cassandra.jenkins.agent.large=true'
         activeDeadlineSeconds: '0'
         idleMinutes: 1
diff --git a/build.xml b/build.xml
index 4c917b75f8..57080b3966 100644
--- a/build.xml
+++ b/build.xml
@@ -1874,14 +1874,6 @@
       </concat>
   </target>
 
-  <target name="microbench" depends="jar">
-    <antcall target="-microbench" inheritrefs="true"/>
-  </target>
-
-  <target name="microbench-with-profiler" depends="jar">
-    <antcall target="-microbench-with-profiler" inheritrefs="true"/>
-  </target>
-
   <!-- run arbitrary mains in tests, for example to run the long running 
memory tests with lots of memory pressure
       ant run-main 
-Dmainclass=org.apache.cassandra.utils.memory.LongBufferPoolTest 
-Dvmargs="-Xmx30m -XX:-UseGCOverheadLimit"
   -->
diff --git 
a/test/microbench/org/apache/cassandra/test/microbench/CompactionBench.java 
b/test/microbench/org/apache/cassandra/test/microbench/CompactionBench.java
index 8d7e800755..6ca814f564 100644
--- a/test/microbench/org/apache/cassandra/test/microbench/CompactionBench.java
+++ b/test/microbench/org/apache/cassandra/test/microbench/CompactionBench.java
@@ -52,7 +52,7 @@ public class CompactionBench extends CQLTester
     @Setup(Level.Trial)
     public void setup() throws Throwable
     {
-        CQLTester.prepareServer();
+        CQLTester.setUpClass();
         keyspace = createKeyspace("CREATE KEYSPACE %s with replication = { 
'class' : 'SimpleStrategy', 'replication_factor' : 1 } and durable_writes = 
false");
         table = createTable(keyspace, "CREATE TABLE %s ( userid bigint, picid 
bigint, commentid bigint, PRIMARY KEY(userid, picid))");
         execute("use "+keyspace+";");
diff --git 
a/test/microbench/org/apache/cassandra/test/microbench/MetadataCollectorBench.java
 
b/test/microbench/org/apache/cassandra/test/microbench/MetadataCollectorBench.java
index 85cffafb98..c03623efdb 100644
--- 
a/test/microbench/org/apache/cassandra/test/microbench/MetadataCollectorBench.java
+++ 
b/test/microbench/org/apache/cassandra/test/microbench/MetadataCollectorBench.java
@@ -30,6 +30,7 @@ import org.apache.cassandra.db.ClusteringPrefix.Kind;
 import org.apache.cassandra.db.marshal.LongType;
 import org.apache.cassandra.db.rows.BufferCell;
 import org.apache.cassandra.db.rows.Cell;
+import org.apache.cassandra.cql3.CQLTester;
 import org.apache.cassandra.io.sstable.metadata.MetadataCollector;
 import org.apache.cassandra.schema.ColumnMetadata;
 import org.apache.cassandra.schema.TableMetadata;
@@ -59,6 +60,7 @@ public class MetadataCollectorBench
     @Setup
     public void setup()
     {
+        CQLTester.setUpClass();
         TableMetadata.Builder tableMetadataBuilder = 
TableMetadata.builder("k", "t")
                                                                   
.addPartitionKeyColumn("pk", LongType.instance)
                                                                   
.addRegularColumn("rc", LongType.instance);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to