You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by li...@apache.org on 2023/06/29 17:37:34 UTC
[arrow] branch main updated: GH-35053: [Java] Fix MemoryUtil to support Java 21 (#36370)
This is an automated email from the ASF dual-hosted git repository.
lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/main by this push:
new bea7a34e26 GH-35053: [Java] Fix MemoryUtil to support Java 21 (#36370)
bea7a34e26 is described below
commit bea7a34e2671bf8084a1abac71745a47e28c9081
Author: Dongjoon Hyun <do...@apache.org>
AuthorDate: Thu Jun 29 10:37:27 2023 -0700
GH-35053: [Java] Fix MemoryUtil to support Java 21 (#36370)
### Rationale for this change
Java 21 switched `DirectByteBuffer(long,int)` constructor to `DirectByteBuffer(long,long)` via https://github.com/openjdk/jdk/commit/a56598f5a534cc9223367e7faa8433ea38661db9
### What changes are included in this PR?
In order to avoid `NoSuchMethodException` error in Java 21 environment, this PR aims to choose one of constructors based on the Java version like https://github.com/netty/netty/pull/13366 .
### Are these changes tested?
```
$ java -version
openjdk version "21-ea" 2023-09-19
OpenJDK Runtime Environment (build 21-ea+28-2377)
OpenJDK 64-Bit Server VM (build 21-ea+28-2377, mixed mode, sharing)
$ cd java
$ mvn clean package --am --pl memory/memory-core
...
[INFO] Apache Arrow Java Root POM ......................... SUCCESS [ 5.693 s]
[INFO] Arrow Memory ....................................... SUCCESS [ 1.703 s]
[INFO] Arrow Memory - Core ................................ SUCCESS [ 7.050 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.630 s
[INFO] Finished at: 2023-06-28T20:43:29-07:00
[INFO] ------------------------------------------------------------------------
```
### Are there any user-facing changes?
* Closes: #35053
Authored-by: Dongjoon Hyun <do...@apache.org>
Signed-off-by: David Li <li...@gmail.com>
---
.../src/main/java/org/apache/arrow/memory/util/MemoryUtil.java | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/java/memory/memory-core/src/main/java/org/apache/arrow/memory/util/MemoryUtil.java b/java/memory/memory-core/src/main/java/org/apache/arrow/memory/util/MemoryUtil.java
index 70e1a2586f..b83adf9271 100644
--- a/java/memory/memory-core/src/main/java/org/apache/arrow/memory/util/MemoryUtil.java
+++ b/java/memory/memory-core/src/main/java/org/apache/arrow/memory/util/MemoryUtil.java
@@ -54,6 +54,10 @@ public class MemoryUtil {
*/
public static final boolean LITTLE_ENDIAN = ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN;
+ // Java 1.8, 9, 11, 17, 21 becomes 1, 9, 11, 17, and 21.
+ private static final int majorVersion =
+ Integer.parseInt(System.getProperty("java.specification.version").split("\\D+")[0]);
+
static {
try {
// try to get the unsafe object
@@ -94,7 +98,8 @@ public class MemoryUtil {
@Override
public Object run() {
try {
- final Constructor<?> constructor =
+ final Constructor<?> constructor = (majorVersion >= 21) ?
+ direct.getClass().getDeclaredConstructor(long.class, long.class) :
direct.getClass().getDeclaredConstructor(long.class, int.class);
constructor.setAccessible(true);
logger.debug("Constructor for direct buffer found and made accessible");