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

lihaopeng pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new 7051431671e [branch-2.1](memory) fix query thread attach memory 
tracker (#36245)
7051431671e is described below

commit 7051431671e5a28540b4ae92d057068bc236665a
Author: Xinyi Zou <zouxiny...@gmail.com>
AuthorDate: Sat Jun 15 13:32:42 2024 +0800

    [branch-2.1](memory) fix query thread attach memory tracker (#36245)
    
    ## Proposed changes
    
    fix dcheck
    ```
    *** Check failure stack trace: ***
    F20240613 12:33:01.700206 1467887 thread_context.h:204] Check failed: 
doris::k_doris_exit || !doris::config::enable_memory_orphan_check || 
thread_mem_tracker()->label() != "Orphan" If you crash here, it means that 
SCOPED_ATTACH_TASK and SCOPED_SWITCH_THREAD_MEM_TRACKER_LIMITER are not used 
correctly. starting position of each thread is expected to use 
SCOPED_ATTACH_TASK to bind a MemTrackerLimiter belonging to 
Query/Load/Compaction/Other Tasks, otherwise memory alloc using Doris Alloc 
[...]
    
    44# doris::FragmentMgr::exec_plan_fragment(doris::TPipelineFragmentParams 
const&, std::function<void (doris::RuntimeState*, doris::Status*)> 
const&)::$_0::operator()() const at 
/home/zcp/repo_center/doris_branch-2.1/doris/be/src/runtime/fragment_mgr.cpp:981
    45# void std::__invoke_impl<void, 
doris::FragmentMgr::exec_plan_fragment(doris::TPipelineFragmentParams const&, 
std::function<void (doris::RuntimeState*, doris::Status*)> 
const&)::$_0&>(std::__invoke_other, 
doris::FragmentMgr::exec_plan_fragment(doris::TPipelineFragmentParams const&, 
std::function<void (doris::RuntimeState*, doris::Status*)> const&)::$_0&) at 
/var/local/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:61
    46# std::enable_if<is_invocable_r_v<void, 
doris::FragmentMgr::exec_plan_fragment(doris::TPipelineFragmentParams const&, 
std::function<void (doris::RuntimeState*, doris::Status*)> const&)::$_0&>, 
void>::type std::__invoke_r<void, 
doris::FragmentMgr::exec_plan_fragment(doris::TPipelineFragmentParams const&, 
std::function<void (doris::RuntimeState*, doris::Status*)> 
const&)::$_0&>(doris::FragmentMgr::exec_plan_fragment(doris::TPipelineFragmentParams
 const&, std::function<void (doris::Run [...]
    47# std::_Function_handler<void (), 
doris::FragmentMgr::exec_plan_fragment(doris::TPipelineFragmentParams const&, 
std::function<void (doris::RuntimeState*, doris::Status*)> 
const&)::$_0>::_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
    48# std::function<void ()>::operator()() const at 
/var/local/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:560
    49# doris::FunctionRunnable::run() at 
/home/zcp/repo_center/doris_branch-2.1/doris/be/src/util/threadpool.cpp:48
    50# doris::ThreadPool::dispatch_thread() at 
/home/zcp/repo_center/doris_branch-2.1/doris/be/src/util/threadpool.cpp:543
    51# void std::__invoke_impl<void, void (doris::ThreadPool::*&)(), 
doris::ThreadPool*&>(std::__invoke_memfun_deref, void 
(doris::ThreadPool::*&)(), doris::ThreadPool*&) at 
/var/local/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:74
    52# std::__invoke_result<void (doris::ThreadPool::*&)(), 
doris::ThreadPool*&>::type std::__invoke<void (doris::ThreadPool::*&)(), 
doris::ThreadPool*&>(void (doris::ThreadPool::*&)(), doris::ThreadPool*&) at 
/var/local/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:96
    53# void std::_Bind<void 
(doris::ThreadPool::*(doris::ThreadPool*))()>::__call<void, , 
0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) at 
/var/local/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/functional:420
    54# void std::_Bind<void 
(doris::ThreadPool::*(doris::ThreadPool*))()>::operator()<, void>() at 
/var/local/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/functional:503
    55# void std::__invoke_impl<void, std::_Bind<void 
(doris::ThreadPool::*(doris::ThreadPool*))()>&>(std::__invoke_other, 
std::_Bind<void (doris::ThreadPool::*(doris::ThreadPool*))()>&) at 
/var/local/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:61
    56# 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 
/var/local/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:117
    57# std::_Function_handler<void (), std::_Bind<void 
(doris::ThreadPool::*(doris::ThreadPool*))()> >::_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
    58# std::function<void ()>::operator()() const at 
/var/local/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:560
    59# doris::Thread::supervise_thread(void*) at 
/home/zcp/repo_center/doris_branch-2.1/doris/be/src/util/thread.cpp:498
    60# start_thread at /build/glibc-SzIz7B/glibc-2.31/nptl/pthread_create.c:478
    61# __clone at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97
    ```
    <!--Describe your changes.-->
---
 be/src/runtime/fragment_mgr.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/be/src/runtime/fragment_mgr.cpp b/be/src/runtime/fragment_mgr.cpp
index 4ca84f94041..63079933ca1 100644
--- a/be/src/runtime/fragment_mgr.cpp
+++ b/be/src/runtime/fragment_mgr.cpp
@@ -979,6 +979,7 @@ Status FragmentMgr::exec_plan_fragment(const 
TPipelineFragmentParams& params,
 
             for (size_t i = 0; i < target_size; i++) {
                 RETURN_IF_ERROR(_thread_pool->submit_func([&, i]() {
+                    SCOPED_ATTACH_TASK_WITH_ID(query_ctx->query_mem_tracker, 
query_ctx->query_id());
                     prepare_status[i] = pre_and_submit(i);
                     std::unique_lock<std::mutex> lock(m);
                     prepare_done++;


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

Reply via email to