This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new ea40551dabd [fix](jni) avoid BE crash and NPE when close paimon reader
#27129 (#27204)
ea40551dabd is described below
commit ea40551dabd9c9c613241a53fcd6c0059533d04e
Author: Mingyu Chen <[email protected]>
AuthorDate: Fri Nov 17 20:49:53 2023 +0800
[fix](jni) avoid BE crash and NPE when close paimon reader #27129 (#27204)
bp #27129
---
be/src/vec/exec/jni_connector.cpp | 8 ++++----
be/src/vec/exec/jni_connector.h | 2 +-
.../src/main/java/org/apache/doris/paimon/PaimonJniScanner.java | 4 +++-
3 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/be/src/vec/exec/jni_connector.cpp
b/be/src/vec/exec/jni_connector.cpp
index 88b860f64b1..d2425504e50 100644
--- a/be/src/vec/exec/jni_connector.cpp
+++ b/be/src/vec/exec/jni_connector.cpp
@@ -87,6 +87,7 @@ Status JniConnector::open(RuntimeState* state,
RuntimeProfile* profile) {
RETURN_IF_ERROR(_init_jni_scanner(env, batch_size));
// Call org.apache.doris.common.jni.JniScanner#open
env->CallVoidMethod(_jni_scanner_obj, _jni_scanner_open);
+ _scanner_opened = true;
RETURN_ERROR_IF_EXC(env);
return Status::OK();
}
@@ -159,7 +160,7 @@ Status JniConnector::close() {
if (!_closed) {
JNIEnv* env = nullptr;
RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env));
- if (_scanner_initialized) {
+ if (_scanner_opened) {
// update scanner metrics
for (const auto& metric : get_statistics(env)) {
std::vector<std::string> type_and_name = split(metric.first,
":");
@@ -196,8 +197,8 @@ Status JniConnector::close() {
_closed = true;
jthrowable exc = (env)->ExceptionOccurred();
if (exc != nullptr) {
- LOG(FATAL) << "Failed to release jni resource: "
- << JniUtil::GetJniExceptionMsg(env).to_string();
+ LOG(WARNING) << "Failed to release jni resource: "
+ << JniUtil::GetJniExceptionMsg(env).to_string();
}
}
return Status::OK();
@@ -233,7 +234,6 @@ Status JniConnector::_init_jni_scanner(JNIEnv* env, int
batch_size) {
_jni_scanner_get_statistics =
env->GetMethodID(_jni_scanner_cls, "getStatistics",
"()Ljava/util/Map;");
RETURN_IF_ERROR(JniUtil::LocalToGlobalRef(env, jni_scanner_obj,
&_jni_scanner_obj));
- _scanner_initialized = true;
env->DeleteLocalRef(jni_scanner_obj);
RETURN_ERROR_IF_EXC(env);
return Status::OK();
diff --git a/be/src/vec/exec/jni_connector.h b/be/src/vec/exec/jni_connector.h
index 8ea94242100..ccc36021681 100644
--- a/be/src/vec/exec/jni_connector.h
+++ b/be/src/vec/exec/jni_connector.h
@@ -257,7 +257,7 @@ private:
size_t _has_read = 0;
bool _closed = false;
- bool _scanner_initialized = false;
+ bool _scanner_opened = false;
jclass _jni_scanner_cls;
jobject _jni_scanner_obj;
jmethodID _jni_scanner_open;
diff --git
a/fe/be-java-extensions/paimon-scanner/src/main/java/org/apache/doris/paimon/PaimonJniScanner.java
b/fe/be-java-extensions/paimon-scanner/src/main/java/org/apache/doris/paimon/PaimonJniScanner.java
index 524f05edd23..237e06ad9c5 100644
---
a/fe/be-java-extensions/paimon-scanner/src/main/java/org/apache/doris/paimon/PaimonJniScanner.java
+++
b/fe/be-java-extensions/paimon-scanner/src/main/java/org/apache/doris/paimon/PaimonJniScanner.java
@@ -124,7 +124,9 @@ public class PaimonJniScanner extends JniScanner {
@Override
public void close() throws IOException {
- reader.close();
+ if (reader != null) {
+ reader.close();
+ }
}
@Override
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]