mirror of https://github.com/apache/cassandra
Prepare for JDK17 experimental support
Removes the use of CASSANDRA_USE_JDK11 and introduces the build.xml properties `java.default` and `java.supported`. patch by Mick Semb Wever; reviewed by Ekaterina Dimitrova for CASSANDRA-18179
This commit is contained in:
parent
a0ec0ae303
commit
86604f5038
|
|
@ -1,4 +1,5 @@
|
|||
4.2
|
||||
* Prepare for JDK17 experimental support (CASSANDRA-18179)
|
||||
* Remove Scripted UDFs internals; hooks to be added later in CASSANDRA-17281 (CASSANDRA-18252)
|
||||
* Update JNA to 5.13.0 (CASSANDRA-18050)
|
||||
* Make virtual tables decide if they implicitly enable ALLOW FILTERING (CASSANDRA-18238)
|
||||
|
|
|
|||
116
build.xml
116
build.xml
|
|
@ -37,6 +37,15 @@
|
|||
<property name="scm.developerConnection" value="scm:https://gitbox.apache.org/repos/asf/cassandra.git"/>
|
||||
<property name="scm.url" value="https://gitbox.apache.org/repos/asf?p=cassandra.git;a=tree"/>
|
||||
|
||||
<!-- JDKs supported.
|
||||
All releases are built with the default JDK.
|
||||
Builds with non-default JDKs are considered experimental and for development and testing purposes.
|
||||
When building, javac's source and target flags are set to the jdk used, so lower JDKs are not supported at runtime.
|
||||
The use of both CASSANDRA_USE_JDK11 and use-jdk11 is deprecated.
|
||||
-->
|
||||
<property name="java.default" value="1.8" />
|
||||
<property name="java.supported" value="1.8,11,17" />
|
||||
|
||||
<!-- directory details -->
|
||||
<property name="basedir" value="."/>
|
||||
<property name="build.src" value="${basedir}/src"/>
|
||||
|
|
@ -156,21 +165,16 @@
|
|||
<javac srcdir="test/anttasks" destdir="${test.classes}" includeantruntime="true"/>
|
||||
<taskdef name="KeepBriefBrief" classname="org.apache.cassandra.anttasks.KeepBriefBrief" classpath="${test.classes}"/>
|
||||
<KeepBriefBrief property="cassandra.keepBriefBrief"/>
|
||||
<taskdef name="JdkProperties" classname="org.apache.cassandra.anttasks.JdkProperties" classpath="${test.classes}"/>
|
||||
<JdkProperties/>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
|
||||
<condition property="java.version.8">
|
||||
<equals arg1="${ant.java.version}" arg2="1.8"/>
|
||||
</condition>
|
||||
<condition property="java.version.11">
|
||||
<!-- This includes every JDK other than 8; so JDK 9 is flagged as JDK 11, and JDK 17 is as well... at the moment this is desired behavior
|
||||
and may be relooked at once JDK 8 support is dropped -->
|
||||
<not><isset property="java.version.8"/></not>
|
||||
</condition>
|
||||
<fail message="Unsupported JDK version used: ${ant.java.version}"><condition><not><or>
|
||||
<isset property="java.version.8"/>
|
||||
<isset property="java.version.11"/>
|
||||
</or></not></condition></fail>
|
||||
<fail message="Unsupported JDK version used: ${ant.java.version}">
|
||||
<condition><not><contains string="${java.supported}" substring="${ant.java.version}"/></not></condition>
|
||||
</fail>
|
||||
<condition property="is.java.default"><equals arg1="${ant.java.version}" arg2="${java.default}"/></condition>
|
||||
<echo unless:true="${is.java.default}" message="Non default JDK version used: ${ant.java.version}"/>
|
||||
|
||||
<condition property="arch_x86">
|
||||
<equals arg1="${os.arch}" arg2="x86" />
|
||||
|
|
@ -262,17 +266,6 @@
|
|||
</not>
|
||||
</condition>
|
||||
|
||||
<condition property="build.java.11">
|
||||
<istrue value="${use.jdk11}"/>
|
||||
</condition>
|
||||
|
||||
<condition property="source.version" value="8" else="11">
|
||||
<equals arg1="${java.version.8}" arg2="true"/>
|
||||
</condition>
|
||||
<condition property="target.version" value="8" else="11">
|
||||
<equals arg1="${java.version.8}" arg2="true"/>
|
||||
</condition>
|
||||
|
||||
<!--
|
||||
Add all the dependencies.
|
||||
-->
|
||||
|
|
@ -314,57 +307,10 @@
|
|||
</sequential>
|
||||
</macrodef>
|
||||
|
||||
<target name="validate-build-conf">
|
||||
<condition property="use-jdk11">
|
||||
<or>
|
||||
<isset property="build.java.11"/>
|
||||
<istrue value="${env.CASSANDRA_USE_JDK11}"/>
|
||||
</or>
|
||||
</condition>
|
||||
<fail message="Inconsistent JDK11 options set">
|
||||
<condition>
|
||||
<and>
|
||||
<istrue value="${env.CASSANDRA_USE_JDK11}"/>
|
||||
<isset property="use.jdk11"/>
|
||||
<not>
|
||||
<istrue value="${use.jdk11}"/>
|
||||
</not>
|
||||
</and>
|
||||
</condition>
|
||||
</fail>
|
||||
<fail message="Inconsistent JDK11 options set">
|
||||
<condition>
|
||||
<and>
|
||||
<isset property="env.CASSANDRA_USE_JDK11"/>
|
||||
<not>
|
||||
<istrue value="${env.CASSANDRA_USE_JDK11}"/>
|
||||
</not>
|
||||
<istrue value="${use.jdk11}"/>
|
||||
</and>
|
||||
</condition>
|
||||
</fail>
|
||||
<fail message="-Duse.jdk11=true or $CASSANDRA_USE_JDK11=true cannot be set when building from java 8">
|
||||
<condition>
|
||||
<not><or>
|
||||
<not><isset property="java.version.8"/></not>
|
||||
<not><isset property="use-jdk11"/></not>
|
||||
</or></not>
|
||||
</condition>
|
||||
</fail>
|
||||
<fail message="-Duse.jdk11=true or $CASSANDRA_USE_JDK11=true must be set when building from java 11">
|
||||
<condition>
|
||||
<not><or>
|
||||
<isset property="java.version.8"/>
|
||||
<isset property="use-jdk11"/>
|
||||
</or></not>
|
||||
</condition>
|
||||
</fail>
|
||||
</target>
|
||||
|
||||
<!--
|
||||
Setup the output directories.
|
||||
-->
|
||||
<target name="init" depends="validate-build-conf">
|
||||
<target name="init" >
|
||||
<fail unless="is.source.artifact"
|
||||
message="Not a source artifact, stopping here." />
|
||||
<mkdir dir="${build.classes.main}"/>
|
||||
|
|
@ -492,11 +438,11 @@
|
|||
|
||||
<target name="_build_java">
|
||||
<!-- Note: we cannot use javac's 'release' option, as that does not allow accessing sun.misc.Unsafe nor
|
||||
Nashorn's ClassFilter class as any javac modules option is invalid for relase 8. -->
|
||||
<echo message="Compiling for Java ${target.version}..."/>
|
||||
Nashorn's ClassFilter class as any javac modules option is invalid for release 8. -->
|
||||
<echo message="Compiling for Java ${ant.java.version}..."/>
|
||||
<javac
|
||||
debug="true" debuglevel="${debuglevel}" encoding="utf-8"
|
||||
destdir="${build.classes.main}" includeantruntime="false" source="${source.version}" target="${target.version}">
|
||||
destdir="${build.classes.main}" includeantruntime="false" source="${ant.java.version}" target="${ant.java.version}">
|
||||
<src path="${build.src.java}"/>
|
||||
<src path="${build.src.gen-java}"/>
|
||||
<compilerarg value="-XDignore.symbol.file"/>
|
||||
|
|
@ -528,7 +474,7 @@
|
|||
|
||||
<target name="stress-build-test" depends="stress-build" description="Compile stress tests">
|
||||
<javac debug="true" debuglevel="${debuglevel}" destdir="${stress.test.classes}"
|
||||
source="${source.version}" target="${target.version}"
|
||||
source="${ant.java.version}" target="${ant.java.version}"
|
||||
includeantruntime="false" encoding="utf-8">
|
||||
<classpath>
|
||||
<path refid="cassandra.classpath.test"/>
|
||||
|
|
@ -545,7 +491,7 @@
|
|||
<target name="_stress_build">
|
||||
<mkdir dir="${stress.build.classes}" />
|
||||
<javac compiler="modern" debug="true" debuglevel="${debuglevel}"
|
||||
source="${source.version}" target="${target.version}"
|
||||
source="${ant.java.version}" target="${ant.java.version}"
|
||||
encoding="utf-8" destdir="${stress.build.classes}" includeantruntime="true">
|
||||
<src path="${stress.build.src}" />
|
||||
<classpath>
|
||||
|
|
@ -586,7 +532,7 @@
|
|||
|
||||
<target name="fqltool-build-test" depends="fqltool-build" description="Compile fqltool tests">
|
||||
<javac debug="true" debuglevel="${debuglevel}" destdir="${fqltool.test.classes}"
|
||||
source="${source.version}" target="${target.version}"
|
||||
source="${ant.java.version}" target="${ant.java.version}"
|
||||
includeantruntime="false" encoding="utf-8">
|
||||
<classpath>
|
||||
<path refid="cassandra.classpath.test"/>
|
||||
|
|
@ -603,7 +549,7 @@
|
|||
<target name="_fqltool_build">
|
||||
<mkdir dir="${fqltool.build.classes}" />
|
||||
<javac compiler="modern" debug="true" debuglevel="${debuglevel}"
|
||||
source="${source.version}" target="${target.version}"
|
||||
source="${ant.java.version}" target="${ant.java.version}"
|
||||
encoding="utf-8" destdir="${fqltool.build.classes}" includeantruntime="true">
|
||||
<src path="${fqltool.build.src}" />
|
||||
<classpath>
|
||||
|
|
@ -640,7 +586,7 @@
|
|||
<target name="_simulator-asm_build">
|
||||
<mkdir dir="${simulator-asm.build.classes}" />
|
||||
<javac compiler="modern" debug="true" debuglevel="${debuglevel}"
|
||||
source="${source.version}" target="${target.version}"
|
||||
source="${ant.java.version}" target="${ant.java.version}"
|
||||
encoding="utf-8" destdir="${simulator-asm.build.classes}" includeantruntime="true">
|
||||
<src path="${simulator-asm.build.src}" />
|
||||
<classpath>
|
||||
|
|
@ -657,7 +603,7 @@
|
|||
<target name="_simulator-bootstrap_build">
|
||||
<mkdir dir="${simulator-bootstrap.build.classes}" />
|
||||
<javac compiler="modern" debug="true" debuglevel="${debuglevel}"
|
||||
source="${source.version}" target="${target.version}"
|
||||
source="${ant.java.version}" target="${ant.java.version}"
|
||||
encoding="utf-8" destdir="${simulator-bootstrap.build.classes}" includeantruntime="true">
|
||||
<src path="${simulator-bootstrap.build.src}" />
|
||||
<classpath>
|
||||
|
|
@ -1011,8 +957,8 @@
|
|||
debuglevel="${debuglevel}"
|
||||
destdir="${test.classes}"
|
||||
includeantruntime="true"
|
||||
source="${source.version}"
|
||||
target="${target.version}"
|
||||
source="${ant.java.version}"
|
||||
target="${ant.java.version}"
|
||||
encoding="utf-8">
|
||||
<classpath>
|
||||
<path refid="cassandra.classpath.test"/>
|
||||
|
|
@ -1129,7 +1075,7 @@
|
|||
<jvmarg value="-Dcassandra.test.sstableformatdevelopment=true"/>
|
||||
<!-- The first time SecureRandom initializes can be slow if it blocks on /dev/random -->
|
||||
<jvmarg value="-Djava.security.egd=file:/dev/urandom" />
|
||||
<jvmarg value="-Dcassandra.testtag=@{testtag}"/>
|
||||
<jvmarg value="-Dcassandra.testtag=@{testtag}.jdk${ant.java.version}"/>
|
||||
<jvmarg value="-Dcassandra.keepBriefBrief=${cassandra.keepBriefBrief}" />
|
||||
<jvmarg value="-Dcassandra.strict.runtime.checks=true" />
|
||||
<jvmarg value="-Dcassandra.reads.thresholds.coordinator.defensive_checks_enabled=true" /> <!-- enable defensive checks -->
|
||||
|
|
@ -1923,9 +1869,9 @@
|
|||
failonerror="true"
|
||||
maxmemory="512m">
|
||||
<arg value="-source"/>
|
||||
<arg value="${source.version}" />
|
||||
<arg value="${java.default}" />
|
||||
<arg value="-target"/>
|
||||
<arg value="${target.version}" />
|
||||
<arg value="${ant.java.version}" />
|
||||
<arg value="-d" />
|
||||
<arg value="none" />
|
||||
<arg value="-proc:none" />
|
||||
|
|
|
|||
|
|
@ -26,11 +26,15 @@ Table 1 : Support Matrix for Java
|
|||
|===
|
||||
| |Java 8 (Run) |Java 11 (Run)
|
||||
|Java 8 (Build) |Supported |Supported
|
||||
|Java 11(Build) |Not Supported |Supported
|
||||
|Java 11(Build) |Not Supported |Experimental
|
||||
|===
|
||||
|
||||
Essentially Apache 4.0 source code built with Java 11 cannot be run with
|
||||
Java 8. Next, we shall discuss using each of Java 8 and 11 to build and
|
||||
Apache 4.0 source code built with Java 11 cannot be run with
|
||||
Java 8.
|
||||
|
||||
All binary releases are built with Java 8.
|
||||
|
||||
Next, we shall discuss using each of Java 8 and 11 to build and
|
||||
run Apache Cassandra 4.0.
|
||||
|
||||
== Using Java 8 to Build
|
||||
|
|
@ -42,18 +46,10 @@ RedHat Linux the command is as follows:
|
|||
$ sudo yum install java-1.8.0-openjdk-devel
|
||||
....
|
||||
|
||||
Set `JAVA_HOME` and `JRE_HOME` environment variables in the shell bash
|
||||
script. First, open the bash script:
|
||||
|
||||
....
|
||||
$ sudo vi ~/.bashrc
|
||||
....
|
||||
|
||||
Set the environment variables including the `PATH`.
|
||||
Set the environment variables `JAVA_HOME` and `PATH`.
|
||||
|
||||
....
|
||||
$ export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
|
||||
$ export JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk/jre
|
||||
$ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
|
||||
....
|
||||
|
||||
|
|
@ -68,7 +64,7 @@ If Cassandra is already running stop Cassandra with the following
|
|||
command.
|
||||
|
||||
....
|
||||
[ec2-user@ip-172-30-3-146 bin]$ ./nodetool stopdaemon
|
||||
$ ./nodetool stopdaemon
|
||||
....
|
||||
|
||||
Build the source code from the `cassandra` directory, which has the
|
||||
|
|
@ -143,53 +139,19 @@ and install Java 11 on RedHat Linux run the following command.
|
|||
$ yum install java-11-openjdk-devel
|
||||
....
|
||||
|
||||
Set the environment variables in the bash script for Java 11. The first
|
||||
command is to open the bash script.
|
||||
Set the environment variables `JAVA_HOME` and `PATH`.
|
||||
|
||||
....
|
||||
$ sudo vi ~/.bashrc
|
||||
$ export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
|
||||
$ export JRE_HOME=/usr/lib/jvm/java-11-openjdk/jre
|
||||
$ export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
|
||||
....
|
||||
|
||||
To build source code with Java 11 one of the following two options must
|
||||
be used.
|
||||
|
||||
____
|
||||
[arabic]
|
||||
. {blank}
|
||||
+
|
||||
Include Apache Ant command-line option `-Duse.jdk=11` as follows:::
|
||||
....
|
||||
$ ant -Duse.jdk=11
|
||||
....
|
||||
. {blank}
|
||||
+
|
||||
Set environment variable `CASSANDRA_USE_JDK11` to `true`:::
|
||||
....
|
||||
$ export CASSANDRA_USE_JDK11=true
|
||||
....
|
||||
____
|
||||
|
||||
As an example, set the environment variable `CASSANDRA_USE_JDK11` to
|
||||
`true`.
|
||||
|
||||
....
|
||||
[ec2-user@ip-172-30-3-146 cassandra]$ export CASSANDRA_USE_JDK11=true
|
||||
[ec2-user@ip-172-30-3-146 cassandra]$ ant
|
||||
Buildfile: /home/ec2-user/cassandra/build.xml
|
||||
....
|
||||
|
||||
Or, set the command-line option.
|
||||
|
||||
....
|
||||
[ec2-user@ip-172-30-3-146 cassandra]$ ant -Duse.jdk11=true
|
||||
....
|
||||
|
||||
The build output should include the following.
|
||||
The build output should now include the following.
|
||||
|
||||
....
|
||||
[echo] Non default JDK version used: 11
|
||||
...
|
||||
...
|
||||
_build_java:
|
||||
[echo] Compiling for Java 11
|
||||
...
|
||||
|
|
@ -215,36 +177,20 @@ jar:
|
|||
|
||||
BUILD SUCCESSFUL
|
||||
Total time: 1 minute 3 seconds
|
||||
[ec2-user@ip-172-30-3-146 cassandra]$
|
||||
....
|
||||
|
||||
== Common Issues
|
||||
|
||||
One of the two options mentioned must be used to compile with JDK 11 or
|
||||
the build fails and the following error message is output.
|
||||
|
||||
....
|
||||
[ec2-user@ip-172-30-3-146 cassandra]$ ant
|
||||
Buildfile: /home/ec2-user/cassandra/build.xml
|
||||
validate-build-conf:
|
||||
|
||||
BUILD FAILED
|
||||
/home/ec2-user/cassandra/build.xml:293: -Duse.jdk11=true or $CASSANDRA_USE_JDK11=true must
|
||||
be set when building from java 11
|
||||
Total time: 1 second
|
||||
[ec2-user@ip-172-30-3-146 cassandra]$
|
||||
....
|
||||
|
||||
The Java 11 built Apache Cassandra 4.0 source code may be run with Java
|
||||
11 only. If a Java 11 built code is run with Java 8 the following error
|
||||
message gets output.
|
||||
|
||||
....
|
||||
[root@localhost ~]# ssh -i cassandra.pem ec2-user@ec2-3-85-85-75.compute-1.amazonaws.com
|
||||
# ssh -i cassandra.pem ec2-user@ec2-3-85-85-75.compute-1.amazonaws.com
|
||||
Last login: Wed Jul 31 20:47:26 2019 from 75.155.255.51
|
||||
[ec2-user@ip-172-30-3-146 ~]$ echo $JAVA_HOME
|
||||
$ echo $JAVA_HOME
|
||||
/usr/lib/jvm/java-1.8.0-openjdk
|
||||
[ec2-user@ip-172-30-3-146 ~]$ cassandra
|
||||
$ cassandra
|
||||
...
|
||||
...
|
||||
Error: A JNI error has occurred, please check your installation and try again
|
||||
|
|
@ -258,33 +204,3 @@ class file versions up to 52.0
|
|||
...
|
||||
....
|
||||
|
||||
The `CASSANDRA_USE_JDK11` variable or the command-line option
|
||||
`-Duse.jdk11` cannot be used to build with Java 8. To demonstrate set
|
||||
`JAVA_HOME` to version 8.
|
||||
|
||||
....
|
||||
[root@localhost ~]# ssh -i cassandra.pem ec2-user@ec2-3-85-85-75.compute-1.amazonaws.com
|
||||
Last login: Wed Jul 31 21:41:50 2019 from 75.155.255.51
|
||||
[ec2-user@ip-172-30-3-146 ~]$ echo $JAVA_HOME
|
||||
/usr/lib/jvm/java-1.8.0-openjdk
|
||||
....
|
||||
|
||||
Set the `CASSANDRA_USE_JDK11=true` or command-line option
|
||||
`-Duse.jdk11=true`. Subsequently, run Apache Ant to start the build. The
|
||||
build fails with error message listed.
|
||||
|
||||
....
|
||||
[ec2-user@ip-172-30-3-146 ~]$ cd
|
||||
cassandra
|
||||
[ec2-user@ip-172-30-3-146 cassandra]$ export CASSANDRA_USE_JDK11=true
|
||||
[ec2-user@ip-172-30-3-146 cassandra]$ ant
|
||||
Buildfile: /home/ec2-user/cassandra/build.xml
|
||||
|
||||
validate-build-conf:
|
||||
|
||||
BUILD FAILED
|
||||
/home/ec2-user/cassandra/build.xml:285: -Duse.jdk11=true or $CASSANDRA_USE_JDK11=true cannot
|
||||
be set when building from java 8
|
||||
|
||||
Total time: 0 seconds
|
||||
....
|
||||
|
|
|
|||
|
|
@ -41,18 +41,9 @@ export CCM_HEAP_NEWSIZE="200M"
|
|||
export CCM_CONFIG_DIR=${WORKSPACE}/.ccm
|
||||
export NUM_TOKENS="16"
|
||||
export CASSANDRA_DIR=${WORKSPACE}
|
||||
export TESTSUITE_NAME="cqlshlib.${PYTHON_VERSION}"
|
||||
|
||||
if [ -z "$CASSANDRA_USE_JDK11" ]; then
|
||||
export CASSANDRA_USE_JDK11=false
|
||||
fi
|
||||
|
||||
if [ "$CASSANDRA_USE_JDK11" = true ] ; then
|
||||
TESTSUITE_NAME="${TESTSUITE_NAME}.jdk11"
|
||||
else
|
||||
TESTSUITE_NAME="${TESTSUITE_NAME}.jdk8"
|
||||
unset JAVA11_HOME
|
||||
fi
|
||||
java_version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | awk -F. '{print $1}')
|
||||
export TESTSUITE_NAME="cqlshlib.${PYTHON_VERSION}.jdk${java_version}"
|
||||
|
||||
ant -buildfile ${CASSANDRA_DIR}/build.xml realclean
|
||||
# Loop to prevent failure due to maven-ant-tasks not downloading a jar..
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* 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
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package org.apache.cassandra.anttasks;
|
||||
|
||||
import org.apache.tools.ant.Project;
|
||||
import org.apache.tools.ant.Task;
|
||||
|
||||
public class JdkProperties extends Task
|
||||
{
|
||||
|
||||
public void execute()
|
||||
{
|
||||
Project project = getProject();
|
||||
project.setNewProperty("java.version." + project.getProperty("ant.java.version"), "true");
|
||||
project.setNewProperty("use-jdk" + project.getProperty("ant.java.version"), "true");
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue