diff --git a/CHANGES.txt b/CHANGES.txt index 4eb4c9a822..5ad47d72bd 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -13,6 +13,7 @@ * Add the ability to disable bulk loading of SSTables (CASSANDRA-18781) * Clean up obsolete functions and simplify cql_version handling in cqlsh (CASSANDRA-18787) Merged from 5.0: + * Update packaging shell includes (CASSANDRA-19283) * Fix data corruption in VectorCodec when using heap buffers (CASSANDRA-19167) * Avoid over-skipping of key iterators from static column indexes during mixed intersections (CASSANDRA-19278) * Make concurrent_index_builders configurable at runtime (CASSANDRA-19266) diff --git a/debian/patches/cassandra_in.sh_dirs.diff b/debian/patches/cassandra_in.sh_dirs.diff index 2926966c42..fe24fe3669 100644 --- a/debian/patches/cassandra_in.sh_dirs.diff +++ b/debian/patches/cassandra_in.sh_dirs.diff @@ -25,7 +25,7 @@ # This can be the path to a jar file, or a directory containing the # compiled classes. NOTE: This isn't needed by the startup script, -@@ -38,7 +38,7 @@ fi +@@ -45,7 +45,7 @@ fi # the default location for commitlogs, sstables, and saved caches # if not set in cassandra.yaml @@ -33,9 +33,9 @@ +cassandra_storagedir=/var/lib/cassandra # JAVA_HOME can optionally be set here - #JAVA_HOME=/usr/local/jdk11 -@@ -47,6 +47,10 @@ for jar in "$CASSANDRA_HOME"/lib/*.jar; do - CLASSPATH="$CLASSPATH:$jar" + #JAVA_HOME=/usr/local/jdk6 +@@ -59,6 +59,10 @@ for jsr223jar in "$CASSANDRA_HOME"/lib/jsr223/*/*.jar; do + CLASSPATH="$CLASSPATH:$jsr223jar" done +for jar in "$CASSANDRA_HOME"/*.jar; do @@ -44,56 +44,4 @@ + 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 + # JSR223/JRuby - set ruby lib directory diff --git a/redhat/cassandra.in.sh b/redhat/cassandra.in.sh index 9a89bc3564..c08a8316af 100644 --- a/redhat/cassandra.in.sh +++ b/redhat/cassandra.in.sh @@ -1,4 +1,3 @@ -# # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information @@ -14,7 +13,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -# + # The directory where Cassandra's configs live (required) CASSANDRA_CONF=/etc/cassandra/conf @@ -25,23 +24,71 @@ CASSANDRA_HOME=/usr/share/cassandra if [ -n "$CLASSPATH" ]; then CLASSPATH=$CLASSPATH:$CASSANDRA_CONF else - CLASSPATH=$CASSANDRA_CONF + CLASSPATH="$CASSANDRA_CONF" fi -for jar in /usr/share/cassandra/lib/*.jar; do - CLASSPATH=$CLASSPATH:$jar +# This can be the path to a jar file, or a directory containing the +# compiled classes. NOTE: This isn't needed by the startup script, +# it's just used here in constructing the classpath. +if [ -d $CASSANDRA_HOME/build ] ; then + jars_cnt="`ls -1 $CASSANDRA_HOME/build/apache-cassandra*.jar | grep -v 'javadoc.jar' | grep -v 'sources.jar' | wc -l | xargs echo`" + if [ "$jars_cnt" -gt 1 ]; then + dir="`cd $CASSANDRA_HOME/build; pwd`" + echo "There are JAR artifacts for multiple versions in the $dir directory. Please clean the project with 'ant realclean' and build it again." 1>&2 + exit 1 + fi + + if [ "$jars_cnt" = "1" ]; then + cassandra_bin="`ls -1 $CASSANDRA_HOME/build/apache-cassandra*.jar | grep -v javadoc | grep -v sources`" + CLASSPATH="$CLASSPATH:$cassandra_bin" + fi +fi + +# the default location for commitlogs, sstables, and saved caches +# if not set in cassandra.yaml +cassandra_storagedir=/var/lib/cassandra + +# JAVA_HOME can optionally be set here +#JAVA_HOME=/usr/local/jdk6 + +for jar in "$CASSANDRA_HOME"/lib/*.jar; do + CLASSPATH="$CLASSPATH:$jar" done -for jar in /usr/share/cassandra/*.jar; do - CLASSPATH=$CLASSPATH:$jar +# JSR223 - collect all JSR223 engines' jars +for jsr223jar in "$CASSANDRA_HOME"/lib/jsr223/*/*.jar; do + CLASSPATH="$CLASSPATH:$jsr223jar" +done + +for jar in "$CASSANDRA_HOME"/*.jar; do + CLASSPATH="$CLASSPATH:$jar" done CLASSPATH="$CLASSPATH:$EXTRA_CLASSPATH" +# JSR223/JRuby - set ruby lib directory +if [ -d "$CASSANDRA_HOME"/lib/jsr223/jruby/ruby ] ; then + export JVM_OPTS="$JVM_OPTS -Djruby.lib=$CASSANDRA_HOME/lib/jsr223/jruby" +fi +# JSR223/JRuby - set ruby JNI libraries root directory +if [ -d "$CASSANDRA_HOME"/lib/jsr223/jruby/jni ] ; then + export JVM_OPTS="$JVM_OPTS -Djffi.boot.library.path=$CASSANDRA_HOME/lib/jsr223/jruby/jni" +fi +# JSR223/Jython - set python.home system property +if [ -f "$CASSANDRA_HOME"/lib/jsr223/jython/jython.jar ] ; then + export JVM_OPTS="$JVM_OPTS -Dpython.home=$CASSANDRA_HOME/lib/jsr223/jython" +fi +# JSR223/Scala - necessary system property +if [ -f "$CASSANDRA_HOME"/lib/jsr223/scala/scala-compiler.jar ] ; then + export JVM_OPTS="$JVM_OPTS -Dscala.usejavacp=true" +fi # set JVM javaagent opts to avoid warnings/errors JAVA_AGENT="$JAVA_AGENT -javaagent:$CASSANDRA_HOME/lib/jamm-0.4.0.jar" +# Added sigar-bin to the java.library.path CASSANDRA-7838 +JAVA_OPTS="$JAVA_OPTS:-Djava.library.path=$CASSANDRA_HOME/lib/sigar-bin" + platform=$(uname -m) if [ -d "$CASSANDRA_HOME"/lib/"$platform" ]; then for jar in "$CASSANDRA_HOME"/lib/"$platform"/*.jar ; do @@ -134,3 +181,11 @@ for opt in `grep "^-" $JVM_OPTS_FILE` `grep "^-" $JVM_DEP_OPTS_FILE` do JVM_OPTS="$JVM_OPTS $opt" done + +# Append additional options when using JDK17+ (CASSANDRA-19001) +USING_JDK=$(command -v javac || command -v "${JAVA_HOME:-/usr}/bin/javac") +if [ -n "$USING_JDK" ] && [ "$JAVA_VERSION" -ge 17 ]; then + JVM_OPTS="$JVM_OPTS --add-exports jdk.attach/sun.tools.attach=ALL-UNNAMED" + JVM_OPTS="$JVM_OPTS --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED" + JVM_OPTS="$JVM_OPTS --add-opens jdk.compiler/com.sun.tools.javac=ALL-UNNAMED" +fi