This is an automated email from the ASF dual-hosted git repository.

panxiaolei 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 af4de930c63 [Bug](http-api) fix core dump on /api/reset_rpc_channel 
coz exec_env not initialized (#38375)
af4de930c63 is described below

commit af4de930c63aa5fd9b6921ccb532c35e894614db
Author: Pxl <pxl...@qq.com>
AuthorDate: Tue Jul 30 14:09:04 2024 +0800

    [Bug](http-api) fix core dump on /api/reset_rpc_channel coz exec_env not 
initialized (#38375)
    
    ## Proposed changes
    fix core dump on /api/reset_rpc_channel coz exec_env not initialized
    ```cpp
    *** Query id: 0-0 ***
    *** is nereids: 0 ***
    *** tablet id: 0 ***
    *** Aborted at 1722235709 (unix time) try "date -d @1722235709" if you are 
using GNU date ***
    *** Current BE git commitID: 60eea39cd6 ***
    *** SIGSEGV unknown detail explain (@0x0) received by PID 3829988 (TID 
3835435 OR 0x7f9a7242e700) from PID 0; stack trace: ***
     0# doris::signal::(anonymous namespace)::FailureSignalHandler(int, 
siginfo_t*, void*) at 
/mnt/disk1/xiaolei/incubator-doris/be/src/common/signal_handler.h:421
     1# 0x00007FA57984DB50 in /lib64/libc.so.6
     2# doris::ExecEnv::brpc_internal_client_cache() const at 
/mnt/disk1/xiaolei/incubator-doris/be/src/runtime/exec_env.h:212
     3# doris::ResetRPCChannelAction::handle(doris::HttpRequest*) at 
/mnt/disk1/xiaolei/incubator-doris/be/src/http/action/reset_rpc_channel_action.cpp:41
     4# doris::on_request(evhttp_request*, void*) at 
/mnt/disk1/xiaolei/incubator-doris/be/src/http/ev_http_server.cpp:69
     5# 0x0000558B9818EBD7 in 
/mnt/disk1/xiaolei/incubator-doris/output/be/lib/doris_be
     6# bufferevent_run_readcb_ in 
/mnt/disk1/xiaolei/incubator-doris/output/be/lib/doris_be
     7# 0x0000558B98190C9B in 
/mnt/disk1/xiaolei/incubator-doris/output/be/lib/doris_be
     8# 0x0000558B9817801A in 
/mnt/disk1/xiaolei/incubator-doris/output/be/lib/doris_be
     9# 0x0000558B9817867F in 
/mnt/disk1/xiaolei/incubator-doris/output/be/lib/doris_be
    10# 0x0000558B9817AE30 in 
/mnt/disk1/xiaolei/incubator-doris/output/be/lib/doris_be
    11# doris::EvHttpServer::start()::$_0::operator()() const at 
/mnt/disk1/xiaolei/incubator-doris/be/src/http/ev_http_server.cpp:139
    12# void std::__invoke_impl<void, 
doris::EvHttpServer::start()::$_0&>(std::__invoke_other, 
doris::EvHttpServer::start()::$_0&) at 
/mnt/disk1/xiaolei/ldb_17/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:61
    13# std::enable_if<is_invocable_r_v<void, 
doris::EvHttpServer::start()::$_0&>, void>::type std::__invoke_r<void, 
doris::EvHttpServer::start()::$_0&>(doris::EvHttpServer::start()::$_0&) at 
/mnt/disk1/xiaolei/ldb_17/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:117
    14# std::_Function_handler<void (), 
doris::EvHttpServer::start()::$_0>::_M_invoke(std::_Any_data const&) at 
/mnt/disk1/xiaolei/ldb_17/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_function.h:290
    15# std::function<void ()>::operator()() const at 
/mnt/disk1/xiaolei/ldb_17/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_function.h:591
    16# doris::FunctionRunnable::run() at 
/mnt/disk1/xiaolei/incubator-doris/be/src/util/threadpool.cpp:48
    17# doris::ThreadPool::dispatch_thread() at 
/mnt/disk1/xiaolei/incubator-doris/be/src/util/threadpool.cpp:543
    18# void std::__invoke_impl<void, void (doris::ThreadPool::*&)(), 
doris::ThreadPool*&>(std::__invoke_memfun_deref, void 
(doris::ThreadPool::*&)(), doris::ThreadPool*&) at 
/mnt/disk1/xiaolei/ldb_17/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:74
    19# std::__invoke_result<void (doris::ThreadPool::*&)(), 
doris::ThreadPool*&>::type std::__invoke<void (doris::ThreadPool::*&)(), 
doris::ThreadPool*&>(void (doris::ThreadPool::*&)(), doris::ThreadPool*&) at 
/mnt/disk1/xiaolei/ldb_17/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:96
    20# void std::_Bind<void 
(doris::ThreadPool::*(doris::ThreadPool*))()>::__call<void, , 
0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) at 
/mnt/disk1/xiaolei/ldb_17/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/functional:506
    21# void std::_Bind<void 
(doris::ThreadPool::*(doris::ThreadPool*))()>::operator()<, void>() at 
/mnt/disk1/xiaolei/ldb_17/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/functional:591
    22# void std::__invoke_impl<void, std::_Bind<void 
(doris::ThreadPool::*(doris::ThreadPool*))()>&>(std::__invoke_other, 
std::_Bind<void (doris::ThreadPool::*(doris::ThreadPool*))()>&) at 
/mnt/disk1/xiaolei/ldb_17/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:61
    23# std::enable_if<is_invocable_r_v<void, std::_Bind<void 
(doris::ThreadPool::*(doris::ThreadPool*))()>&>, void>::type 
std::__invoke_r<void, std::_Bind<void 
(doris::ThreadPool::*(doris::ThreadPool*))()>&>(std::_Bind<void 
(doris::ThreadPool::*(doris::ThreadPool*))()>&) at 
/mnt/disk1/xiaolei/ldb_17/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:117
    24# std::_Function_handler<void (), std::_Bind<void 
(doris::ThreadPool::*(doris::ThreadPool*))()> >::_M_invoke(std::_Any_data 
const&) at 
/mnt/disk1/xiaolei/ldb_17/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_function.h:290
    25# std::function<void ()>::operator()() const at 
/mnt/disk1/xiaolei/ldb_17/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_function.h:591
    26# doris::Thread::supervise_thread(void*) at 
/mnt/disk1/xiaolei/incubator-doris/be/src/util/thread.cpp:498
    27# asan_thread_start(void*) in 
/mnt/disk1/xiaolei/incubator-doris/output/be/lib/doris_be
    28# start_thread in /lib64/libpthread.so.0
    29# __clone in /lib64/libc.so.6
    
    ```
---
 be/src/http/action/reset_rpc_channel_action.cpp    |  2 +-
 .../reset_rpc_channel/reset_rpc_channel.groovy     | 27 ++++++++++++++++++++++
 2 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/be/src/http/action/reset_rpc_channel_action.cpp 
b/be/src/http/action/reset_rpc_channel_action.cpp
index e1b180a61d4..b14c0f65e7f 100644
--- a/be/src/http/action/reset_rpc_channel_action.cpp
+++ b/be/src/http/action/reset_rpc_channel_action.cpp
@@ -34,7 +34,7 @@
 namespace doris {
 ResetRPCChannelAction::ResetRPCChannelAction(ExecEnv* exec_env, 
TPrivilegeHier::type hier,
                                              TPrivilegeType::type type)
-        : HttpHandlerWithAuth(exec_env, hier, type) {}
+        : HttpHandlerWithAuth(exec_env, hier, type), _exec_env(exec_env) {}
 void ResetRPCChannelAction::handle(HttpRequest* req) {
     std::string endpoints = req->param("endpoints");
     if (iequal(endpoints, "all")) {
diff --git 
a/regression-test/suites/http_p0/reset_rpc_channel/reset_rpc_channel.groovy 
b/regression-test/suites/http_p0/reset_rpc_channel/reset_rpc_channel.groovy
new file mode 100644
index 00000000000..e89289f72fd
--- /dev/null
+++ b/regression-test/suites/http_p0/reset_rpc_channel/reset_rpc_channel.groovy
@@ -0,0 +1,27 @@
+
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite('reset_rpc_channel') {
+    def backendId_to_backendIP = [:]
+    def backendId_to_backendHttpPort = [:]
+    getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort);
+    for (int i=0;i<backendId_to_backendIP.size();i++){
+        def beHttpAddress 
=backendId_to_backendIP.entrySet()[i].getValue()+":"+backendId_to_backendHttpPort.entrySet()[i].getValue()
+        curl("POST",beHttpAddress+"/api/reset_rpc_channel/all")
+    }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to