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 d62a2b20911 [fix](jni)fix jni use timezone_obj get timezone be core.
(#41956)
d62a2b20911 is described below
commit d62a2b209114e58936c46027b892116c125fdebf
Author: daidai <[email protected]>
AuthorDate: Thu Oct 17 10:56:16 2024 +0800
[fix](jni)fix jni use timezone_obj get timezone be core. (#41956)
This PR #40225 try to pass time zone info from BE to JNI, and it use
`_state->timezone_obj().name()`
to get the timezone name.
But when we do some rolling upgrade of BE, it may coredump like:
```
*** SIGSEGV address not mapped to object (@0x610) received by PID 72661
(TID 73538 OR 0x7f2e898d1640) from PID 1552; stack trace: ***
0# doris::signal::(anonymous namespace)::FailureSignalHandler(int,
siginfo_t*, void*) at
/home/zcp/repo_center/doris_branch-2.1/doris/be/src/common/signal_handler.h:421
1# os::Linux::chained_handler(int, siginfo_t*, void*) in
/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so
2# JVM_handle_linux_signal in
/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so
3# signalHandler(int, siginfo_t*, void*) in
/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so
4# 0x00007F3070D3E520 in /lib/x86_64-linux-gnu/libc.so.6
5# cctz::time_zone::name[abi:cxx11]() const in
/mnt/hdd01/ci/compatibility-deploy/be/lib/doris_be
6# doris::vectorized::JniConnector::open(doris::RuntimeState*,
doris::RuntimeProfile*) at
/home/zcp/repo_center/doris_branch-2.1/doris/be/src/vec/exec/jni_connector.cpp:87
7# doris::vectorized::AvroJNIReader::init_fetch_table_schema_reader() at
/home/zcp/repo_center/doris_branch-2.1/doris/be/src/vec/exec/format/avro/avro_jni_reader.cpp:119
8# std::_Function_handler::_M_invoke(std::_Any_data const&) at
/var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:291
9# doris::WorkThreadPool::work_thread(int) at
/home/zcp/repo_center/doris_branch-2.1/doris/be/src/util/work_thread_pool.hpp:159
10# execute_native_thread_routine at
../../../../../libstdc++-v3/src/c++11/thread.cc:84
11# start_thread at ./nptl/pthread_create.c:442
12# 0x00007F3070E22850 at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:83
172.20.50.206 last coredump sql: 2024-10-13 04:12:23,985 [query]
```
This PR use another method: `_state->timezone()`, which just return a
string, instead of reading and initializing
time zone info file, to avoid potential coredump.
---
be/src/vec/exec/jni_connector.cpp | 2 +-
.../maxcompute/test_external_catalog_maxcompute.groovy | 4 ++--
.../external_table_p2/maxcompute/test_max_compute_all_type.groovy | 4 ++--
.../external_table_p2/maxcompute/test_max_compute_complex_type.groovy | 4 ++--
4 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/be/src/vec/exec/jni_connector.cpp
b/be/src/vec/exec/jni_connector.cpp
index 071d36313d2..f06524944ff 100644
--- a/be/src/vec/exec/jni_connector.cpp
+++ b/be/src/vec/exec/jni_connector.cpp
@@ -84,7 +84,7 @@ Status JniConnector::open(RuntimeState* state,
RuntimeProfile* profile) {
return Status::InternalError("Failed to get/create JVM");
}
SCOPED_TIMER(_open_scanner_time);
- _scanner_params.emplace("time_zone", _state->timezone_obj().name());
+ _scanner_params.emplace("time_zone", _state->timezone());
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);
diff --git
a/regression-test/suites/external_table_p2/maxcompute/test_external_catalog_maxcompute.groovy
b/regression-test/suites/external_table_p2/maxcompute/test_external_catalog_maxcompute.groovy
index ffb633c7b72..0539dde5981 100644
---
a/regression-test/suites/external_table_p2/maxcompute/test_external_catalog_maxcompute.groovy
+++
b/regression-test/suites/external_table_p2/maxcompute/test_external_catalog_maxcompute.groovy
@@ -320,8 +320,8 @@
suite("test_external_catalog_maxcompute",
"p2,external,maxcompute,external_remote,external_remote_maxcompute") {
String enabled = context.config.otherConfigs.get("enableMaxComputeTest")
if (enabled != null && enabled.equalsIgnoreCase("true")) {
- String ak = context.config.otherConfigs.get("aliYunAk")
- String sk = context.config.otherConfigs.get("aliYunSk");
+ String ak = context.config.otherConfigs.get("ak")
+ String sk = context.config.otherConfigs.get("sk");
String mc_db = "mc_datalake"
String mc_catalog_name = "test_external_mc_catalog"
diff --git
a/regression-test/suites/external_table_p2/maxcompute/test_max_compute_all_type.groovy
b/regression-test/suites/external_table_p2/maxcompute/test_max_compute_all_type.groovy
index 875f3b97c3a..f1405c441ed 100644
---
a/regression-test/suites/external_table_p2/maxcompute/test_max_compute_all_type.groovy
+++
b/regression-test/suites/external_table_p2/maxcompute/test_max_compute_all_type.groovy
@@ -315,8 +315,8 @@ select * from mc_all_types;
suite("test_max_compute_all_type",
"p2,external,maxcompute,external_remote,external_remote_maxcompute") {
String enabled = context.config.otherConfigs.get("enableMaxComputeTest")
if (enabled != null && enabled.equalsIgnoreCase("true")) {
- String ak = context.config.otherConfigs.get("aliYunAk")
- String sk = context.config.otherConfigs.get("aliYunSk")
+ String ak = context.config.otherConfigs.get("ak")
+ String sk = context.config.otherConfigs.get("sk")
String mc_catalog_name = "test_max_compute_all_type"
sql """drop catalog if exists ${mc_catalog_name} """
diff --git
a/regression-test/suites/external_table_p2/maxcompute/test_max_compute_complex_type.groovy
b/regression-test/suites/external_table_p2/maxcompute/test_max_compute_complex_type.groovy
index 764f0398f50..61ed4ef8ff6 100644
---
a/regression-test/suites/external_table_p2/maxcompute/test_max_compute_complex_type.groovy
+++
b/regression-test/suites/external_table_p2/maxcompute/test_max_compute_complex_type.groovy
@@ -160,8 +160,8 @@
suite("test_max_compute_complex_type",
"p2,external,maxcompute,external_remote,external_remote_maxcompute") {
String enabled = context.config.otherConfigs.get("enableMaxComputeTest")
if (enabled != null && enabled.equalsIgnoreCase("true")) {
- String ak = context.config.otherConfigs.get("aliYunAk")
- String sk = context.config.otherConfigs.get("aliYunSk")
+ String ak = context.config.otherConfigs.get("ak")
+ String sk = context.config.otherConfigs.get("sk")
String mc_catalog_name = "test_max_compute_complex_type"
sql """drop catalog if exists ${mc_catalog_name} """
sql """
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]