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

Reply via email to