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"]

Reply via email to