This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 2f2ccc6aa75 [fix](jni_connector) fix that be core when jni_connector open fails (#37697) 2f2ccc6aa75 is described below commit 2f2ccc6aa75c2a416f116d2d726d347a3e36d20e Author: Tiewei Fang <43782773+bepppo...@users.noreply.github.com> AuthorDate: Sun Jul 14 15:52:20 2024 +0800 [fix](jni_connector) fix that be core when jni_connector open fails (#37697) Here are two problems: 1. `appendDataTimeNs` will be `NULL` if TrinoConnector open fails before call to `parseRequiredTypes` 2. It does not catch exception in method `get_statistics()` and this exception is not caught until `close()` method. Therefore, it will cause BE core dump in `JniConnector::close()` at `LOG(FATAL)` --- be/src/vec/exec/jni_connector.cpp | 9 ++++++++- .../apache/doris/trinoconnector/TrinoConnectorJniScanner.java | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/be/src/vec/exec/jni_connector.cpp b/be/src/vec/exec/jni_connector.cpp index 66b01bbe847..0c2485ada3b 100644 --- a/be/src/vec/exec/jni_connector.cpp +++ b/be/src/vec/exec/jni_connector.cpp @@ -154,6 +154,13 @@ Status JniConnector::get_table_schema(std::string& table_schema_str) { std::map<std::string, std::string> JniConnector::get_statistics(JNIEnv* env) { jobject metrics = env->CallObjectMethod(_jni_scanner_obj, _jni_scanner_get_statistics); + jthrowable exc = (env)->ExceptionOccurred(); + if (exc != nullptr) { + LOG(WARNING) << "get_statistics has error: " + << JniUtil::GetJniExceptionMsg(env).to_string(); + env->DeleteLocalRef(metrics); + return std::map<std::string, std::string> {}; + } std::map<std::string, std::string> result = JniUtil::convert_to_cpp_map(env, metrics); env->DeleteLocalRef(metrics); return result; @@ -163,7 +170,7 @@ Status JniConnector::close() { if (!_closed) { JNIEnv* env = nullptr; RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env)); - if (_scanner_opened) { + if (_scanner_opened && _jni_scanner_obj != nullptr) { // _fill_block may be failed and returned, we should release table in close. // org.apache.doris.common.jni.JniScanner#releaseTable is idempotent env->CallVoidMethod(_jni_scanner_obj, _jni_scanner_release_table); diff --git a/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorJniScanner.java b/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorJniScanner.java index 3e050fc923f..af20668081d 100644 --- a/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorJniScanner.java +++ b/fe/be-java-extensions/trino-connector-scanner/src/main/java/org/apache/doris/trinoconnector/TrinoConnectorJniScanner.java @@ -132,6 +132,7 @@ public class TrinoConnectorJniScanner extends JniScanner { catalogNameString = params.get("catalog_name"); super.batchSize = batchSize; super.fields = params.get("required_fields").split(","); + appendDataTimeNs = new long[fields.length]; connectorSplitString = params.get("trino_connector_split"); connectorTableHandleString = params.get("trino_connector_table_handle"); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org