From 589e83561c69679136250a009ed4035d73780d65 Mon Sep 17 00:00:00 2001 From: Tiewei Fang <43782773+BePPPower@users.noreply.github.com> Date: Mon, 29 Jan 2024 23:19:08 +0800 Subject: [PATCH] [Fix](jdk17) support start FE with JDK17 (#29658) (#30485) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue Number: close #30484 problem: gson will use Java's reflection mechanism to generate a default Adapter, but JDK17 is prohibited from visiting such an access. solution: gson has provided solutions since 2.9.1, which can bypass this problem: Add support for reflection access filter by Marcono1234 · Pull Request #1905 · google/gson We need to upgrade the gson version and use this solution --- conf/fe.conf | 2 +- .../src/main/java/org/apache/doris/persist/gson/GsonUtils.java | 2 ++ fe/pom.xml | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/conf/fe.conf b/conf/fe.conf index a8d3096389..4bae10ef22 100644 --- a/conf/fe.conf +++ b/conf/fe.conf @@ -39,7 +39,7 @@ JAVA_OPTS="-Djavax.security.auth.useSubjectCredsOnly=false -Xss4m -Xmx8192m -XX: JAVA_OPTS_FOR_JDK_9="-Djavax.security.auth.useSubjectCredsOnly=false -Xss4m -Xmx8192m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Xlog:gc*:$DORIS_HOME/log/fe.gc.log.$CUR_DATE:time -Dlog4j2.formatMsgNoLookups=true" # For jdk 16+, this JAVA_OPTS will be used as default JVM options -JAVA_OPTS_FOR_JDK_16="-Djavax.security.auth.useSubjectCredsOnly=false -XX:+UseZGC -Xmx8192m -Xms8192m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$DORIS_HOME/log/ -Xlog:gc*:$DORIS_HOME/log/fe.gc.log.$CUR_DATE:time --add-opens java.base/java.util.concurrent.locks=ALL-UNNAMED --add-opens java.base/java.security=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.ref=ALL-UNNAMED --add-opens java.base/java.util.regex=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED" +JAVA_OPTS_FOR_JDK_16="-Djavax.security.auth.useSubjectCredsOnly=false -XX:+UseZGC -Xmx8192m -Xms8192m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$DORIS_HOME/log/ -Xlog:gc*:$DORIS_HOME/log/fe.gc.log.$CUR_DATE:time" ## ## the lowercase properties are read by main program. diff --git a/fe/fe-core/src/main/java/org/apache/doris/persist/gson/GsonUtils.java b/fe/fe-core/src/main/java/org/apache/doris/persist/gson/GsonUtils.java index 54c109b61a..fb1b9d8b5f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/persist/gson/GsonUtils.java +++ b/fe/fe-core/src/main/java/org/apache/doris/persist/gson/GsonUtils.java @@ -122,6 +122,7 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParseException; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; +import com.google.gson.ReflectionAccessFilter; import com.google.gson.TypeAdapter; import com.google.gson.TypeAdapterFactory; import com.google.gson.annotations.SerializedName; @@ -282,6 +283,7 @@ public class GsonUtils { // Add any other adapters if necessary. private static final GsonBuilder GSON_BUILDER = new GsonBuilder().addSerializationExclusionStrategy( new HiddenAnnotationExclusionStrategy()).enableComplexMapKeySerialization() + .addReflectionAccessFilter(ReflectionAccessFilter.BLOCK_INACCESSIBLE_JAVA) .registerTypeHierarchyAdapter(Table.class, new GuavaTableAdapter()) .registerTypeHierarchyAdapter(Multimap.class, new GuavaMultimapAdapter()) .registerTypeAdapterFactory(new PostProcessTypeAdapterFactory()) diff --git a/fe/pom.xml b/fe/pom.xml index 33959e978d..f64538fecb 100644 --- a/fe/pom.xml +++ b/fe/pom.xml @@ -239,7 +239,7 @@ under the License. 1.5.1 1.10.0 1.7 - 2.8.9 + 2.10.1 32.1.2-jre 2.15.2 0.11-a-czt02-cdh