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

dataroaring 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 1e738f46a30 [Fix](warmup) Fix coredump in 
`CloudTablet::complete_rowset_segment_warmup` due to capture by reference 
(#56395)
1e738f46a30 is described below

commit 1e738f46a3026fad7cb686405943ff1033737aee
Author: bobhan1 <[email protected]>
AuthorDate: Thu Sep 25 15:58:48 2025 +0800

    [Fix](warmup) Fix coredump in `CloudTablet::complete_rowset_segment_warmup` 
due to capture by reference (#56395)
    
    ### What problem does this PR solve?
    introduced in https://github.com/apache/doris/pull/54611
    
    ```
    (gdb) bt
    #0  __GI___pthread_sigmask (how=2, newmask=<optimized out>, oldmask=0x0) at 
./nptl/pthread_sigmask.c:43
    #1  0x00007f7aa6b5d71e in PosixSignals::chained_handler(int, siginfo*, 
void*) [clone .part.0] () from 
/usr/lib/jvm/java-17-openjdk-amd64/lib/server/libjvm.so
    #2  0x00007f7aa6b5e206 in JVM_handle_linux_signal () from 
/usr/lib/jvm/java-17-openjdk-amd64/lib/server/libjvm.so
    #3  <signal handler called>
    #4  0x000055e20050d443 in std::_Hashtable<doris::RowsetId, 
std::pair<doris::RowsetId const, doris::CloudTablet::RowsetWarmUpInfo>, 
std::allocator<std::pair<doris::RowsetId const, 
doris::CloudTablet::RowsetWarmUpInfo> >, std::__detail::_Select1st, 
std::equal_to<doris::RowsetId>, std::hash<doris::RowsetId>, 
std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, 
std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, 
false, true> >::_M_find_before_nod [...]
        __bkt=4186920012728959759, __k=..., __code=11200260987994981938) at 
/usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/hashtable.h:2205
    #5  std::_Hashtable<doris::RowsetId, std::pair<doris::RowsetId const, 
doris::CloudTablet::RowsetWarmUpInfo>, std::allocator<std::pair<doris::RowsetId 
const, doris::CloudTablet::RowsetWarmUpInfo> >, std::__detail::_Select1st, 
std::equal_to<doris::RowsetId>, std::hash<doris::RowsetId>, 
std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, 
std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, 
false, true> >::_M_locate (this=this@entry=0x7f79e69acde [...]
        at 
/usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/hashtable.h:2283
    #6  0x000055e200505a8d in std::_Hashtable<doris::RowsetId, 
std::pair<doris::RowsetId const, doris::CloudTablet::RowsetWarmUpInfo>, 
std::allocator<std::pair<doris::RowsetId const, 
doris::CloudTablet::RowsetWarmUpInfo> >, std::__detail::_Select1st, 
std::equal_to<doris::RowsetId>, std::hash<doris::RowsetId>, 
std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, 
std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, 
false, true> >::find (this=0x7f79e [...]
        at 
/usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/hashtable.h:1929
    #7  std::unordered_map<doris::RowsetId, 
doris::CloudTablet::RowsetWarmUpInfo, std::hash<doris::RowsetId>, 
std::equal_to<doris::RowsetId>, std::allocator<std::pair<doris::RowsetId const, 
doris::CloudTablet::RowsetWarmUpInfo> > >::contains (this=0x7f79e69acde0, 
__x=...)
        at 
/usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/unordered_map.h:999
    #8  doris::CloudTablet::complete_rowset_segment_warmup (this=<optimized 
out>, rowset_id=..., status=..., segment_num=1, inverted_idx_num=0) at 
/home/zcp/repo_center/doris_master/doris/be/src/cloud/cloud_tablet.cpp:1692
    #9  0x000055e2005338ba in 
doris::CloudWarmUpManager::handle_jobs()::$_0::operator()(doris::Status) const 
(this=0x7f79e8bebad0, st=...) at 
/home/zcp/repo_center/doris_master/doris/be/src/cloud/cloud_warm_up_manager.cpp:243
    #10 std::__invoke_impl<void, 
doris::CloudWarmUpManager::handle_jobs()::$_0&, 
doris::Status>(std::__invoke_other, 
doris::CloudWarmUpManager::handle_jobs()::$_0&, doris::Status&&) (__f=..., 
__args=...)
        at 
/usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/invoke.h:63
    #11 std::__invoke_r<void, doris::CloudWarmUpManager::handle_jobs()::$_0&, 
doris::Status>(doris::CloudWarmUpManager::handle_jobs()::$_0&, doris::Status&&) 
(__fn=..., __args=...)
        at 
/usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/invoke.h:113
    #12 std::_Function_handler<void (doris::Status), 
doris::CloudWarmUpManager::handle_jobs()::$_0>::_M_invoke(std::_Any_data 
const&, doris::Status&&) (__functor=..., __args=...)
        at 
/usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_function.h:292
    #13 0x000055e200533310 in std::function<void 
(doris::Status)>::operator()(doris::Status) const (this=0x7f795a3ff1d0, 
__args=...) at 
/usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_function.h:593
    #14 
doris::CloudWarmUpManager::submit_download_tasks(std::filesystem::__cxx11::path,
 long, std::shared_ptr<doris::io::FileSystem>, long, 
std::shared_ptr<bthread::CountdownEvent>, bool, std::function<void 
(doris::Status)>)::$_0::operator()(doris::Status) const (
        this=0x7f79f0710b60, st=...) at 
/home/zcp/repo_center/doris_master/doris/be/src/cloud/cloud_warm_up_manager.cpp:149
    #15 std::__invoke_impl<void, 
doris::CloudWarmUpManager::submit_download_tasks(std::filesystem::__cxx11::path,
 long, std::shared_ptr<doris::io::FileSystem>, long, 
std::shared_ptr<bthread::CountdownEvent>, bool, std::function<void 
(doris::Status)>)::$_0&, doris::Status>(std::__invoke_other, 
doris::CloudWarmUpManager::submit_download_tasks(std::filesystem::__cxx11::path,
 long, std::shared_ptr<doris::io::FileSystem>, long, 
std::shared_ptr<bthread::CountdownEvent>, bool, std::function<void [...]
        __f=..., __args=...) at 
/usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/invoke.h:63
    #16 std::__invoke_r<void, 
doris::CloudWarmUpManager::submit_download_tasks(std::filesystem::__cxx11::path,
 long, std::shared_ptr<doris::io::FileSystem>, long, 
std::shared_ptr<bthread::CountdownEvent>, bool, std::function<void 
(doris::Status)>)::$_0&, 
doris::Status>(doris::CloudWarmUpManager::submit_download_tasks(std::filesystem::__cxx11::path,
 long, std::shared_ptr<doris::io::FileSystem>, long, 
std::shared_ptr<bthread::CountdownEvent>, bool, std::function<void 
(doris::Status)>)::$_0& [...]
        at 
/usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/invoke.h:113
    #17 std::_Function_handler<void (doris::Status), 
doris::CloudWarmUpManager::submit_download_tasks(std::filesystem::__cxx11::path,
 long, std::shared_ptr<doris::io::FileSystem>, long, 
std::shared_ptr<bthread::CountdownEvent>, bool, std::function<void 
(doris::Status)>)::$_0>::_M_invoke(std::_Any_data const&, doris::Status&&) 
(__functor=..., __args=...) at 
/usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_function.h:292
    #18 0x000055e200469cb1 in std::function<void 
(doris::Status)>::operator()(doris::Status) const (this=0x7f796941cee0, 
__args=...) at 
/usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_function.h:593
    #19 doris::io::FileCacheBlockDownloader::download_segment_file 
(this=<optimized out>, meta=...) at 
/home/zcp/repo_center/doris_master/doris/be/src/io/cache/block_file_cache_downloader.cpp:297
    #20 0x000055e1fbfcbe85 in doris::ThreadPool::dispatch_thread 
(this=0x7f7995a1da00) at 
/home/zcp/repo_center/doris_master/doris/be/src/util/threadpool.cpp:614
    #21 0x000055e1fbfc0fac in std::function<void ()>::operator()() const 
(this=0x7f796941cee0) at 
/usr/local/ldb-toolchain-v0.26/bin/../lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_function.h:593
    #22 doris::Thread::supervise_thread (arg=0x7f79f13de010) at 
/home/zcp/repo_center/doris_master/doris/be/src/util/thread.cpp:460
    #23 0x00007f7aa5bf8ac3 in start_thread (arg=<optimized out>) at 
./nptl/pthread_create.c:442
    #24 0x00007f7aa5c8a850 in __closefrom_fallback (from=1685031872, 
dirfd_fallback=<optimized out>) at 
../sysdeps/unix/sysv/linux/closefrom_fallback.c:45
    #25 0x0000000000000000 in ?? ()
    ```
    
    Problem Summary:
    
    ### Release note
    
    None
    
    ### Check List (For Author)
    
    - Test <!-- At least one of them must be included. -->
        - [ ] Regression test
        - [ ] Unit Test
        - [ ] Manual test (add detailed scripts or steps below)
        - [ ] No need to test or manual test. Explain why:
    - [ ] This is a refactor/code format and no logic has been changed.
            - [ ] Previous test can cover this change.
            - [ ] No code files have been changed.
            - [ ] Other reason <!-- Add your reason?  -->
    
    - Behavior changed:
        - [ ] No.
        - [ ] Yes. <!-- Explain the behavior change -->
    
    - Does this need documentation?
        - [ ] No.
    - [ ] Yes. <!-- Add document PR link here. eg:
    https://github.com/apache/doris-website/pull/1214 -->
    
    ### Check List (For Reviewer who merge this PR)
    
    - [ ] Confirm the release note
    - [ ] Confirm test cases
    - [ ] Confirm document
    - [ ] Add branch pick label <!-- Add branch pick label that this PR
    should merge into -->
---
 be/src/cloud/cloud_warm_up_manager.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/be/src/cloud/cloud_warm_up_manager.cpp 
b/be/src/cloud/cloud_warm_up_manager.cpp
index 2ecd6b74fdd..cbd45613444 100644
--- a/be/src/cloud/cloud_warm_up_manager.cpp
+++ b/be/src/cloud/cloud_warm_up_manager.cpp
@@ -154,7 +154,7 @@ void CloudWarmUpManager::submit_download_tasks(io::Path 
path, int64_t file_size,
                         .is_dryrun = 
config::enable_reader_dryrun_when_download_file_cache,
                         .is_warmup = true},
                 .download_done =
-                        [&](Status st) {
+                        [&, done_cb = std::move(done_cb)](Status st) {
                             if (done_cb) done_cb(st);
                             if (!st) {
                                 LOG_WARNING("Warm up error ").error(st);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to