This is an automated email from the ASF dual-hosted git repository. ibessonov pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push: new a9ed167a50 IGNITE-20777 Fix IllegalAccessException on Java 17 (#2782) a9ed167a50 is described below commit a9ed167a5045ba166a6b3c84f8fb9df486579b14 Author: Ivan Bessonov <bessonov...@gmail.com> AuthorDate: Thu Nov 2 16:54:17 2023 +0300 IGNITE-20777 Fix IllegalAccessException on Java 17 (#2782) --- build.gradle | 1 + .../org/apache/ignite/internal/util/FeatureChecker.java | 1 + .../internal/raft/storage/logit/LogitLogStorageFactory.java | 13 +++++++++++++ packaging/common/bootstrap-functions.sh | 3 ++- packaging/db/build.gradle | 1 + 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 42f58c4e0a..be4b8f0ac4 100644 --- a/build.gradle +++ b/build.gradle @@ -70,6 +70,7 @@ allprojects { "--add-opens=java.base/java.util=ALL-UNNAMED", "--add-opens=java.base/java.time=ALL-UNNAMED", "--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED", + "--add-opens=java.base/sun.nio.ch=ALL-UNNAMED", "--add-opens=java.base/sun.security.x509=ALL-UNNAMED", "-Dio.netty.tryReflectionSetAccessible=true", "-XX:+HeapDumpOnOutOfMemoryError"] diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/FeatureChecker.java b/modules/core/src/main/java/org/apache/ignite/internal/util/FeatureChecker.java index f16885cdde..1883762668 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/FeatureChecker.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/FeatureChecker.java @@ -28,6 +28,7 @@ public class FeatureChecker { + "--add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED\n" + "--add-exports=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED\n" + "--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED\n" + + "--add-opens=java.base/sun.nio.ch=ALL-UNNAMED" + "--illegal-access=permit"; /** Java version specific warning to be added in case access failed. */ diff --git a/modules/raft/src/main/java/org/apache/ignite/internal/raft/storage/logit/LogitLogStorageFactory.java b/modules/raft/src/main/java/org/apache/ignite/internal/raft/storage/logit/LogitLogStorageFactory.java index 2bcb4cf1ec..a38628d8dc 100644 --- a/modules/raft/src/main/java/org/apache/ignite/internal/raft/storage/logit/LogitLogStorageFactory.java +++ b/modules/raft/src/main/java/org/apache/ignite/internal/raft/storage/logit/LogitLogStorageFactory.java @@ -20,10 +20,12 @@ package org.apache.ignite.internal.raft.storage.logit; import java.nio.file.Path; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; +import org.apache.ignite.internal.lang.IgniteInternalException; import org.apache.ignite.internal.logger.IgniteLogger; import org.apache.ignite.internal.logger.Loggers; import org.apache.ignite.internal.raft.storage.LogStorageFactory; import org.apache.ignite.internal.thread.NamedThreadFactory; +import org.apache.ignite.internal.util.FeatureChecker; import org.apache.ignite.raft.jraft.option.RaftOptions; import org.apache.ignite.raft.jraft.storage.LogStorage; import org.apache.ignite.raft.jraft.storage.logit.option.StoreOptions; @@ -31,6 +33,7 @@ import org.apache.ignite.raft.jraft.storage.logit.storage.LogitLogStorage; import org.apache.ignite.raft.jraft.util.ExecutorServiceHelper; import org.apache.ignite.raft.jraft.util.Requires; import org.apache.ignite.raft.jraft.util.StringUtils; +import sun.nio.ch.DirectBuffer; /** * Log storage factory for {@link LogitLogStorage} instances. @@ -59,6 +62,16 @@ public class LogitLogStorageFactory implements LogStorageFactory { checkpointExecutor = Executors.newSingleThreadScheduledExecutor( new NamedThreadFactory("logit-checkpoint-executor", LOG) ); + + checkVmOptions(); + } + + private static void checkVmOptions() { + try { + Class.forName(DirectBuffer.class.getName()); + } catch (Throwable e) { + throw new IgniteInternalException("sun.nio.ch.DirectBuffer is unavailable." + FeatureChecker.JAVA_VER_SPECIFIC_WARN, e); + } } @Override diff --git a/packaging/common/bootstrap-functions.sh b/packaging/common/bootstrap-functions.sh index cf61e629ce..2358250a20 100644 --- a/packaging/common/bootstrap-functions.sh +++ b/packaging/common/bootstrap-functions.sh @@ -27,7 +27,8 @@ ADD_OPENS_JAVA_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED \ --add-opens java.base/java.nio=ALL-UNNAMED \ --add-opens java.base/java.math=ALL-UNNAMED \ --add-opens java.base/java.util=ALL-UNNAMED \ - --add-opens java.base/jdk.internal.misc=ALL-UNNAMED " + --add-opens java.base/jdk.internal.misc=ALL-UNNAMED \ + --add-opens java.base/sun.nio.ch=ALL-UNNAMED " # used by rpm, deb, zip and docker distributions export COMMON_JAVA_OPTS=" diff --git a/packaging/db/build.gradle b/packaging/db/build.gradle index 55e34a5335..ce61ff2446 100644 --- a/packaging/db/build.gradle +++ b/packaging/db/build.gradle @@ -292,6 +292,7 @@ setupBuilder { "--add-opens=java.base/java.math=ALL-UNNAMED", "--add-opens=java.base/java.util=ALL-UNNAMED", "--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED", + "--add-opens=java.base/sun.nio.ch=ALL-UNNAMED", "-Dio.netty.tryReflectionSetAccessible=true", "-Djava.util.logging.config.file=etc\\ignite.java.util.logging.properties", "-Dio.netty.tryReflectionSetAccessible=true"]