diff --git a/be/src/vec/exec/jni_connector.cpp b/be/src/vec/exec/jni_connector.cpp index 6756ba47e5e580..563a9d1282dc07 100644 --- a/be/src/vec/exec/jni_connector.cpp +++ b/be/src/vec/exec/jni_connector.cpp @@ -95,6 +95,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(); } @@ -167,7 +168,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 type_and_name = split(metric.first, ":"); @@ -204,7 +205,7 @@ Status JniConnector::close() { _closed = true; jthrowable exc = (env)->ExceptionOccurred(); if (exc != nullptr) { - LOG(FATAL) << "Failed to release jni resource: " + LOG(WARNING) << "Failed to release jni resource: " << JniUtil::GetJniExceptionMsg(env).to_string(); } } @@ -241,7 +242,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/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 524f05edd23a16..237e06ad9c51e4 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 @@ private void parseRequiredTypes() { @Override public void close() throws IOException { - reader.close(); + if (reader != null) { + reader.close(); + } } @Override