This is an automated email from the ASF dual-hosted git repository. stoty pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/phoenix-omid.git
The following commit(s) were added to refs/heads/master by this push: new edc79fc3 OMID-272 Support JDK17 edc79fc3 is described below commit edc79fc3038d326c811ffe342bafccd9245c4ef7 Author: Istvan Toth <st...@apache.org> AuthorDate: Fri Jan 19 07:55:12 2024 +0100 OMID-272 Support JDK17 --- pom.xml | 55 +++++++++++++++++++++++++++++++ tso-server/bin/omid.sh | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 143 insertions(+) diff --git a/pom.xml b/pom.xml index 89d00561..f9dc9e60 100644 --- a/pom.xml +++ b/pom.xml @@ -209,6 +209,37 @@ <harmless.artifactId>hbase-client</harmless.artifactId> <harmless.version>${hbase.version}</harmless.version> <additionalparam>-Xdoclint:none</additionalparam> + + <!-- JDK module options, copied from HBase. Not all of these are strictly necessary for Omid --> + <surefire.Xmx>2200m</surefire.Xmx> + <surefire.Xms>1000m</surefire.Xms> + <omid-surefire.argLine>-enableassertions -Xmx${surefire.Xmx} + -Xms${surefire.Xms} -Djava.security.egd=file:/dev/./urandom -Djava.net.preferIPv4Stack=true + -Djava.awt.headless=true -Djdk.net.URLClassPath.disableClassPathURLCheck=true + -Dorg.apache.hbase.thirdparty.io.netty.leakDetection.level=advanced + -Dio.netty.eventLoopThreads=3 -Dio.opentelemetry.context.enableStrictContext=true</omid-surefire.argLine> + <!-- Keep these options in sync with add_jdk11_jvm_flags() in bin/omid.sh. + Currently, all of these options are known to be required by HBase, and not the test cases --> + <omid-surefire.jdk11.flags>-Dorg.apache.hbase.thirdparty.io.netty.tryReflectionSetAccessible=true + --add-modules jdk.unsupported + --add-opens java.base/java.io=ALL-UNNAMED + --add-opens java.base/java.nio=ALL-UNNAMED + --add-opens java.base/sun.nio.ch=ALL-UNNAMED + --add-opens java.base/java.lang=ALL-UNNAMED + --add-opens java.base/jdk.internal.ref=ALL-UNNAMED + --add-opens java.base/java.lang.reflect=ALL-UNNAMED + --add-opens java.base/java.util=ALL-UNNAMED + --add-opens java.base/java.util.concurrent=ALL-UNNAMED + --add-exports java.base/jdk.internal.misc=ALL-UNNAMED + --add-exports java.security.jgss/sun.security.krb5=ALL-UNNAMED + --add-exports java.base/sun.net.dns=ALL-UNNAMED + --add-exports java.base/sun.net.util=ALL-UNNAMED</omid-surefire.jdk11.flags> + <!-- java.base/jdk.internal.util.random=ALL-UNNAMED is required by the HBase test code, so we do + not need this in bin/ --> + <!-- We probably do not need this at all for Omid, but it's easier to keep in sync with + HBase this way --> + <omid-surefire.jdk17.flags>--add-opens java.base/jdk.internal.util.random=ALL-UNNAMED</omid-surefire.jdk17.flags> + <argLine>${omid-surefire.argLine}</argLine> </properties> <build> @@ -481,6 +512,30 @@ <profiles> + <profile> + <id>build-with-jdk11</id> + <activation> + <jdk>[11,)</jdk> + </activation> + <properties> + <maven.compiler.release>${releaseTarget}</maven.compiler.release> + <!-- TODO: replicate logic for windows support --> + <argLine>${omid-surefire.jdk11.flags} + ${omid-surefire.argLine}</argLine> + </properties> + </profile> + + <profile> + <id>build-with-jdk17</id> + <activation> + <jdk>[17,)</jdk> + </activation> + <properties> + <argLine>${omid-surefire.jdk11.flags} + ${omid-surefire.jdk17.flags} + ${omid-surefire.argLine}</argLine> + </properties> + </profile> <profile> <id>site-deploy</id> diff --git a/tso-server/bin/omid.sh b/tso-server/bin/omid.sh index fa5afac5..01e918bb 100755 --- a/tso-server/bin/omid.sh +++ b/tso-server/bin/omid.sh @@ -39,6 +39,92 @@ for j in ../lib/*.jar; do CLASSPATH=$CLASSPATH:$j done +#JVM detection and list of JDK11 options copied from HBase with slight modifications + +function read_java_version() { + # Avoid calling java repeatedly + if [ -z "$read_java_version_cached" ]; then + properties="$("${JAVA_HOME}/bin/java" -XshowSettings:properties -version 2>&1)" + read_java_version_cached="$(echo "${properties}" | "${GREP}" java.runtime.version | head -1 | "${SED}" -e 's/.* = \([^ ]*\)/\1/')" + fi + echo "$read_java_version_cached" +} + +# Inspect the system properties exposed by this JVM to identify the major +# version number. Normalize on the popular version number, thus consider JDK +# 1.8 as version "8". +function parse_java_major_version() { + complete_version=$1 + # split off suffix version info like '-b10' or '+10' or '_10' + # careful to not use GNU Sed extensions + version="$(echo "$complete_version" | "${SED}" -e 's/+/_/g' -e 's/-/_/g' | cut -d'_' -f1)" + case "$version" in + 1.*) + echo "$version" | cut -d'.' -f2 + ;; + *) + echo "$version" | cut -d'.' -f1 + ;; + esac +} + +add_jdk11_jvm_flags() { + # Keep in sync with omid-surefire.jdk11.flags in the root pom.xml + OMID_OPTS="$OMID_OPTS -Dorg.apache.hbase.thirdparty.io.netty.tryReflectionSetAccessible=true --add-modules jdk.unsupported --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/jdk.internal.ref=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL [...] +} + +setup_jdk_options() { + + # We don't actually add any JARs, but this is copied from HBase which does + addJDK11Jars=false + + if [ "${OMID_JDK11}" != "" ]; then + # Use the passed Environment Variable HBASE_JDK11 + if [ "${OMID_JDK11}" = "include" ]; then + addJDK11Jars=true + if [ "${DEBUG}" = "true" ]; then + echo "OMID_JDK11 set as 'include' hence adding JDK11 jars to classpath." + fi + elif [ "${OMID_JDK11}" = "exclude" ]; then + if [ "${DEBUG}" = "true" ]; then + echo "OMID_JDK11 set as 'exclude' hence skipping JDK11 jars to classpath." + fi + else + echo "[OMID_JDK11] contains unsupported value(s) - ${HBASE_JDK11}. Ignoring passed value." + echo "[OMID_JDK11] supported values: [include, exclude]." + fi + else + # Use JDK detection + export GREP="${GREP-grep}" + export SED="${SED-sed}" + version="$(read_java_version)" + major_version_number="$(parse_java_major_version "$version")" + + if [ "${DEBUG}" = "true" ]; then + echo "OMID_JDK11 not set hence using JDK detection." + echo "Extracted JDK version - ${version}, major_version_number - ${major_version_number}" + fi + + if [[ "$major_version_number" -ge "11" ]]; then + if [ "${DEBUG}" = "true" ]; then + echo "Version ${version} is greater-than/equal to 11 hence adding JDK11 jars to classpath." + fi + addJDK11Jars=true + elif [ "${DEBUG}" = "true" ]; then + echo "Version ${version} is lesser than 11 hence skipping JDK11 jars from classpath." + fi + fi + + if [ "${addJDK11Jars}" = "true" ]; then + add_jdk11_jvm_flags + if [ "${DEBUG}" = "true" ]; then + echo "Added JDK11 JVM flags." + fi + elif [ "${DEBUG}" = "true" ]; then + echo "Skipped adding JDK11 JVM flags." + fi +} + tso() { exec java $JVM_FLAGS $OMID_OPTS -cp $CLASSPATH org.apache.omid.tso.TSOServer $@ } @@ -73,6 +159,8 @@ if [ $# = 0 ]; then exit 1 fi +setup_jdk_options + COMMAND=$1 shift