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 2022/06/08 13:30:15 UTC
[arrow] branch master updated: ARROW-16566: [Java] Initialize JNI components on use instead of statically (#13146)
This is an automated email from the ASF dual-hosted git repository.
lidavidm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/master by this push:
new 982960a184 ARROW-16566: [Java] Initialize JNI components on use instead of statically (#13146)
982960a184 is described below
commit 982960a1845c9c6760b0256970a216e9c5ac34dd
Author: Jacky Lee <li...@baidu.com>
AuthorDate: Wed Jun 8 21:30:07 2022 +0800
ARROW-16566: [Java] Initialize JNI components on use instead of statically (#13146)
We are using Arrow in Spark. When speculation is turned on, it is possible for the task to be forcibly killed during the running process. It means, `JniLoader.get().ensureLoaded()` maybe failed with `ClosedByInterruptException` when the task was killed, and it should be accepted with this.
However, `NativeMemoryPool` use it as a static code, this leads to an init failure every time the NativeMemroyPool is trying to initialized and can never succeed. It would always fail to init `NativeMemoryPool` with `java.lang.NoClassDefFoundError: Could not initialize class org.apache.arrow.dataset.jni.NativeMemoryPool`.
Lead-authored-by: jackylee-ch <li...@baidu.com>
Co-authored-by: stczwd <qc...@163.com>
Signed-off-by: David Li <li...@gmail.com>
---
java/c/src/main/java/org/apache/arrow/c/jni/JniWrapper.java | 2 +-
.../src/main/java/org/apache/arrow/dataset/file/JniWrapper.java | 2 +-
.../src/main/java/org/apache/arrow/dataset/jni/JniWrapper.java | 2 +-
.../main/java/org/apache/arrow/dataset/jni/NativeMemoryPool.java | 6 ++----
4 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/java/c/src/main/java/org/apache/arrow/c/jni/JniWrapper.java b/java/c/src/main/java/org/apache/arrow/c/jni/JniWrapper.java
index 04a143a7a9..9e1c19b100 100644
--- a/java/c/src/main/java/org/apache/arrow/c/jni/JniWrapper.java
+++ b/java/c/src/main/java/org/apache/arrow/c/jni/JniWrapper.java
@@ -24,6 +24,7 @@ public class JniWrapper {
private static final JniWrapper INSTANCE = new JniWrapper();
public static JniWrapper get() {
+ JniLoader.get().ensureLoaded();
return INSTANCE;
}
@@ -34,7 +35,6 @@ public class JniWrapper {
throw new UnsupportedOperationException(
"The Java C Data Interface implementation is currently only supported on 64-bit systems");
}
- JniLoader.get().ensureLoaded();
}
public native void releaseSchema(long memoryAddress);
diff --git a/java/dataset/src/main/java/org/apache/arrow/dataset/file/JniWrapper.java b/java/dataset/src/main/java/org/apache/arrow/dataset/file/JniWrapper.java
index f69d820519..6e65803a33 100644
--- a/java/dataset/src/main/java/org/apache/arrow/dataset/file/JniWrapper.java
+++ b/java/dataset/src/main/java/org/apache/arrow/dataset/file/JniWrapper.java
@@ -27,11 +27,11 @@ public class JniWrapper {
private static final JniWrapper INSTANCE = new JniWrapper();
public static JniWrapper get() {
+ JniLoader.get().ensureLoaded();
return INSTANCE;
}
private JniWrapper() {
- JniLoader.get().ensureLoaded();
}
/**
diff --git a/java/dataset/src/main/java/org/apache/arrow/dataset/jni/JniWrapper.java b/java/dataset/src/main/java/org/apache/arrow/dataset/jni/JniWrapper.java
index e10eda0b45..1a9d4188c1 100644
--- a/java/dataset/src/main/java/org/apache/arrow/dataset/jni/JniWrapper.java
+++ b/java/dataset/src/main/java/org/apache/arrow/dataset/jni/JniWrapper.java
@@ -25,11 +25,11 @@ public class JniWrapper {
private static final JniWrapper INSTANCE = new JniWrapper();
public static JniWrapper get() {
+ JniLoader.get().ensureLoaded();
return INSTANCE;
}
private JniWrapper() {
- JniLoader.get().ensureLoaded();
}
/**
diff --git a/java/dataset/src/main/java/org/apache/arrow/dataset/jni/NativeMemoryPool.java b/java/dataset/src/main/java/org/apache/arrow/dataset/jni/NativeMemoryPool.java
index 83825776b7..e20e1e351c 100644
--- a/java/dataset/src/main/java/org/apache/arrow/dataset/jni/NativeMemoryPool.java
+++ b/java/dataset/src/main/java/org/apache/arrow/dataset/jni/NativeMemoryPool.java
@@ -23,10 +23,6 @@ package org.apache.arrow.dataset.jni;
public class NativeMemoryPool implements AutoCloseable {
private final long nativeInstanceId;
- static {
- JniLoader.get().ensureLoaded();
- }
-
private NativeMemoryPool(long nativeInstanceId) {
this.nativeInstanceId = nativeInstanceId;
}
@@ -35,6 +31,7 @@ public class NativeMemoryPool implements AutoCloseable {
* Get the default memory pool. This will return arrow::default_memory_pool() directly.
*/
public static NativeMemoryPool getDefault() {
+ JniLoader.get().ensureLoaded();
return new NativeMemoryPool(getDefaultMemoryPool());
}
@@ -44,6 +41,7 @@ public class NativeMemoryPool implements AutoCloseable {
* from the listener in advance.
*/
public static NativeMemoryPool createListenable(ReservationListener listener) {
+ JniLoader.get().ensureLoaded();
return new NativeMemoryPool(createListenableMemoryPool(listener));
}