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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]