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 <morning...@163.com> 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: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org