Limit cassandra startup to supported JDKs

Set CASSANDRA_JDK_UNSUPPORTED to use a newer JDK

patch by Shylaja Kokoori; reviewed by Berenguer Blasi, Ekaterina Dimitrova, Michael Semb Wever and Stefan Miklosovic for CASSANDRA-18688
This commit is contained in:
shyla226 2023-08-09 14:45:01 -07:00 committed by Ekaterina Dimitrova
parent 43eb2a4bde
commit 89e33a16ea
5 changed files with 118 additions and 18 deletions

View File

@ -1,4 +1,5 @@
5.1
* Limit cassandra startup to supported JDKs, allow higher JDKs by setting CASSANDRA_JDK_UNSUPPORTED (CASSANDRA-18688)
* Standardize nodetool tablestats formatting of data units (CASSANDRA-19104)
* Make nodetool tablestats use number of significant digits for time and average values consistently (CASSANDRA-19015)
* Upgrade jackson to 2.15.3 and snakeyaml to 2.1 (CASSANDRA-18875)

View File

@ -48,7 +48,7 @@ fi
cassandra_storagedir="$CASSANDRA_HOME/data"
# JAVA_HOME can optionally be set here
#JAVA_HOME=/usr/local/jdk6
# JAVA_HOME=/usr/local/jdk11
for jar in "$CASSANDRA_HOME"/lib/*.jar; do
CLASSPATH="$CLASSPATH:$jar"
@ -116,19 +116,34 @@ if [ -z $JAVA ] ; then
exit 1;
fi
# Matches variable 'java.supported' in build.xml
java_versions_supported=11,17
# 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)
JAVA_VERSION=17
if [ "$short" = "11" ] ; then
JAVA_VERSION=11
elif [ "$JVM_VERSION" \< "17" ] ; then
echo "Cassandra 5.0 requires Java 11 or Java 17."
# 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
fi
JAVA_VERSION=$short
jvm=`echo "$java_ver_output" | grep -A 1 '[openjdk|java] version' | awk 'NR==2 {print $1}'`
case "$jvm" in

View File

@ -33,7 +33,7 @@
+cassandra_storagedir=/var/lib/cassandra
# JAVA_HOME can optionally be set here
#JAVA_HOME=/usr/local/jdk6
#JAVA_HOME=/usr/local/jdk11
@@ -47,6 +47,10 @@ for jar in "$CASSANDRA_HOME"/lib/*.jar; do
CLASSPATH="$CLASSPATH:$jar"
done
@ -45,3 +45,55 @@
CLASSPATH="$CLASSPATH:$EXTRA_CLASSPATH"
# JSR223 - collect all JSR223 engines' jars
#
# Java executable and per-Java version JVM settings
#
# Use JAVA_HOME if set, otherwise look for java in PATH
if [ -n "$JAVA_HOME" ]; then
# Why we can't have nice things: Solaris combines x86 and x86_64
# installations in the same tree, using an unconventional path for the
# 64bit JVM. Since we prefer 64bit, search the alternate path first,
# (see https://issues.apache.org/jira/browse/CASSANDRA-4638).
for java in "$JAVA_HOME"/bin/amd64/java "$JAVA_HOME"/bin/java; do
if [ -x "$java" ]; then
JAVA="$java"
break
fi
done
else
JAVA=`command -v java 2> /dev/null`
fi
if [ -z $JAVA ] ; then
echo Unable to find java executable. Check JAVA_HOME and PATH environment variables. >&2
exit 1;
fi
# Matches variable 'java.supported' in build.xml
+java_versions_supported=11,17
# 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
+fi
+JAVA_VERSION=$short

View File

@ -74,19 +74,34 @@ if [ -z $JAVA ] ; then
exit 1;
fi
# Matches variable 'java.supported' in build.xml
java_versions_supported=11,17
# 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)
JAVA_VERSION=17
if [ "$short" = "11" ] ; then
JAVA_VERSION=11
elif [ "$JVM_VERSION" \< "17" ] ; then
echo "Cassandra 5.0 requires Java 11 or Java 17."
# 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
fi
JAVA_VERSION=$short
jvm=`echo "$java_ver_output" | grep -A 1 '[openjdk|java] version' | awk 'NR==2 {print $1}'`
case "$jvm" in

View File

@ -41,7 +41,7 @@ fi
cassandra_storagedir="$CASSANDRA_HOME/data"
# JAVA_HOME can optionally be set here
#JAVA_HOME=/usr/local/jdk6
#JAVA_HOME=/usr/local/jdk11
for jar in "$CASSANDRA_HOME"/tools/lib/*.jar; do
CLASSPATH="$CLASSPATH:$jar"
@ -76,19 +76,36 @@ if [ -z $JAVA ] ; then
exit 1;
fi
# Matches variable 'java.supported' in build.xml
java_versions_supported=11,17
# 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)
JAVA_VERSION=17
if [ "$short" = "11" ] ; then
JAVA_VERSION=11
elif [ "$JVM_VERSION" \< "17" ] ; then
echo "Cassandra 5.0 requires Java 11 or Java 17(or newer)."
# 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
fi
JAVA_VERSION=$short
jvm=`echo "$java_ver_output" | grep -A 1 '[openjdk|java] version' | awk 'NR==2 {print $1}'`
case "$jvm" in
OpenJDK)