This is an automated email from the ASF dual-hosted git repository. ptupitsyn pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push: new fc51f0e4327 IGNITE-19652 Adapt to DirectByteBuffer ctor changes in JDK 21 (#10764) fc51f0e4327 is described below commit fc51f0e43275953ab6a77c7f4d10ba32d1a640b6 Author: Mateusz "Serafin" Gajewski <git...@wendigo.pl> AuthorDate: Thu Jun 15 10:43:56 2023 +0200 IGNITE-19652 Adapt to DirectByteBuffer ctor changes in JDK 21 (#10764) Signature has changed in https://github.com/openjdk/jdk/commit/a56598f5a534cc9223367e7faa8433ea38661db9 --- .../main/java/org/apache/ignite/internal/util/GridUnsafe.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java index 9f4608a1f01..ef215493cac 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java @@ -114,6 +114,9 @@ public abstract class GridUnsafe { /** {@link java.nio.Buffer#address} field offset. */ private static final long DIRECT_BUF_ADDR_OFF = bufferAddressOffset(); + /** Whether to use newDirectByteBuffer(long, long) constructor */ + private static final boolean IS_DIRECT_BUF_LONG_CAP = majorJavaVersion(jdkVersion()) >= 21; + /** Cleaner code for direct {@code java.nio.ByteBuffer}. */ private static final DirectBufferCleaner DIRECT_BUF_CLEANER = majorJavaVersion(jdkVersion()) < 9 @@ -1641,7 +1644,8 @@ public abstract class GridUnsafe { try { Class<?> cls = nioAccessObj.getClass(); - Method mtd = cls.getMethod("newDirectByteBuffer", long.class, int.class, Object.class); + Method mtd = IS_DIRECT_BUF_LONG_CAP ? cls.getMethod("newDirectByteBuffer", long.class, long.class, Object.class) : + cls.getMethod("newDirectByteBuffer", long.class, int.class, Object.class); mtd.setAccessible(true); @@ -1660,7 +1664,6 @@ public abstract class GridUnsafe { return javaVer < 9 ? "sun" : "jdk.internal"; } - /** * Creates and tests contructor for Direct ByteBuffer. Test is wrapping one-byte unsafe memory into a buffer. * @@ -1696,7 +1699,8 @@ public abstract class GridUnsafe { try { ByteBuffer buf = ByteBuffer.allocateDirect(1).order(NATIVE_BYTE_ORDER); - Constructor<?> ctor = buf.getClass().getDeclaredConstructor(long.class, int.class); + Constructor<?> ctor = IS_DIRECT_BUF_LONG_CAP ? buf.getClass().getDeclaredConstructor(long.class, long.class) : + buf.getClass().getDeclaredConstructor(long.class, int.class); ctor.setAccessible(true);