HBASE-28708 Remove the specific logic for jdk11 in hbase-assembly and change our script to only support jdk17 (#6069)
Signed-off-by: Xin Sun <sunxin@apache.org>
diff --git a/bin/hbase b/bin/hbase
index 81379ea..ff0c57c 100755
--- a/bin/hbase
+++ b/bin/hbase
@@ -158,15 +158,7 @@
# establish a default value for HBASE_OPTS if it's not already set. For now,
# all we set is the garbage collector.
if [ -z "${HBASE_OPTS}" ] ; then
- major_version_number="$(parse_java_major_version "$(read_java_version)")"
- case "$major_version_number" in
- 8|9|10)
- HBASE_OPTS="-XX:+UseConcMarkSweepGC"
- ;;
- 11|*)
- HBASE_OPTS="-XX:+UseG1GC"
- ;;
- esac
+ HBASE_OPTS="-XX:+UseG1GC"
export HBASE_OPTS
fi
@@ -487,17 +479,22 @@
CLASSPATH=${CLASSPATH}:$(cat "${f}")
}
-add_jdk11_deps_to_classpath() {
- for f in ${HBASE_HOME}/lib/jdk11/*; do
- if [ -f "${f}" ]; then
- CLASSPATH="${CLASSPATH}:${f}"
- fi
- done
-}
-
-add_jdk11_jvm_flags() {
- # Keep in sync with hbase-surefire.jdk11.flags in the root pom.xml
- HBASE_OPTS="$HBASE_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-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"
+add_jdk17_jvm_flags() {
+ # Keep in sync with hbase-surefire.jdk17.flags in the root pom.xml
+ HBASE_OPTS="$HBASE_OPTS -Dorg.apache.hbase.thirdparty.io.netty.tryReflectionSetAccessible=true"
+ HBASE_OPTS="$HBASE_OPTS --add-modules jdk.unsupported"
+ HBASE_OPTS="$HBASE_OPTS --add-opens java.base/java.io=ALL-UNNAMED"
+ HBASE_OPTS="$HBASE_OPTS --add-opens java.base/java.nio=ALL-UNNAMED"
+ HBASE_OPTS="$HBASE_OPTS --add-opens java.base/sun.nio.ch=ALL-UNNAMED"
+ HBASE_OPTS="$HBASE_OPTS --add-opens java.base/java.lang=ALL-UNNAMED"
+ HBASE_OPTS="$HBASE_OPTS --add-opens java.base/jdk.internal.ref=ALL-UNNAMED"
+ HBASE_OPTS="$HBASE_OPTS --add-opens java.base/java.lang.reflect=ALL-UNNAMED"
+ HBASE_OPTS="$HBASE_OPTS --add-opens java.base/java.util=ALL-UNNAMED"
+ HBASE_OPTS="$HBASE_OPTS --add-opens java.base/java.util.concurrent=ALL-UNNAMED"
+ HBASE_OPTS="$HBASE_OPTS --add-exports java.base/jdk.internal.misc=ALL-UNNAMED"
+ HBASE_OPTS="$HBASE_OPTS --add-exports java.security.jgss/sun.security.krb5=ALL-UNNAMED"
+ HBASE_OPTS="$HBASE_OPTS --add-exports java.base/sun.net.dns=ALL-UNNAMED"
+ HBASE_OPTS="$HBASE_OPTS --add-exports java.base/sun.net.util=ALL-UNNAMED"
}
add_opentelemetry_agent() {
@@ -566,12 +563,6 @@
fi
HBASE_OPTS="$HBASE_OPTS $HBASE_SHELL_OPTS"
elif [ "$COMMAND" = 'jshell' ] ; then
- java_version="$(read_java_version)"
- major_version_number="$(parse_java_major_version "${java_version}")"
- if [ "${major_version_number}" -lt 9 ] ; then
- echo "JShell is available only with JDK9 and lated. Detected JDK version is ${java_version}".
- exit 1
- fi
CLASS='jdk.internal.jshell.tool.JShellToolProvider'
# set default values for HBASE_JSHELL_ARGS
read -r -a JSHELL_ARGS <<< "${HBASE_JSHELL_ARGS:-"--startup DEFAULT --startup PRINTING --startup ${HBASE_HOME}/bin/hbase_startup.jsh"}"
@@ -784,59 +775,9 @@
fi
fi
-# Add lib/jdk11 jars to the classpath
-
+add_jdk17_jvm_flags
if [ "${DEBUG}" = "true" ]; then
- echo "Deciding on addition of lib/jdk11 jars to the classpath and setting JVM module flags"
-fi
-
-addJDK11Jars=false
-
-if [ "${HBASE_JDK11}" != "" ]; then
- # Use the passed Environment Variable HBASE_JDK11
- if [ "${HBASE_JDK11}" = "include" ]; then
- addJDK11Jars=true
- if [ "${DEBUG}" = "true" ]; then
- echo "HBASE_JDK11 set as 'include' hence adding JDK11 jars to classpath."
- fi
- elif [ "${HBASE_JDK11}" = "exclude" ]; then
- if [ "${DEBUG}" = "true" ]; then
- echo "HBASE_JDK11 set as 'exclude' hence skipping JDK11 jars to classpath."
- fi
- else
- echo "[HBASE_JDK11] contains unsupported value(s) - ${HBASE_JDK11}. Ignoring passed value."
- echo "[HBASE_JDK11] supported values: [include, exclude]."
- fi
-else
- # Use JDK detection
- version="$(read_java_version)"
- major_version_number="$(parse_java_major_version "$version")"
-
- if [ "${DEBUG}" = "true" ]; then
- echo "HBASE_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_deps_to_classpath
- add_jdk11_jvm_flags
- if [ "${DEBUG}" = "true" ]; then
- echo "Added JDK11 jars to classpath."
- echo "Added JDK11 JVM flags too."
- fi
-elif [ "${DEBUG}" = "true" ]; then
- echo "JDK11 jars skipped from classpath."
- echo "Skipped adding JDK11 JVM flags."
+ echo "Added JDK17 JVM flags."
fi
if [[ "${HBASE_OTEL_TRACING_ENABLED:-false}" = "true" ]] ; then
diff --git a/bin/hbase-config.sh b/bin/hbase-config.sh
index 0e8b3fe..d9afa19 100644
--- a/bin/hbase-config.sh
+++ b/bin/hbase-config.sh
@@ -164,17 +164,17 @@
# Now having JAVA_HOME defined is required
if [ -z "$JAVA_HOME" ]; then
- cat 1>&2 <<EOF
+ cat 1>&2 <<EOF
+======================================================================+
| Error: JAVA_HOME is not set |
+----------------------------------------------------------------------+
| Please download the latest Sun JDK from the Sun Java web site |
| > http://www.oracle.com/technetwork/java/javase/downloads |
| |
-| HBase requires Java 1.8 or later. |
+| HBase requires Java 17 or later. |
+======================================================================+
EOF
- exit 1
+ exit 1
fi
function read_java_version() {
@@ -203,3 +203,11 @@
;;
esac
}
+
+# test whether we are on jdk17 or above
+java_version="$(read_java_version)"
+major_version_number="$(parse_java_major_version "$java_version")"
+if [ "${major_version_number}" -lt 17 ] ; then
+ echo "HBase can only be run on JDK17 and later. Detected JDK version is ${java_version}".
+ exit 1
+fi
diff --git a/hbase-assembly/src/main/assembly/hadoop-three-compat.xml b/hbase-assembly/src/main/assembly/hadoop-three-compat.xml
index 27962b6..244de76 100644
--- a/hbase-assembly/src/main/assembly/hadoop-three-compat.xml
+++ b/hbase-assembly/src/main/assembly/hadoop-three-compat.xml
@@ -65,36 +65,7 @@
<dependencySets>
<dependencySet>
<excludes>
- <!-- Exclude J2EE libraries that get pulled in when building on JDK11 -->
- <exclude>com.sun.activation:javax.activation</exclude>
- <!-- The following artifacts are transitive dependencies of com.sun.xml.ws:jaxws-ri:pom
- They are needed to be included in lib/jdk11 to be added to classpath during
- Java 11 runtime hence excluding from main lib.
- -->
- <exclude>com.sun.xml.ws:*</exclude>
- <exclude>jakarta.annotation:jakarta.annotation-api</exclude>
- <exclude>org.glassfish.jaxb:*</exclude>
- <exclude>com.sun.istack:istack-commons-runtime</exclude>
- <exclude>org.glassfish.gmbal:gmbal</exclude>
- <exclude>org.glassfish.external:management-api</exclude>
- <exclude>org.glassfish.pfl:*</exclude>
- <exclude>org.jvnet.staxex:stax-ex</exclude>
- <exclude>com.sun.xml.stream.buffer:streambuffer</exclude>
- <exclude>org.jvnet.mimepull:mimepull</exclude>
- <exclude>com.sun.xml.fastinfoset:FastInfoset</exclude>
- <exclude>org.glassfish.ha:ha-api</exclude>
- <exclude>com.sun.xml.messaging.saaj:saaj-impl</exclude>
- <exclude>jakarta.activation:jakarta.activation-api</exclude>
- <exclude>com.sun.xml.bind:jaxb-xjc</exclude>
- <exclude>com.sun.xml.bind:jaxb-jxc</exclude>
- <exclude>jakarta.mail:jakarta.mail-api</exclude>
- <exclude>jakarta.persistence:jakarta.persistence-api</exclude>
- <exclude>org.eclipse.persistence:*</exclude>
- <exclude>jakarta.xml.ws:jakarta.xml.ws-api</exclude>
- <exclude>jakarta.xml.bind:jakarta.xml.bind-api</exclude>
- <exclude>jakarta.xml.soap:jakarta.xml.soap-api</exclude>
- <exclude>jakarta.jws:jakarta.jws-api</exclude>
- <!-- Exclude libraries that we put in their own dirs under lib/ -->
+ <!-- Exclude libraries that we put in their own dirs under lib/ -->
<exclude>org.jruby:jruby-complete</exclude>
<exclude>com.sun.jersey:*</exclude>
<exclude>com.sun.jersey.contribs:*</exclude>
@@ -222,42 +193,6 @@
</includes>
</dependencySet>
<dependencySet>
- <outputDirectory>lib/jdk11</outputDirectory>
- <useTransitiveDependencies>true</useTransitiveDependencies>
- <includes>
- <include>com.sun.activation:javax.activation</include>
- <!-- The following artifacts are transitive dependencies of com.sun.xml.ws:jaxws-ri:pom
- They are needed to be included in lib/jdk11 to be added to classpath during
- Java 11 runtime
- -->
- <include>com.sun.xml.ws:*</include>
- <include>jakarta.annotation:jakarta.annotation-api</include>
- <include>org.glassfish.jaxb:*</include>
- <include>com.sun.istack:istack-commons-runtime</include>
- <include>org.glassfish.gmbal:gmbal</include>
- <include>org.glassfish.external:management-api</include>
- <include>org.glassfish.pfl:*</include>
- <include>org.jvnet.staxex:stax-ex</include>
- <include>com.sun.xml.stream.buffer:streambuffer</include>
- <include>org.jvnet.mimepull:mimepull</include>
- <include>com.sun.xml.fastinfoset:FastInfoset</include>
- <include>org.glassfish.ha:ha-api</include>
- <include>com.sun.xml.messaging.saaj:saaj-impl</include>
- <include>com.fasterxml.woodstox:woodstox-core</include>
- <include>org.codehaus.woodstox:stax2-api</include>
- <include>jakarta.activation:jakarta.activation-api</include>
- <include>com.sun.xml.bind:jaxb-xjc</include>
- <include>com.sun.xml.bind:jaxb-jxc</include>
- <include>jakarta.mail:jakarta.mail-api</include>
- <include>jakarta.persistence:jakarta.persistence-api</include>
- <include>org.eclipse.persistence:*</include>
- <include>jakarta.xml.ws:jakarta.xml.ws-api</include>
- <include>jakarta.xml.bind:jakarta.xml.bind-api</include>
- <include>jakarta.xml.soap:jakarta.xml.soap-api</include>
- <include>jakarta.jws:jakarta.jws-api</include>
- </includes>
- </dependencySet>
- <dependencySet>
<outputDirectory>lib/trace</outputDirectory>
<includes>
<include>io.opentelemetry.javaagent:*</include>