pingcap / pingcap/tiflash

DMStoreForSegmentReadTaskTest.FetchPagesNoTinyNoInMem has data race

Open
#10,673 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

component/storage severity/moderate type/bug
Dominant language
C++
Stars
1k
Forks
423
Avg merge
1d 15h
Merged PRs (30d)
24

Description

Bug Report

Please answer these questions before submitting your issue. Thanks!

1. Minimal reproduce step (Required)

Build with tsan mode

2. What did you expect to see? (Required)

No error

3. What did you see instead (Required)
WARNING: ThreadSanitizer: data race (pid=4095575)
  Write of size 8 at 0x7b1400081830 by thread T3 (mutexes: write M0):
    #0 operator delete(void*) /DATA/disk3/xzx/llvm-project/compiler-rt/lib/tsan/rtl/tsan_new_delete.cpp:126:3 (gtests_dbms+0x36d8b4f)
    #1 void std::__1::__libcpp_operator_delete[abi:ue170006]<void*>(void*) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/new:278:3 (gtests_dbms+0x1180a439)
    #2 void std::__1::__do_deallocate_handle_size[abi:ue170006]<>(void*, unsigned long) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/new:302:10 (gtests_dbms+0x1180a439)
    #3 std::__1::__libcpp_deallocate[abi:ue170006](void*, unsigned long, unsigned long) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/new:318:14 (gtests_dbms+0x1180a439)
    #4 std::__1::allocator<std::__1::__shared_ptr_emplace<DB::PS::V3::PageDirectorySnapshot, std::__1::allocator<DB::PS::V3::PageDirectorySnapshot>>>::deallocate[abi:ue170006](std::__1::__shared_ptr_emplace<DB::PS::V3::PageDirectorySnapshot, std::__1::allocator<DB::PS::V3::PageDirectorySnapshot>>*, unsigned long) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/allocator.h:130:13 (gtests_dbms+0x1180a439)
    #5 std::__1::allocator_traits<std::__1::allocator<std::__1::__shared_ptr_emplace<DB::PS::V3::PageDirectorySnapshot, std::__1::allocator<DB::PS::V3::PageDirectorySnapshot>>>>::deallocate[abi:ue170006](std::__1::allocator<std::__1::__shared_ptr_emplace<DB::PS::V3::PageDirectorySnapshot, std::__1::allocator<DB::PS::V3::PageDirectorySnapshot>>>&, std::__1::__shared_ptr_emplace<DB::PS::V3::PageDirectorySnapshot, std::__1::allocator<DB::PS::V3::PageDirectorySnapshot>>*, unsigned long) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/allocator_traits.h:288:13 (gtests_dbms+0x1180a439)
    #6 std::__1::__shared_ptr_emplace<DB::PS::V3::PageDirectorySnapshot, std::__1::allocator<DB::PS::V3::PageDirectorySnapshot>>::__on_zero_shared_weak() /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/shared_ptr.h:332:9 (gtests_dbms+0x1180a439)
    #7 std::__1::weak_ptr<DB::PS::V3::PageDirectorySnapshot>::~weak_ptr() /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/shared_ptr.h:1777:19 (gtests_dbms+0x117f4d9e)
    #8 void std::__1::__destroy_at[abi:ue170006]<std::__1::weak_ptr<DB::PS::V3::PageDirectorySnapshot>, 0>(std::__1::weak_ptr<DB::PS::V3::PageDirectorySnapshot>*) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/construct_at.h:69:13 (gtests_dbms+0x117f4d9e)
    #9 void std::__1::destroy_at[abi:ue170006]<std::__1::weak_ptr<DB::PS::V3::PageDirectorySnapshot>, 0>(std::__1::weak_ptr<DB::PS::V3::PageDirectorySnapshot>*) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/construct_at.h:104:5 (gtests_dbms+0x117f4d9e)
    #10 void std::__1::allocator_traits<std::__1::allocator<std::__1::__list_node<std::__1::weak_ptr<DB::PS::V3::PageDirectorySnapshot>, void*>>>::destroy[abi:ue170006]<std::__1::weak_ptr<DB::PS::V3::PageDirectorySnapshot>, void, void>(std::__1::allocator<std::__1::__list_node<std::__1::weak_ptr<DB::PS::V3::PageDirectorySnapshot>, void*>>&, std::__1::weak_ptr<DB::PS::V3::PageDirectorySnapshot>*) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/allocator_traits.h:323:9 (gtests_dbms+0x117f4d9e)
    #11 std::__1::list<std::__1::weak_ptr<DB::PS::V3::PageDirectorySnapshot>, std::__1::allocator<std::__1::weak_ptr<DB::PS::V3::PageDirectorySnapshot>>>::erase(std::__1::__list_const_iterator<std::__1::weak_ptr<DB::PS::V3::PageDirectorySnapshot>, void*>) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/list:1626:5 (gtests_dbms+0x117f4d9e)
    #12 DB::PS::V3::PageDirectory<DB::PS::V3::universal::PageDirectoryTrait>::gcInMemSnapshots() const /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/Page/V3/PageDirectory.cpp:2155:30 (gtests_dbms+0x117f4d9e)
    #13 DB::PS::V3::PageDirectory<DB::PS::V3::universal::PageDirectoryTrait>::gcInMemEntries(DB::PS::V3::PageDirectory<DB::PS::V3::universal::PageDirectoryTrait>::InMemGCOption const&) /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/Page/V3/PageDirectory.cpp:2216:28 (gtests_dbms+0x117fe996)
    #14 DB::PS::V3::ExternalPageCallbacksManager<DB::PS::V3::universal::ExternalPageCallbacksManagerTrait>::doGC(DB::PS::V3::BlobStore<DB::PS::V3::universal::BlobStoreTrait>&, DB::PS::V3::PageDirectory<DB::PS::V3::universal::PageDirectoryTrait>&, std::__1::shared_ptr<DB::WriteLimiter> const&, std::__1::shared_ptr<DB::ReadLimiter> const&, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, unsigned long, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const, unsigned long>>>*) /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/Page/V3/GCDefines.cpp:255:47 (gtests_dbms+0x118388fe)
    #15 DB::PS::V3::ExternalPageCallbacksManager<DB::PS::V3::universal::ExternalPageCallbacksManagerTrait>::gc(DB::PS::V3::BlobStore<DB::PS::V3::universal::BlobStoreTrait>&, DB::PS::V3::PageDirectory<DB::PS::V3::universal::PageDirectoryTrait>&, std::__1::shared_ptr<DB::WriteLimiter> const&, std::__1::shared_ptr<DB::ReadLimiter> const&, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, unsigned long, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const, unsigned long>>>*, std::__1::shared_ptr<DB::Logger>) /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/Page/V3/GCDefines.cpp:147:41 (gtests_dbms+0x118385c6)
    #16 DB::UniversalPageStorage::gc(bool, std::__1::shared_ptr<DB::WriteLimiter> const&, std::__1::shared_ptr<DB::ReadLimiter> const&) /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/Page/V3/Universal/UniversalPageStorage.cpp:448:34 (gtests_dbms+0x118aeffb)
    #17 DB::UniversalPageStorageService::gc() const /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/Page/V3/Universal/UniversalPageStorageService.cpp:313:36 (gtests_dbms+0x118beebb)
    #18 DB::UniversalPageStorageService::create(DB::Context&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::shared_ptr<DB::PSDiskDelegator>, DB::PageStorageConfig const&)::$_1::operator()() const /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/Page/V3/Universal/UniversalPageStorageService.cpp:87:29 (gtests_dbms+0x118bf88a)
    #19 decltype(std::declval<DB::UniversalPageStorageService::create(DB::Context&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::shared_ptr<DB::PSDiskDelegator>, DB::PageStorageConfig const&)::$_1&>()()) std::__1::__invoke[abi:ue170006]<DB::UniversalPageStorageService::create(DB::Context&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::shared_ptr<DB::PSDiskDelegator>, DB::PageStorageConfig const&)::$_1&>(DB::UniversalPageStorageService::create(DB::Context&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::shared_ptr<DB::PSDiskDelegator>, DB::PageStorageConfig const&)::$_1&) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__type_traits/invoke.h:340:25 (gtests_dbms+0x118bf88a)
    #20 bool std::__1::__invoke_void_return_wrapper<bool, false>::__call[abi:ue170006]<DB::UniversalPageStorageService::create(DB::Context&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::shared_ptr<DB::PSDiskDelegator>, DB::PageStorageConfig const&)::$_1&>(DB::UniversalPageStorageService::create(DB::Context&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::shared_ptr<DB::PSDiskDelegator>, DB::PageStorageConfig const&)::$_1&) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__type_traits/invoke.h:407:12 (gtests_dbms+0x118bf88a)
    #21 std::__1::__function::__alloc_func<DB::UniversalPageStorageService::create(DB::Context&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::shared_ptr<DB::PSDiskDelegator>, DB::PageStorageConfig const&)::$_1, std::__1::allocator<DB::UniversalPageStorageService::create(DB::Context&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::shared_ptr<DB::PSDiskDelegator>, DB::PageStorageConfig const&)::$_1>, bool ()>::operator()[abi:ue170006]() /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__functional/function.h:192:16 (gtests_dbms+0x118bf88a)
    #22 std::__1::__function::__func<DB::UniversalPageStorageService::create(DB::Context&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::shared_ptr<DB::PSDiskDelegator>, DB::PageStorageConfig const&)::$_1, std::__1::allocator<DB::UniversalPageStorageService::create(DB::Context&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::shared_ptr<DB::PSDiskDelegator>, DB::PageStorageConfig const&)::$_1>, bool ()>::operator()() /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__functional/function.h:363:12 (gtests_dbms+0x118bf88a)
    #23 std::__1::__function::__value_func<bool ()>::operator()[abi:ue170006]() const /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__functional/function.h:517:16 (gtests_dbms+0x10c3d146)
    #24 std::__1::function<bool ()>::operator()() const /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__functional/function.h:1168:12 (gtests_dbms+0x10c3d146)
    #25 DB::BackgroundProcessingPool::threadFunction(unsigned long) /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/BackgroundProcessingPool.cpp:267:25 (gtests_dbms+0x10c3d146)
    #26 DB::BackgroundProcessingPool::BackgroundProcessingPool(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>)::$_1::operator()() const /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/BackgroundProcessingPool.cpp:103:46 (gtests_dbms+0x10c3df98)
    #27 decltype(std::declval<DB::BackgroundProcessingPool::BackgroundProcessingPool(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>)::$_1>()()) std::__1::__invoke[abi:ue170006]<DB::BackgroundProcessingPool::BackgroundProcessingPool(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>)::$_1>(DB::BackgroundProcessingPool::BackgroundProcessingPool(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>)::$_1&&) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__type_traits/invoke.h:340:25 (gtests_dbms+0x10c3df98)
    #28 void std::__1::__thread_execute[abi:ue170006]<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, DB::BackgroundProcessingPool::BackgroundProcessingPool(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>)::$_1>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, DB::BackgroundProcessingPool::BackgroundProcessingPool(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>)::$_1>&, std::__1::__tuple_indices<>) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__thread/thread.h:221:5 (gtests_dbms+0x10c3df98)
    #29 void* std::__1::__thread_proxy[abi:ue170006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, DB::BackgroundProcessingPool::BackgroundProcessingPool(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>)::$_1>>(void*) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__thread/thread.h:232:5 (gtests_dbms+0x10c3df98)

  Previous read of size 8 at 0x7b1400081830 by main thread:
    #0 std::__1::__shared_count::__release_shared[abi:ue170006]() /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/shared_ptr.h:172:9 (gtests_dbms+0xe23d2de)
    #1 std::__1::__shared_weak_count::__release_shared[abi:ue170006]() /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/shared_ptr.h:213:27 (gtests_dbms+0xe23d2de)
    #2 std::__1::shared_ptr<DB::PageStorageSnapshot>::~shared_ptr[abi:ue170006]() /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/shared_ptr.h:772:23 (gtests_dbms+0xe23d2de)
    #3 DB::DM::Remote::RNLocalPageCache::RNLocalPageCache(DB::DM::Remote::RNLocalPageCache::RNLocalPageCacheOptions const&) /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/DeltaMerge/Remote/RNLocalPageCache.cpp:47:9 (gtests_dbms+0xe23d2de)
    #4 DB::DM::Remote::RNLocalPageCache* std::__1::construct_at[abi:ue170006]<DB::DM::Remote::RNLocalPageCache, DB::DM::Remote::RNLocalPageCache::RNLocalPageCacheOptions const&, DB::DM::Remote::RNLocalPageCache*>(DB::DM::Remote::RNLocalPageCache*, DB::DM::Remote::RNLocalPageCache::RNLocalPageCacheOptions const&) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/construct_at.h:41:46 (gtests_dbms+0x10980d98)
    #5 void std::__1::allocator_traits<std::__1::allocator<DB::DM::Remote::RNLocalPageCache>>::construct[abi:ue170006]<DB::DM::Remote::RNLocalPageCache, DB::DM::Remote::RNLocalPageCache::RNLocalPageCacheOptions const&, void, void>(std::__1::allocator<DB::DM::Remote::RNLocalPageCache>&, DB::DM::Remote::RNLocalPageCache*, DB::DM::Remote::RNLocalPageCache::RNLocalPageCacheOptions const&) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/allocator_traits.h:304:9 (gtests_dbms+0x10980d98)
    #6 std::__1::__shared_ptr_emplace<DB::DM::Remote::RNLocalPageCache, std::__1::allocator<DB::DM::Remote::RNLocalPageCache>>::__shared_ptr_emplace[abi:ue170006]<DB::DM::Remote::RNLocalPageCache::RNLocalPageCacheOptions const&>(std::__1::allocator<DB::DM::Remote::RNLocalPageCache>, DB::DM::Remote::RNLocalPageCache::RNLocalPageCacheOptions const&) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/shared_ptr.h:299:13 (gtests_dbms+0x10980d98)
    #7 std::__1::shared_ptr<DB::DM::Remote::RNLocalPageCache> std::__1::allocate_shared[abi:ue170006]<DB::DM::Remote::RNLocalPageCache, std::__1::allocator<DB::DM::Remote::RNLocalPageCache>, DB::DM::Remote::RNLocalPageCache::RNLocalPageCacheOptions const&, void>(std::__1::allocator<DB::DM::Remote::RNLocalPageCache> const&, DB::DM::Remote::RNLocalPageCache::RNLocalPageCacheOptions const&) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/shared_ptr.h:1022:55 (gtests_dbms+0x10980d98)
    #8 std::__1::shared_ptr<DB::DM::Remote::RNLocalPageCache> std::__1::make_shared[abi:ue170006]<DB::DM::Remote::RNLocalPageCache, DB::DM::Remote::RNLocalPageCache::RNLocalPageCacheOptions const&, void>(DB::DM::Remote::RNLocalPageCache::RNLocalPageCacheOptions const&) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/shared_ptr.h:1031:12 (gtests_dbms+0x1097f6e5)
    #9 DB::DM::Remote::RNLocalPageCache::create(DB::DM::Remote::RNLocalPageCache::RNLocalPageCacheOptions const&) /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/DeltaMerge/Remote/RNLocalPageCache.h:158:16 (gtests_dbms+0x1097f6e5)
    #10 DB::SharedContextDisagg::initReadNodePageCache(DB::PathPool const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, unsigned long) /DATA/disk3/xzx/tf-tmp/dbms/src/Interpreters/SharedContexts/Disagg.cpp:80:25 (gtests_dbms+0x1097f6e5)
    #11 DB::DM::tests::DMStoreForSegmentReadTaskTest::initReadNodePageCacheIfUninitialized() /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/DeltaMerge/tests/gtest_segment_read_task.cpp:220:51 (gtests_dbms+0x6ec4c6a)
    #12 DB::DM::tests::DMStoreForSegmentReadTaskTest::SetUp() /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/DeltaMerge/tests/gtest_segment_read_task.cpp:154:9 (gtests_dbms+0x6eb9571)
    #13 void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/src/gtest.cc:2443:10 (gtests_dbms+0xe5645e9)
    #14 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/src/gtest.cc:2479:14 (gtests_dbms+0xe5645e9)
    #15 testing::Test::Run() /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/src/gtest.cc:2513:3 (gtests_dbms+0xe539c7e)
    #16 testing::TestInfo::Run() /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/src/gtest.cc:2693:11 (gtests_dbms+0xe53b59e)
    #17 testing::TestCase::Run() /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/src/gtest.cc:2811:28 (gtests_dbms+0xe53c583)
    #18 testing::internal::UnitTestImpl::RunAllTests() /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/src/gtest.cc:5177:43 (gtests_dbms+0xe54e99a)
    #19 bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/src/gtest.cc:2443:10 (gtests_dbms+0xe565afd)
    #20 bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/src/gtest.cc:2479:14 (gtests_dbms+0xe565afd)
    #21 testing::UnitTest::Run() /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/src/gtest.cc:4786:10 (gtests_dbms+0xe54e264)
    #22 RUN_ALL_TESTS() /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/include/gtest/gtest.h:2341:46 (gtests_dbms+0x77c32c7)
    #23 main /DATA/disk3/xzx/tf-tmp/dbms/src/TestUtils/gtests_dbms_main.cpp:120:16 (gtests_dbms+0x77c32c7)

  Mutex M0 (0x7b4c00006f50) created at:
    #0 pthread_mutex_lock /DATA/disk3/xzx/llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1339:3 (gtests_dbms+0x362a87b)
    #1 std::__1::mutex::lock() <null> (libc++.so.1+0x52e35)
    #2 DB::PS::V3::PageDirectory<DB::PS::V3::universal::PageDirectoryTrait>::gcInMemEntries(DB::PS::V3::PageDirectory<DB::PS::V3::universal::PageDirectoryTrait>::InMemGCOption const&) /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/Page/V3/PageDirectory.cpp:2216:28 (gtests_dbms+0x117fe996)
    #3 DB::PS::V3::PageDirectoryFactory<DB::PS::V3::universal::FactoryTrait>::createFromReader(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::shared_ptr<DB::PS::V3::WALStoreReader>, std::__1::unique_ptr<DB::PS::V3::WALStore, std::__1::default_delete<DB::PS::V3::WALStore>>) /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/Page/V3/PageDirectoryFactory.cpp:63:10 (gtests_dbms+0x1181d3f1)
    #4 DB::PS::V3::PageDirectoryFactory<DB::PS::V3::universal::FactoryTrait>::create(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::shared_ptr<DB::FileProvider>&, std::__1::shared_ptr<DB::PSDiskDelegator>&, DB::PS::V3::WALConfig const&) /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/Page/V3/PageDirectoryFactory.cpp:45:12 (gtests_dbms+0x1181d1e7)
    #5 DB::UniversalPageStorage::restore() /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/Page/V3/Universal/UniversalPageStorage.cpp:91:27 (gtests_dbms+0x118a9cd2)
    #6 DB::UniversalPageStorageService::create(DB::Context&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::shared_ptr<DB::PSDiskDelegator>, DB::PageStorageConfig const&) /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/Page/V3/Universal/UniversalPageStorageService.cpp:57:32 (gtests_dbms+0x118bb959)
    #7 DB::SharedContextDisagg::initReadNodePageCache(DB::PathPool const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, unsigned long) /DATA/disk3/xzx/tf-tmp/dbms/src/Interpreters/SharedContexts/Disagg.cpp:75:33 (gtests_dbms+0x1097f57c)
    #8 DB::DM::tests::DMStoreForSegmentReadTaskTest::initReadNodePageCacheIfUninitialized() /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/DeltaMerge/tests/gtest_segment_read_task.cpp:220:51 (gtests_dbms+0x6ec4c6a)
    #9 DB::DM::tests::DMStoreForSegmentReadTaskTest::SetUp() /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/DeltaMerge/tests/gtest_segment_read_task.cpp:154:9 (gtests_dbms+0x6eb9571)
    #10 void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/src/gtest.cc:2443:10 (gtests_dbms+0xe5645e9)
    #11 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/src/gtest.cc:2479:14 (gtests_dbms+0xe5645e9)
    #12 testing::Test::Run() /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/src/gtest.cc:2513:3 (gtests_dbms+0xe539c7e)
    #13 testing::TestInfo::Run() /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/src/gtest.cc:2693:11 (gtests_dbms+0xe53b59e)
    #14 testing::TestCase::Run() /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/src/gtest.cc:2811:28 (gtests_dbms+0xe53c583)
    #15 testing::internal::UnitTestImpl::RunAllTests() /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/src/gtest.cc:5177:43 (gtests_dbms+0xe54e99a)
    #16 bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/src/gtest.cc:2443:10 (gtests_dbms+0xe565afd)
    #17 bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/src/gtest.cc:2479:14 (gtests_dbms+0xe565afd)
    #18 testing::UnitTest::Run() /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/src/gtest.cc:4786:10 (gtests_dbms+0xe54e264)
    #19 RUN_ALL_TESTS() /DATA/disk3/xzx/tf-tmp/contrib/googletest/googletest/include/gtest/gtest.h:2341:46 (gtests_dbms+0x77c32c7)
    #20 main /DATA/disk3/xzx/tf-tmp/dbms/src/TestUtils/gtests_dbms_main.cpp:120:16 (gtests_dbms+0x77c32c7)

  Thread T3 'bg-0' (tid=4095579, running) created by main thread at:
    #0 pthread_create /DATA/disk3/xzx/llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1020:3 (gtests_dbms+0x3628b7b)
    #1 std::__1::__libcpp_thread_create[abi:ue170006](unsigned long*, void* (*)(void*), void*) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__threading_support:371:10 (gtests_dbms+0x10c3c0bb)
    #2 std::__1::thread::thread<DB::BackgroundProcessingPool::BackgroundProcessingPool(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>)::$_1, void>(DB::BackgroundProcessingPool::BackgroundProcessingPool(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>)::$_1&&) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__thread/thread.h:248:16 (gtests_dbms+0x10c3c0bb)
    #3 DB::BackgroundProcessingPool::BackgroundProcessingPool(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>) /DATA/disk3/xzx/tf-tmp/dbms/src/Storages/BackgroundProcessingPool.cpp:103:22 (gtests_dbms+0x10c3c0bb)
    #4 DB::BackgroundProcessingPool* std::__1::construct_at[abi:ue170006]<DB::BackgroundProcessingPool, unsigned short&, char const (&) [4], std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>, DB::BackgroundProcessingPool*>(DB::BackgroundProcessingPool*, unsigned short&, char const (&) [4], std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>&&) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/construct_at.h:41:46 (gtests_dbms+0x100d70f2)
    #5 void std::__1::allocator_traits<std::__1::allocator<DB::BackgroundProcessingPool>>::construct[abi:ue170006]<DB::BackgroundProcessingPool, unsigned short&, char const (&) [4], std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>, void, void>(std::__1::allocator<DB::BackgroundProcessingPool>&, DB::BackgroundProcessingPool*, unsigned short&, char const (&) [4], std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>&&) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/allocator_traits.h:304:9 (gtests_dbms+0x100b92a9)
    #6 std::__1::__shared_ptr_emplace<DB::BackgroundProcessingPool, std::__1::allocator<DB::BackgroundProcessingPool>>::__shared_ptr_emplace[abi:ue170006]<unsigned short&, char const (&) [4], std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>>(std::__1::allocator<DB::BackgroundProcessingPool>, unsigned short&, char const (&) [4], std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>&&) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/shared_ptr.h:299:13 (gtests_dbms+0x100b92a9)
    #7 std::__1::shared_ptr<DB::BackgroundProcessingPool> std::__1::allocate_shared[abi:ue170006]<DB::BackgroundProcessingPool, std::__1::allocator<DB::BackgroundProcessingPool>, unsigned short&, char const (&) [4], std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>, void>(std::__1::allocator<DB::BackgroundProcessingPool> const&, unsigned short&, char const (&) [4], std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>&&) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/shared_ptr.h:1022:55 (gtests_dbms+0x100b92a9)
    #8 std::__1::shared_ptr<DB::BackgroundProcessingPool> std::__1::make_shared[abi:ue170006]<DB::BackgroundProcessingPool, unsigned short&, char const (&) [4], std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>, void>(unsigned short&, char const (&) [4], std::__1::shared_ptr<DB::JointThreadInfoJeallocMap>&&) /DATA/disk3/xzx/llvm-17.0.6/bin/../include/c++/v1/__memory/shared_ptr.h:1031:12 (gtests_dbms+0x100b92a9)
    #9 DB::Context::initializeBackgroundPool(unsigned short) /DATA/disk3/xzx/tf-tmp/dbms/src/Interpreters/Context.cpp:1336:15 (gtests_dbms+0x100b92a9)
    #10 DB::tests::TiFlashTestEnv::addGlobalContext(DB::Settings const&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>>, DB::PageStorageRunMode, unsigned long) /DATA/disk3/xzx/tf-tmp/dbms/src/Debug/TiFlashTestEnv.cpp:126:21 (gtests_dbms+0xfad7321)
    #11 DB::tests::TiFlashTestEnv::initializeGlobalContext(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>>, DB::PageStorageRunMode, unsigned long) /DATA/disk3/xzx/tf-tmp/dbms/src/Debug/TiFlashTestEnv.cpp:103:5 (gtests_dbms+0xfad6eb4)
    #12 main /DATA/disk3/xzx/tf-tmp/dbms/src/TestUtils/gtests_dbms_main.cpp:73:5 (gtests_dbms+0x77c22af)

SUMMARY: ThreadSanitizer: data race /DATA/disk3/xzx/llvm-project/compiler-rt/lib/tsan/rtl/tsan_new_delete.cpp:126:3 in operator delete(void*)
4. What is your TiFlash version? (Required)

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce DMStoreForSegmentReadTaskTest.FetchPagesNoTinyNoInMem with a ThreadSanitizer build and inspect the reported path in PageDirectory.cpp, especially gcInMemSnapshots at line 2155. Trace its callers through gcInMemEntries, GCDefines.cpp, and UniversalPageStorage.cpp. Done means the test no longer reports a data race and completes without an error.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
databases
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.