From 6a6490a1c69a0dfd1517c23d20d9c172fae17d16 Mon Sep 17 00:00:00 2001 From: Josh McKenzie Date: Tue, 19 Nov 2024 13:27:03 -0500 Subject: [PATCH 01/14] Add JDK21 support Patch by Josh McKenzie; reviewed by TBD for CASSANDRA-18831 Co-authored-by: Aleksey Yeschenko Co-authored-by: Achilles Benetopoulos Co-authored-by: Mick Semb Wever --- .build/docker/_set_java.sh | 3 +- .build/docker/almalinux-build.docker | 1 + .build/docker/build-artifacts.sh | 2 +- .build/docker/build-debian.sh | 2 +- .build/docker/build-jars.sh | 2 +- .build/docker/check-code.sh | 2 +- ...lseye-build.docker => debian-build.docker} | 41 +- .build/docker/run-tests.sh | 2 +- ...ntu2004_test.docker => ubuntu-test.docker} | 9 +- .build/parent-maven-pom.xml | 19 +- .build/run-python-dtests.sh | 2 +- NEWS.txt | 24 + bin/cassandra.in.sh | 57 +-- build.xml | 114 ++++- conf/cassandra.yaml | 4 +- conf/jvm-server.options | 19 + conf/jvm17-server.options | 1 - conf/jvm21-clients.options | 53 +++ conf/jvm21-server.options | 115 +++++ debian/control | 4 +- .../configuration/cass_jvm_options_file.adoc | 13 +- .../managing/operating/audit_logging.adoc | 8 +- ide/idea/workspace.xml | 5 + pylib/cassandra-cqlsh-tests.sh | 2 +- redhat/cassandra.in.sh | 60 +-- redhat/cassandra.spec | 2 +- .../org/apache/cassandra/config/Config.java | 7 + .../cassandra/config/DatabaseDescriptor.java | 53 ++- .../db/commitlog/CommitLogSegment.java | 1 + .../sasi/utils/trie/AbstractPatriciaTrie.java | 2 +- .../index/sasi/utils/trie/PatriciaTrie.java | 2 +- .../cassandra/repair/RepairSession.java | 6 + .../repair/autorepair/AutoRepairState.java | 2 +- .../apache/cassandra/service/GCInspector.java | 122 ++++- .../cassandra/service/GCInspectorMXBean.java | 4 + .../service/StorageServiceMBean.java | 2 +- .../cassandra/tools/AuditLogViewer.java | 4 +- .../tools/nodetool/EnableAuditLog.java | 2 +- .../tools/nodetool/EnableFullQueryLog.java | 2 +- .../org/apache/cassandra/utils/JavaUtils.java | 2 +- .../apache/cassandra/utils/MerkleTree.java | 6 + .../apache/cassandra/utils/MerkleTrees.java | 15 + .../apache/cassandra/utils/ObjectSizes.java | 5 + .../apache/cassandra/utils/binlog/BinLog.java | 19 +- .../cassandra/utils/binlog/BinLogOptions.java | 9 +- .../cassandra/utils/btree/BTreeSet.java | 34 ++ test/resources/nodetool/help/enableauditlog | 3 +- .../nodetool/help/enablefullquerylog | 3 +- .../simulator/asm/InterceptClasses.java | 2 +- .../simulator/asm/ShadowingTransformer.java | 6 + .../systems/InterceptorOfGlobalMethods.java | 27 +- .../simulator/systems/SimulatedTime.java | 5 +- .../cassandra/audit/AuditLoggerTest.java | 6 +- .../cassandra/audit/BinAuditLoggerTest.java | 4 +- .../db/commitlog/CommitlogShutdownTest.java | 5 +- .../db/memtable/MemtableQuickTest.java | 6 +- .../cassandra/fql/FullQueryLoggerTest.java | 12 +- .../hints/HintServiceBytemanTest.java | 14 +- .../cassandra/hints/HintsServiceTest.java | 10 + .../cassandra/net/MockMessagingService.java | 1 - .../cassandra/net/MockMessagingSpy.java | 40 +- .../cassandra/repair/RepairJobTest.java | 27 +- .../cassandra/service/GCInspectorTest.java | 32 +- .../cassandra/tools/AuditLogViewerTest.java | 25 +- .../cassandra/tools/BulkLoaderTest.java | 81 ++-- .../cassandra/tools/GetVersionTest.java | 2 +- .../cassandra/tools/OfflineToolUtils.java | 122 ++--- .../tools/SSTableExpiredBlockersTest.java | 2 +- .../tools/SSTableExportSchemaLoadingTest.java | 2 +- .../cassandra/tools/SSTableExportTest.java | 2 +- .../tools/SSTableLevelResetterTest.java | 2 +- .../tools/SSTableMetadataViewerTest.java | 4 +- .../tools/SSTableOfflineRelevelTest.java | 2 +- .../tools/SSTablePartitionsTest.java | 2 +- .../tools/SSTableRepairedAtSetterTest.java | 8 +- .../apache/cassandra/tools/ToolRunner.java | 1 + .../tools/ToolsSchemaLoadingTest.java | 10 +- .../tools/nodetool/GetAuditLogTest.java | 6 +- .../transport/MessagePayloadTest.java | 426 ++++++++---------- .../cassandra/utils/MerkleTreeTest.java | 10 +- .../cassandra/utils/binlog/BinLogTest.java | 12 +- tools/bin/cassandra.in.sh | 56 +-- .../cassandra/fqltool/commands/Dump.java | 4 +- 83 files changed, 1236 insertions(+), 611 deletions(-) rename .build/docker/{bullseye-build.docker => debian-build.docker} (55%) rename .build/docker/{ubuntu2004_test.docker => ubuntu-test.docker} (94%) create mode 100644 conf/jvm21-clients.options create mode 100644 conf/jvm21-server.options diff --git a/.build/docker/_set_java.sh b/.build/docker/_set_java.sh index ded68e1a167f..05b8445bdcff 100755 --- a/.build/docker/_set_java.sh +++ b/.build/docker/_set_java.sh @@ -56,7 +56,8 @@ fi ################################ if grep "^ID=" /etc/os-release | grep -q 'debian\|ubuntu' ; then - sudo update-java-alternatives --set java-1.${java_version}.0-openjdk-$(dpkg --print-architecture) + sudo update-alternatives --set java /usr/lib/jvm/java-${java_version}-openjdk-$(dpkg --print-architecture)/bin/java + sudo update-alternatives --set javac /usr/lib/jvm/java-${java_version}-openjdk-$(dpkg --print-architecture)/bin/javac else sudo alternatives --set java $(alternatives --display java | grep "family java-${java_version}-openjdk" | cut -d' ' -f1) sudo alternatives --set javac $(alternatives --display javac | grep "family java-${java_version}-openjdk" | cut -d' ' -f1) diff --git a/.build/docker/almalinux-build.docker b/.build/docker/almalinux-build.docker index 89832b67b346..43faed157866 100644 --- a/.build/docker/almalinux-build.docker +++ b/.build/docker/almalinux-build.docker @@ -42,6 +42,7 @@ RUN yum -y install \ git \ java-11-openjdk-devel \ java-17-openjdk-devel \ + java-21-openjdk-devel \ make \ rpm-build \ sudo \ diff --git a/.build/docker/build-artifacts.sh b/.build/docker/build-artifacts.sh index 85eec8300546..89b260fde444 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 debian-build.docker build-artifacts.sh $1 exit $? diff --git a/.build/docker/build-debian.sh b/.build/docker/build-debian.sh index e265fa5e8d20..e26d983dadee 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 debian-build.docker docker/_build-debian.sh $1 exit $? diff --git a/.build/docker/build-jars.sh b/.build/docker/build-jars.sh index b8039cb0a013..bf21b4564d45 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 debian-build.docker build-jars.sh $1 exit $? diff --git a/.build/docker/check-code.sh b/.build/docker/check-code.sh index 4afccaea98eb..38b56f9d0bab 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 debian-build.docker check-code.sh $1 diff --git a/.build/docker/bullseye-build.docker b/.build/docker/debian-build.docker similarity index 55% rename from .build/docker/bullseye-build.docker rename to .build/docker/debian-build.docker index b31bf03b3a75..db38a0b9abbf 100644 --- a/.build/docker/bullseye-build.docker +++ b/.build/docker/debian-build.docker @@ -36,16 +36,31 @@ RUN echo 'Acquire::http::Timeout "60";' > /etc/apt/apt.conf.d/80proxy.conf RUN echo 'Acquire::ftp::Timeout "60";' >> /etc/apt/apt.conf.d/80proxy.conf # install deps -RUN until apt-get update \ - && apt-get -y install ant build-essential curl devscripts ed git sudo \ +RUN until apt-get update && apt-get -y install ant build-essential curl devscripts ed git sudo \ python3-pip rsync procps dh-python quilt bash-completion ; \ do echo "apt failed… trying again in 10s… " ; sleep 10 ; done -RUN until apt-get update \ - && apt-get install -y --no-install-recommends openjdk-11-jdk openjdk-17-jdk ; \ +RUN until apt-get install -y --no-install-recommends openjdk-11-jdk openjdk-17-jdk; \ do echo "apt failed… trying again in 10s… " ; sleep 10 ; done -RUN update-java-alternatives --set java-1.11.0-openjdk-$(dpkg --print-architecture) +# Download and install OpenJDK 21.0.2 for the current architecture +RUN sh -c '\ + JDK_OS=linux ;\ + JDK_TAR="openjdk-21.0.2_${JDK_OS}-$(uname -m | sed "s/x86_64/x64/")_bin.tar.gz" ;\ + JDK_VERSION_SHAS="08db1392a48d4eb5ea5315cf8f18b89dbaf36cda663ba882cf03c704c9257ec2 a2def047a73941e01a73739f92755f86b895811afb1f91243db214cff5bdac3f 8fd09e15dc406387a0aba70bf5d99692874e999bf9cd9208b452b5d76ac922d3 b3d588e16ec1e0ef9805d8a696591bd518a5cea62567da8f53b5ce32d11d22e4" ;\ + curl -L --fail --silent --retry 2 --retry-delay 5 --max-time 3600 "https://download.java.net/java/GA/jdk21.0.2/f2283984656d49d69e91c558476027ac/13/GPL/${JDK_TAR}" -o $JDK_TAR ;\ + JDK_SHA="$(sha256sum $JDK_TAR | cut -d" " -f2)" ;\ + echo "$JDK_VERSION_SHAS" | sed "s/ /\n/g" | grep -q "$JDK_SHA" || { echo "SHA256 mismatch for $JDK_TAR $JDK_SHA"; exit 1; } ;\ + mkdir -p /usr/lib/jvm/java-21-openjdk-$(dpkg --print-architecture) ;\ + tar -C /usr/lib/jvm/java-21-openjdk-$(dpkg --print-architecture) --strip-components=1 -xzf $JDK_TAR ;\ + rm $JDK_TAR' + +# Add OpenJDK 21 to update-alternatives +RUN update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-21-openjdk-$(dpkg --print-architecture)/bin/java 1 +RUN update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-21-openjdk-$(dpkg --print-architecture)/bin/javac 1 + +RUN update-alternatives --set java /usr/lib/jvm/java-11-openjdk-$(dpkg --print-architecture)/bin/java +RUN update-alternatives --set javac /usr/lib/jvm/java-11-openjdk-$(dpkg --print-architecture)/bin/javac # python3 is needed for the gen-doc target RUN pip install --upgrade pip @@ -58,11 +73,8 @@ RUN sh -c '\ GO_VERSION="1.24.3" ;\ GO_VERSION_SHAS="3333f6ea53afa971e9078895eaa4ac7204a8c6b5c68c10e6bc9a33e8e391bdd8 a463cb59382bd7ae7d8f4c68846e73c4d589f223c589ac76871b66811ded7836 13e6fe3fcf65689d77d40e633de1e31c6febbdbcb846eb05fc2434ed2213e92b 64a3fa22142f627e78fac3018ce3d4aeace68b743eff0afda8aae0411df5e4fb" ;\ GO_OS=linux ;\ - [ $(uname) = "Darwin" ] && GO_OS=darwin ;\ - GO_PLATFORM=amd64 ;\ - [ $(uname -m) = "aarch64" ] && GO_PLATFORM=arm64 ;\ - GO_TAR="go${GO_VERSION}.${GO_OS}-${GO_PLATFORM}.tar.gz" ;\ - curl -L --fail --silent --retry 2 --retry-delay 5 --max-time 30 https://go.dev/dl/$GO_TAR -o $GO_TAR ;\ + GO_TAR="go${GO_VERSION}.${GO_OS}-$(dpkg --print-architecture).tar.gz" ;\ + curl -L --fail --silent --retry 2 --retry-delay 5 --max-time 3600 https://go.dev/dl/$GO_TAR -o $GO_TAR ;\ GO_SHA="$(sha256sum $GO_TAR | cut -d" " -f2)" ;\ echo "$GO_VERSION_SHAS" | sed "s/ /\n/g" | grep -q "$GO_SHA" || { echo "SHA256 mismatch for $GO_TAR $GO_SHA"; exit 1; } ;\ tar -C /usr/local -xzf $GO_TAR ;\ @@ -70,4 +82,11 @@ RUN sh -c '\ ENV GOROOT="/usr/local/go" ENV GOPATH="$BUILD_HOME/go" -ENV PATH="$PATH:/usr/local/go/bin" \ No newline at end of file +ENV PATH="$PATH:/usr/local/go/bin" + +# allow lower UIDs and GIDs +RUN sed -i 's/UID_MIN 1000/UID_MIN 100/' /etc/login.defs +RUN sed -i 's/UID_MIN 1000/UID_MIN 10/' /etc/login.defs + +# suppress warnings about mismatching ownership +RUN git config --global --add safe.directory ${CASSANDRA_DIR} \ No newline at end of file diff --git a/.build/docker/run-tests.sh b/.build/docker/run-tests.sh index 0133ae3522ac..2a3af69602aa 100755 --- a/.build/docker/run-tests.sh +++ b/.build/docker/run-tests.sh @@ -128,7 +128,7 @@ docker --version pushd ${cassandra_dir}/.build >/dev/null # build test image -dockerfile="ubuntu2004_test.docker" +dockerfile="ubuntu-test.docker" image_tag="$(md5sum docker/${dockerfile} | cut -d' ' -f1)" image_name="apache/cassandra-${dockerfile/.docker/}:${image_tag}" docker_mounts="-v ${cassandra_dir}:/home/cassandra/cassandra -v "${build_dir}":/home/cassandra/cassandra/build -v ${m2_dir}:/home/cassandra/.m2/repository" diff --git a/.build/docker/ubuntu2004_test.docker b/.build/docker/ubuntu-test.docker similarity index 94% rename from .build/docker/ubuntu2004_test.docker rename to .build/docker/ubuntu-test.docker index 9d19baef18b6..aefb59624c4b 100644 --- a/.build/docker/ubuntu2004_test.docker +++ b/.build/docker/ubuntu-test.docker @@ -11,7 +11,7 @@ # limitations under the License. FROM ubuntu:20.04 -MAINTAINER Apache Cassandra +LABEL org.opencontainers.image.authors="Apache Cassandra " # CONTEXT is expected to be cassandra/.build @@ -52,7 +52,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \ python3.11 python3.11-venv python3.11-dev \ virtualenv net-tools libev4 libev-dev wget gcc libxml2 libxslt1-dev \ vim lsof sudo libjemalloc2 dumb-init locales rsync \ - openjdk-8-jdk openjdk-11-jdk openjdk-17-jdk ant ant-optional + openjdk-8-jdk openjdk-11-jdk openjdk-17-jdk openjdk-21-jdk ant ant-optional RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.8 2 @@ -71,8 +71,9 @@ RUN chmod 0644 /opt/requirements.txt RUN pip3 install virtualenv virtualenv-clone RUN pip3 install --upgrade wheel -# make Java 8 the default executable (we use to run all tests against Java 8) -RUN update-java-alternatives --set java-1.8.0-openjdk-$(dpkg --print-architecture) +# make Java 11 the default executable +RUN update-alternatives --set java /usr/lib/jvm/java-11-openjdk-$(dpkg --print-architecture)/bin/java +RUN update-alternatives --set javac /usr/lib/jvm/java-11-openjdk-$(dpkg --print-architecture)/bin/javac # enable legacy TLSv1 and TLSv1.1 (CASSANDRA-16848) RUN find /etc -type f -name java.security -exec sed -i 's/TLSv1, TLSv1.1//' {} \; diff --git a/.build/parent-maven-pom.xml b/.build/parent-maven-pom.xml index c75e2545337b..b4110200217a 100644 --- a/.build/parent-maven-pom.xml +++ b/.build/parent-maven-pom.xml @@ -36,8 +36,8 @@ - 1.12.13 - 4.0.20 + 1.17.8 + 4.0.26 4.1.130.Final 0.5.1 4.2 @@ -494,13 +494,13 @@ org.mockito mockito-core - 4.7.0 + 5.12.0 test org.mockito mockito-inline - 4.7.0 + 5.2.0 test @@ -891,7 +891,8 @@ net.openhft chronicle-queue - 5.23.37 + + 5.25ea16 tools @@ -907,7 +908,7 @@ net.openhft chronicle-core - 2.23.36 + 2.25ea14 chronicle-analytics @@ -922,7 +923,7 @@ net.openhft chronicle-bytes - 2.23.33 + 2.25ea10 annotations @@ -933,7 +934,7 @@ net.openhft chronicle-wire - 2.23.39 + 2.25ea15 compiler @@ -949,7 +950,7 @@ net.openhft chronicle-threads - 2.23.25 + 2.25ea7 diff --git a/.build/run-python-dtests.sh b/.build/run-python-dtests.sh index 86652db0b83d..3884d03f5b55 100755 --- a/.build/run-python-dtests.sh +++ b/.build/run-python-dtests.sh @@ -124,7 +124,7 @@ set -e # enable immediate exit if venv setup fails # fresh virtualenv and test logs results everytime [[ "/" == "${DIST_DIR}" ]] || rm -rf "${DIST_DIR}/venv" "${DIST_DIR}/test/{html,output,logs}" -# re-use when possible the pre-installed virtualenv found in the cassandra-ubuntu2004_test docker image +# re-use when possible the pre-installed virtualenv found in the cassandra-ubuntu-test docker image virtualenv-clone ${BUILD_HOME}/env${python_version} ${DIST_DIR}/venv || virtualenv --python=python${python_version} ${DIST_DIR}/venv source ${DIST_DIR}/venv/bin/activate pip3 install --exists-action w -r ${CASSANDRA_DTEST_DIR}/requirements.txt diff --git a/NEWS.txt b/NEWS.txt index 724d860ea9bb..23eda46da063 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -80,6 +80,24 @@ using the provided 'sstableupgrade' tool. New features ------------ + - JDK21 and Generational ZGC is now officially supported. By default, when JDK21 is used the server params in + jvm21-server.options will be used. We do not recommend using non-generational ZGC with Apache Cassandra. The following + options are seeded in jvm21-server.options and can be set by the user based on use-case: + # Temporary workaround for jamm's incorrect default CompressedOops; if you're using ZGC this needs to be set + -XX:-UseCompressedOops + # Blanket enabling of all the THP / large pages available in the env + # -XX:+UseLargePages + # Max size ZGC will _attempt_ to stay below + # -XX:+SoftMaxHeapSize=12G + # Don't let ZGC return unclaimed memory to the OS by setting min and max == + # -Xms12G + # -Xmx12G + # Alternatively you can use this to disable returning memory to OS + # -XX:-ZUncommit + # Time memory should have been unused before eligible for uncommit in seconds + # -XX:ZUncommitDelay=300 + # Tell GC to touch heap and allocate and fault in memory pages backing heap at startup. Can prevent later allocation pauses + # -XX:+AlwaysPreTouch [The following is a placeholder, to be revised asap] - CEP-37 Auto Repair is a fully automated scheduler that provides repair orchestration within Apache Cassandra. This significantly reduces operational overhead by eliminating the need for operators to deploy external tools to submit @@ -204,6 +222,12 @@ Upgrading Deprecation ----------- - `use_deterministic_table_id` is no longer supported and should be removed from cassandra.yaml. Table IDs may still be supplied explicitly on CREATE. + - Updating dependencies for JDK21 necessitated updating Chronicle Queue, which has changed the enums used for log + rolling (cassandra.yaml -> full_query_logging_options:roll_cycle). Older legacy options will still work for the + foreseeable future but you will see warnings in logs and future dependency upgrades may break your log rolling param. + The default log rolling param has been changed from HOURLY to FAST_HOURLY, primarily different on how frequently + indexes are built (256 in FAST_HOURLY vs. 16 in HOURLY). + - IEndpointSnitch has been deprecated as ClusterMetadata is now the source of truth regarding topology information. The responsibilities of the snitch have been broken out to a handful of new classes: * o.a.c.locator.Locator provides datacenter and rack info for endpoints. This is not configurable as topology is diff --git a/bin/cassandra.in.sh b/bin/cassandra.in.sh index 881e425de1f8..42deeefdde9d 100644 --- a/bin/cassandra.in.sh +++ b/bin/cassandra.in.sh @@ -114,45 +114,44 @@ if [ -z $JAVA ] ; then fi # Matches variable 'java.supported' in build.xml -java_versions_supported=11,17 +java_versions_supported="11 17 21" +java_version_string=$(IFS=" "; echo "${java_versions_supported}") # Determine the sort of JVM we'll be running on. -java_ver_output=`"${JAVA:-java}" -version 2>&1` -jvmver=`echo "$java_ver_output" | grep '[openjdk|java] version' | awk -F'"' 'NR==1 {print $2}' | cut -d\- -f1` -JVM_VERSION=${jvmver%_*} -short=$(echo "${jvmver}" | cut -c1-2) - -# Unsupported JDKs below the upper supported version are not allowed -if [ "$short" != "$(echo "$java_versions_supported" | cut -d, -f1)" ] && [ "$JVM_VERSION" \< "$(echo "$java_versions_supported" | cut -d, -f2)" ] ; then - echo "Unsupported Java $JVM_VERSION. Supported are $java_versions_supported" - exit 1; -fi -# Allow execution of supported Java versions, and newer if CASSANDRA_JDK_UNSUPPORTED is set -is_supported_version=$(echo "$java_versions_supported" | tr "," '\n' | grep -F -x "$short") -if [ -z "$is_supported_version" ] ; then - if [ -z "$CASSANDRA_JDK_UNSUPPORTED" ] ; then - echo "Unsupported Java $JVM_VERSION. Supported are $java_versions_supported" - echo "If you would like to test with newer Java versions set CASSANDRA_JDK_UNSUPPORTED to any value (for example, CASSANDRA_JDK_UNSUPPORTED=true). Unset the parameter for default behavior" - exit 1; - else - echo "######################################################################" - echo "Warning! You are using JDK$short. This Cassandra version only supports $java_versions_supported." - echo "######################################################################" - fi +JAVA_VERSION=$(java -version 2>&1 | grep '[openjdk|java] version' | cut -d '"' -f2 | cut -d '.' -f1) + +supported=0 +for version in ${java_versions_supported}; do + if [ "$version" -eq "$JAVA_VERSION" ]; then + supported=1 + fi +done + +if [ "$supported" -eq 0 ]; then + if [ -z "$CASSANDRA_JDK_UNSUPPORTED" ]; then + echo "Unsupported Java $JAVA_VERSION. Supported are $java_version_string" + echo "If you would like to test with newer Java versions set CASSANDRA_JDK_UNSUPPORTED to any value (for example, CASSANDRA_JDK_UNSUPPORTED=true). Unset the parameter for default behavior" + exit 1 + else + echo "######################################################################" + echo "Warning! You are using JDK$JAVA_VERSION. This Cassandra version only supports $java_version_string" + echo "######################################################################" + fi fi -JAVA_VERSION=$short -jvm=`echo "$java_ver_output" | grep -A 1 '[openjdk|java] version' | awk 'NR==2 {print $1}'` +# TODO: Either remove the JVM_VENDOR and JVM_ARCH variables or explain where they're used. Appear vestigial. +java_ver_output=$("${JAVA:-java}" -version 2>&1) +jvm=$(echo "$java_ver_output" | grep -A 1 '[openjdk|java] version' | awk 'NR==2 {print $1}') case "$jvm" in OpenJDK) JVM_VENDOR=OpenJDK # this will be "64-Bit" or "32-Bit" - JVM_ARCH=`echo "$java_ver_output" | awk 'NR==3 {print $2}'` + JVM_ARCH=$(echo "$java_ver_output" | awk 'NR==3 {print $2}') ;; "Java(TM)") JVM_VENDOR=Oracle # this will be "64-Bit" or "32-Bit" - JVM_ARCH=`echo "$java_ver_output" | awk 'NR==3 {print $3}'` + JVM_ARCH=$(echo "$java_ver_output" | awk 'NR==3 {print $3}') ;; *) # Help fill in other JVM values @@ -163,7 +162,9 @@ esac # Read user-defined JVM options from jvm-server.options file JVM_OPTS_FILE=$CASSANDRA_CONF/jvm${jvmoptions_variant:--clients}.options -if [ $JAVA_VERSION -ge 17 ] ; then +if [ $JAVA_VERSION -ge 21 ] ; then + JVM_DEP_OPTS_FILE=$CASSANDRA_CONF/jvm21${jvmoptions_variant:--clients}.options +elif [ $JAVA_VERSION -ge 17 ] ; then JVM_DEP_OPTS_FILE=$CASSANDRA_CONF/jvm17${jvmoptions_variant:--clients}.options elif [ $JAVA_VERSION -ge 11 ] ; then JVM_DEP_OPTS_FILE=$CASSANDRA_CONF/jvm11${jvmoptions_variant:--clients}.options diff --git a/build.xml b/build.xml index b970240df4ec..943dcccdf9ff 100644 --- a/build.xml +++ b/build.xml @@ -45,7 +45,7 @@ The use of both CASSANDRA_USE_JDK11 and use-jdk11 is deprecated. --> - + @@ -173,7 +173,7 @@ - + @@ -323,14 +323,81 @@ --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED - --add-opens java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED + + + --add-opens java.base/java.util.concurrent=ALL-UNNAMED + --add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED + + -Djdk.attach.allowAttachSelf=true + + -XX:+UseZGC + -XX:+ZGenerational + + + -XX:-UseCompressedOops + + + + + + + + + + + + + + + + + -Djava.security.manager=allow + + --add-exports java.base/java.lang.ref=ALL-UNNAMED + --add-exports java.base/java.lang.reflect=ALL-UNNAMED + --add-exports java.base/jdk.internal.misc=ALL-UNNAMED + --add-exports java.base/jdk.internal.ref=ALL-UNNAMED + --add-exports java.base/sun.nio.ch=ALL-UNNAMED + --add-exports java.management.rmi/com.sun.jmx.remote.internal.rmi=ALL-UNNAMED + --add-exports java.rmi/sun.rmi.registry=ALL-UNNAMED + --add-exports java.rmi/sun.rmi.server=ALL-UNNAMED + --add-exports java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED + --add-exports java.sql/java.sql=ALL-UNNAMED + --add-exports jdk.unsupported/sun.misc=ALL-UNNAMED + --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED + --add-exports jdk.attach/sun.tools.attach=ALL-UNNAMED + + --add-opens java.base/java.io=ALL-UNNAMED + --add-opens java.base/java.lang=ALL-UNNAMED + --add-opens java.base/java.lang.module=ALL-UNNAMED + --add-opens java.base/java.lang.reflect=ALL-UNNAMED + --add-opens java.base/java.math=ALL-UNNAMED + --add-opens java.base/java.net=ALL-UNNAMED + --add-opens java.base/java.nio=ALL-UNNAMED + --add-opens java.base/java.util=ALL-UNNAMED + --add-opens java.base/java.util.concurrent=ALL-UNNAMED + --add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED + --add-opens java.base/jdk.internal.loader=ALL-UNNAMED + --add-opens java.base/jdk.internal.math=ALL-UNNAMED + --add-opens java.base/jdk.internal.module=ALL-UNNAMED + --add-opens java.base/jdk.internal.ref=ALL-UNNAMED + --add-opens java.base/jdk.internal.reflect=ALL-UNNAMED + --add-opens java.base/sun.nio.ch=ALL-UNNAMED + --add-opens java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED + --add-opens jdk.management/com.sun.management=ALL-UNNAMED + + + + + + + -XX:+CrashOnOutOfMemoryError + -XX:+HeapDumpOnOutOfMemoryError -XX:-CMSClassUnloadingEnabled -Dio.netty.tryReflectionSetAccessible=true -XX:MaxMetaspaceSize=2G + + -XX:+CrashOnOutOfMemoryError + -XX:+HeapDumpOnOutOfMemoryError -Dio.netty.tryReflectionSetAccessible=true + + --add-opens=java.base/java.lang=ALL-UNNAMED + --add-exports=java.base/jdk.internal.vm.annotation=ALL-UNNAMED + + + -XX:+CrashOnOutOfMemoryError + -XX:+HeapDumpOnOutOfMemoryError + -Dnet.bytebuddy.experimental=true + -Djava.security.manager=allow + -Dio.netty.tryReflectionSetAccessible=true + + + --add-opens=java.base/java.lang=ALL-UNNAMED + --add-exports=java.base/jdk.internal.vm.annotation=ALL-UNNAMED + + + + + -Djdk.reflect.useDirectMethodHandle=false + + + - + + + + @@ -484,9 +581,13 @@ Building Grammar ${build.src.antlr}/Cql.g ... + + failonerror="true" + fork="true" + outputproperty="antlr.output" + errorproperty="antlr.error"> @@ -1237,6 +1338,8 @@ + + - -XX:+CrashOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError -XX:-CMSClassUnloadingEnabled -Dio.netty.tryReflectionSetAccessible=true @@ -420,7 +419,6 @@ - -XX:+CrashOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError -Dio.netty.tryReflectionSetAccessible=true @@ -430,7 +428,6 @@ - -XX:+CrashOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError -Dnet.bytebuddy.experimental=true -Djava.security.manager=allow From 2fa8e784f680e0f4c7dceec8c9ca7880d9587574 Mon Sep 17 00:00:00 2001 From: Josh McKenzie Date: Fri, 21 Nov 2025 14:02:08 -0500 Subject: [PATCH 04/14] Fix RefCountedTest; add test debug on visitor walk in Ref --- .../cassandra/utils/concurrent/Ref.java | 33 ++++++++++++++++++- .../utils/concurrent/RefCountedTest.java | 18 ++++++++-- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/java/org/apache/cassandra/utils/concurrent/Ref.java b/src/java/org/apache/cassandra/utils/concurrent/Ref.java index e69ce34a4e4e..5008e6e5f32a 100644 --- a/src/java/org/apache/cassandra/utils/concurrent/Ref.java +++ b/src/java/org/apache/cassandra/utils/concurrent/Ref.java @@ -125,6 +125,10 @@ public final class Ref implements RefCounted public static final boolean DEBUG_EVENTS_ENABLED = TEST_DEBUG_REF_EVENTS.getBoolean(); static OnLeak ON_LEAK; + /** NOT INTENDED FOR USE OUTSIDE TESTS AND DEBUGGING */ + @VisibleForTesting + private static boolean TEST_TRACE_ENABLED = false; + @Shared(scope = SIMULATION) public interface OnLeak { @@ -146,6 +150,14 @@ public Ref(T referent, Tidy tidy) this.referent = referent; } + /** + * Generally don't go around mutating this willy-nilly in non-test code please. + */ + @VisibleForTesting + public static void enableTestTracing() { TEST_TRACE_ENABLED = true; } + @VisibleForTesting + public static void disableTestTracing() { TEST_TRACE_ENABLED = false; } + /** * Must be called exactly once, when the logical operation for which this Ref was created has terminated. * Failure to abide by this contract will result in an error (eventually) being reported, assuming a @@ -629,7 +641,7 @@ void traverse(final RefCounted.Tidy rootObject) { if (Thread.currentThread().isInterrupted()) throw new UncheckedInterruptedException(new InterruptedException()); - //If necessary fetch the next object to start tracing + // If necessary fetch the next object to start tracing if (inProgress == null) inProgress = path.pollLast(); @@ -646,6 +658,25 @@ void traverse(final RefCounted.Tidy rootObject) field = p.right; } + if (TEST_TRACE_ENABLED) + { + logger.debug("[Ref tracing for {}, Object: {}]", rootObject, child); + if (field != null && child != null) + { + logger.debug(" - Visiting field '{}' of object {} -> value class {}", + field.getName(), + inProgress.o.getClass().getName(), + child.getClass().getName()); + } + else if (field != null) + { + // Field exists but the next child is null – still useful to know the path. + logger.debug(" - Visiting field '{}' of object {} -> value is null", + field.getName(), + inProgress.o.getClass().getName()); + } + } + if (child != null && visited.add(child)) { path.offer(inProgress); diff --git a/test/unit/org/apache/cassandra/utils/concurrent/RefCountedTest.java b/test/unit/org/apache/cassandra/utils/concurrent/RefCountedTest.java index b8224bc90003..a85655274329 100644 --- a/test/unit/org/apache/cassandra/utils/concurrent/RefCountedTest.java +++ b/test/unit/org/apache/cassandra/utils/concurrent/RefCountedTest.java @@ -52,6 +52,8 @@ import org.apache.cassandra.utils.Pair; import org.apache.cassandra.utils.concurrent.Ref.Visitor; +import static org.apache.cassandra.config.CassandraRelevantProperties.JAVA_VERSION; +import static org.apache.cassandra.utils.JavaUtils.parseJavaVersion; import static org.assertj.core.api.Assertions.assertThat; @SuppressWarnings({"unused", "unchecked", "rawtypes"}) @@ -468,10 +470,10 @@ Runnable getRunOnCloseLambdaWithThis() private Set testCycles(Function runOnCloseSupplier) { LambdaTestClass test = new LambdaTestClass(); - Runnable weakRef = runOnCloseSupplier.apply(test); + Runnable supplierRef = runOnCloseSupplier.apply(test); RefCounted.Tidy tidier = new RefCounted.Tidy() { - Runnable ref = weakRef; + Runnable ref = supplierRef; public void tidy() { @@ -505,7 +507,17 @@ public String name() public void testCycles() { assertThat(testCycles(LambdaTestClass::getRunOnCloseLambdaWithThis)).isNotEmpty(); // sanity test - assertThat(testCycles(LambdaTestClass::getRunOnCloseInner)).isNotEmpty(); // sanity test + + // Behavior changed in JDK21; this was a sanity check to explore the way things worked but doesn't impact + // the correctness of the final actual check of the test. + int version = parseJavaVersion(JAVA_VERSION.getString()); + boolean runOnCloseInnerState = version >= 21; + + var result = testCycles(LambdaTestClass::getRunOnCloseInner); + if (runOnCloseInnerState) + assertThat(result).isEmpty(); + else + assertThat(result).isNotEmpty(); assertThat(testCycles(LambdaTestClass::getRunOnCloseLambda)).isEmpty(); } From 92d1ad943ad71f60d348df7caed5f914fad9bc36 Mon Sep 17 00:00:00 2001 From: Josh McKenzie Date: Mon, 1 Dec 2025 14:01:48 -0500 Subject: [PATCH 05/14] DEBUG: Remove timeout -k 5m command; see if pipelines finish --- .build/run-tests.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.build/run-tests.sh b/.build/run-tests.sh index 4a6d4e025265..3c79a9992f1a 100755 --- a/.build/run-tests.sh +++ b/.build/run-tests.sh @@ -248,14 +248,15 @@ _run_testlist() { local -r _results_uuid="$(command -v uuidgen >/dev/null 2>&1 && uuidgen || cat /proc/sys/kernel/random/uuid)" local failures=0 - local -r _test_timeout_secs=$((_test_timeout/1000)) + # local -r _test_timeout_secs=$((_test_timeout/1000)) for ((i=0; i < _test_iterations; i++)); do [ "${_test_iterations}" -eq 1 ] || printf "–––– run ${i}\n" set +o errexit + # TODO PRE COMMIT: Pull this out if we don't need it in the ASF PRECI space # We wrap this in a kill timeout since we fork for junit tests and OOMs or other hangs can make things pause for # much longer than desired. - timeout -k 5m "${_test_timeout_secs}s" \ - ant "$_testlist_target" \ + #timeout -k 5m "${_test_timeout_secs}s" \ + ant "$_testlist_target" \ -Dtest.classlistprefix="${_target_prefix}" \ -Dtest.classlistfile=<(echo "${testlist}") \ -Dtest.timeout="${_test_timeout}" \ From 0e2191219635859c46745cfa65f2276b9128135d Mon Sep 17 00:00:00 2001 From: Josh McKenzie Date: Thu, 15 Jan 2026 15:44:39 -0500 Subject: [PATCH 06/14] Fix imports in BinLog.java --- src/java/org/apache/cassandra/utils/binlog/BinLog.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/java/org/apache/cassandra/utils/binlog/BinLog.java b/src/java/org/apache/cassandra/utils/binlog/BinLog.java index aabb5f7faf44..7734862408c9 100644 --- a/src/java/org/apache/cassandra/utils/binlog/BinLog.java +++ b/src/java/org/apache/cassandra/utils/binlog/BinLog.java @@ -32,9 +32,6 @@ import com.google.common.base.Preconditions; import com.google.common.base.Strings; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import net.openhft.chronicle.core.io.BackgroundResourceReleaser; import net.openhft.chronicle.queue.ChronicleQueue; import net.openhft.chronicle.queue.ExcerptAppender; @@ -46,6 +43,9 @@ import net.openhft.chronicle.wire.WriteMarshallable; import net.openhft.posix.PosixAPI; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import org.apache.cassandra.concurrent.NamedThreadFactory; import org.apache.cassandra.io.FSError; import org.apache.cassandra.io.util.File; From ab490201a343af5f3dbb33c91b07dd99db4c77d5 Mon Sep 17 00:00:00 2001 From: Josh McKenzie Date: Fri, 16 Jan 2026 14:37:44 -0500 Subject: [PATCH 07/14] Final revisions pre-review --- .build/docker/build-artifacts.sh | 2 +- .build/docker/build-debian.sh | 2 +- .build/docker/build-jars.sh | 2 +- .build/docker/check-code.sh | 2 +- .build/docker/debian-build.docker | 7 +++++-- .build/docker/run-tests.sh | 2 +- .build/docker/ubuntu-test.docker | 2 +- .build/run-python-dtests.sh | 2 +- .build/run-tests.sh | 5 ----- NEWS.txt | 1 - conf/jvm17-server.options | 1 + ide/idea/workspace.xml | 1 - pylib/cassandra-cqlsh-tests.sh | 2 +- src/java/org/apache/cassandra/service/GCInspector.java | 5 +++++ .../cassandra/db/commitlog/CommitlogShutdownTest.java | 2 +- .../cassandra/db/compaction/AntiCompactionBytemanTest.java | 2 +- .../cassandra/db/compaction/CompactionsBytemanTest.java | 2 +- .../apache/cassandra/db/memtable/MemtableQuickTest.java | 6 +++--- .../org/apache/cassandra/hints/HintServiceBytemanTest.java | 2 +- test/unit/org/apache/cassandra/hints/HintsServiceTest.java | 3 ++- .../unit/org/apache/cassandra/service/GCInspectorTest.java | 3 ++- test/unit/org/apache/cassandra/utils/MerkleTreeTest.java | 2 +- 22 files changed, 31 insertions(+), 27 deletions(-) diff --git a/.build/docker/build-artifacts.sh b/.build/docker/build-artifacts.sh index 89b260fde444..85eec8300546 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 debian-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 e26d983dadee..e265fa5e8d20 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 debian-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 bf21b4564d45..b8039cb0a013 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 debian-build.docker build-jars.sh $1 +$(dirname "$0")/_docker_run.sh bullseye-build.docker build-jars.sh $1 exit $? diff --git a/.build/docker/check-code.sh b/.build/docker/check-code.sh index 38b56f9d0bab..4afccaea98eb 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 debian-build.docker check-code.sh $1 +$(dirname "$0")/_docker_run.sh bullseye-build.docker check-code.sh $1 diff --git a/.build/docker/debian-build.docker b/.build/docker/debian-build.docker index db38a0b9abbf..5327be51a466 100644 --- a/.build/docker/debian-build.docker +++ b/.build/docker/debian-build.docker @@ -73,8 +73,11 @@ RUN sh -c '\ GO_VERSION="1.24.3" ;\ GO_VERSION_SHAS="3333f6ea53afa971e9078895eaa4ac7204a8c6b5c68c10e6bc9a33e8e391bdd8 a463cb59382bd7ae7d8f4c68846e73c4d589f223c589ac76871b66811ded7836 13e6fe3fcf65689d77d40e633de1e31c6febbdbcb846eb05fc2434ed2213e92b 64a3fa22142f627e78fac3018ce3d4aeace68b743eff0afda8aae0411df5e4fb" ;\ GO_OS=linux ;\ - GO_TAR="go${GO_VERSION}.${GO_OS}-$(dpkg --print-architecture).tar.gz" ;\ - curl -L --fail --silent --retry 2 --retry-delay 5 --max-time 3600 https://go.dev/dl/$GO_TAR -o $GO_TAR ;\ + [ $(uname) = "Darwin" ] && GO_OS=darwin ;\ + GO_PLATFORM=amd64 ;\ + [ $(uname -m) = "aarch64" ] && GO_PLATFORM=arm64 ;\ + GO_TAR="go${GO_VERSION}.${GO_OS}-${GO_PLATFORM}.tar.gz" ;\ + curl -L --fail --silent --retry 2 --retry-delay 5 --max-time 30 https://go.dev/dl/$GO_TAR -o $GO_TAR ;\ GO_SHA="$(sha256sum $GO_TAR | cut -d" " -f2)" ;\ echo "$GO_VERSION_SHAS" | sed "s/ /\n/g" | grep -q "$GO_SHA" || { echo "SHA256 mismatch for $GO_TAR $GO_SHA"; exit 1; } ;\ tar -C /usr/local -xzf $GO_TAR ;\ diff --git a/.build/docker/run-tests.sh b/.build/docker/run-tests.sh index 2a3af69602aa..0133ae3522ac 100755 --- a/.build/docker/run-tests.sh +++ b/.build/docker/run-tests.sh @@ -128,7 +128,7 @@ docker --version pushd ${cassandra_dir}/.build >/dev/null # build test image -dockerfile="ubuntu-test.docker" +dockerfile="ubuntu2004_test.docker" image_tag="$(md5sum docker/${dockerfile} | cut -d' ' -f1)" image_name="apache/cassandra-${dockerfile/.docker/}:${image_tag}" docker_mounts="-v ${cassandra_dir}:/home/cassandra/cassandra -v "${build_dir}":/home/cassandra/cassandra/build -v ${m2_dir}:/home/cassandra/.m2/repository" diff --git a/.build/docker/ubuntu-test.docker b/.build/docker/ubuntu-test.docker index aefb59624c4b..798004e69e42 100644 --- a/.build/docker/ubuntu-test.docker +++ b/.build/docker/ubuntu-test.docker @@ -11,7 +11,7 @@ # limitations under the License. FROM ubuntu:20.04 -LABEL org.opencontainers.image.authors="Apache Cassandra " +MAINTAINER Apache Cassandra # CONTEXT is expected to be cassandra/.build diff --git a/.build/run-python-dtests.sh b/.build/run-python-dtests.sh index 3884d03f5b55..337870caa4fb 100755 --- a/.build/run-python-dtests.sh +++ b/.build/run-python-dtests.sh @@ -124,7 +124,7 @@ set -e # enable immediate exit if venv setup fails # fresh virtualenv and test logs results everytime [[ "/" == "${DIST_DIR}" ]] || rm -rf "${DIST_DIR}/venv" "${DIST_DIR}/test/{html,output,logs}" -# re-use when possible the pre-installed virtualenv found in the cassandra-ubuntu-test docker image +# re-use when possible the pre-installed virtualenv found in the cassandra2004_test docker image virtualenv-clone ${BUILD_HOME}/env${python_version} ${DIST_DIR}/venv || virtualenv --python=python${python_version} ${DIST_DIR}/venv source ${DIST_DIR}/venv/bin/activate pip3 install --exists-action w -r ${CASSANDRA_DTEST_DIR}/requirements.txt diff --git a/.build/run-tests.sh b/.build/run-tests.sh index 3c79a9992f1a..11980473646d 100755 --- a/.build/run-tests.sh +++ b/.build/run-tests.sh @@ -248,14 +248,9 @@ _run_testlist() { local -r _results_uuid="$(command -v uuidgen >/dev/null 2>&1 && uuidgen || cat /proc/sys/kernel/random/uuid)" local failures=0 - # local -r _test_timeout_secs=$((_test_timeout/1000)) for ((i=0; i < _test_iterations; i++)); do [ "${_test_iterations}" -eq 1 ] || printf "–––– run ${i}\n" set +o errexit - # TODO PRE COMMIT: Pull this out if we don't need it in the ASF PRECI space - # We wrap this in a kill timeout since we fork for junit tests and OOMs or other hangs can make things pause for - # much longer than desired. - #timeout -k 5m "${_test_timeout_secs}s" \ ant "$_testlist_target" \ -Dtest.classlistprefix="${_target_prefix}" \ -Dtest.classlistfile=<(echo "${testlist}") \ diff --git a/NEWS.txt b/NEWS.txt index 23eda46da063..3ff254ed9eac 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -227,7 +227,6 @@ Deprecation foreseeable future but you will see warnings in logs and future dependency upgrades may break your log rolling param. The default log rolling param has been changed from HOURLY to FAST_HOURLY, primarily different on how frequently indexes are built (256 in FAST_HOURLY vs. 16 in HOURLY). - - IEndpointSnitch has been deprecated as ClusterMetadata is now the source of truth regarding topology information. The responsibilities of the snitch have been broken out to a handful of new classes: * o.a.c.locator.Locator provides datacenter and rack info for endpoints. This is not configurable as topology is diff --git a/conf/jvm17-server.options b/conf/jvm17-server.options index 4a71852faf9a..9a695aa351d7 100644 --- a/conf/jvm17-server.options +++ b/conf/jvm17-server.options @@ -62,6 +62,7 @@ #-XX:ParallelGCThreads=16 #-XX:ConcGCThreads=16 + ### JPMS -Djdk.attach.allowAttachSelf=true diff --git a/ide/idea/workspace.xml b/ide/idea/workspace.xml index 4bc8699c9e48..6419f66b56d3 100644 --- a/ide/idea/workspace.xml +++ b/ide/idea/workspace.xml @@ -219,7 +219,6 @@ -XX:ReservedCodeCacheSize=256M -XX:Tier4CompileThreshold=1000 -XX:SoftRefLRUPolicyMSPerMB=0 - -Xmx4G -Dnet.bytebuddy.experimental=true -ea" />