Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Data race in progressFunc #3293

Open
ray6080 opened this issue Apr 16, 2024 · 0 comments
Open

Data race in progressFunc #3293

ray6080 opened this issue Apr 16, 2024 · 0 comments
Assignees
Labels
bug Something isn't working

Comments

@ray6080
Copy link
Contributor

ray6080 commented Apr 16, 2024

Turn on TSAN reports following errors. To reproduce, change DEFAULT_VM_REGION_MAX_SIZE to a smaller size (4GB), and turn on TSAN=1. Most tests should be able to trigger this during copy.

Starting to execute query: COPY person FROM "/Users/guodong/Developer/kuzu/dataset/tinysnb/vPerson.csv" (HeaDER=true, deLim=',');
==================
WARNING: ThreadSanitizer: data race (pid=8199)
  Read of size 8 at 0x000107451d38 by thread T2:
    #0 kuzu::processor::progressFunc(kuzu::function::TableFuncSharedState*) <null>:39095940 (e2e_test:arm64+0x1007ca6f8)
    #1 std::__1::__function::__func<double (*)(kuzu::function::TableFuncSharedState*), std::__1::allocator<double (*)(kuzu::function::TableFuncSharedState*)>, double (kuzu::function::TableFuncSharedState*)>::operator()(kuzu::function::TableFuncSharedState*&&) <null>:39095940 (e2e_test:arm64+0x1007ccf40)
    #2 kuzu::processor::InQueryCall::getProgress(kuzu::processor::ExecutionContext*) const <null>:39095940 (e2e_test:arm64+0x10087ad40)
    #3 kuzu::processor::PhysicalOperator::getNextTuple(kuzu::processor::ExecutionContext*) <null>:39095940 (e2e_test:arm64+0x1008ad4fc)
    #4 kuzu::processor::NodeBatchInsert::executeInternal(kuzu::processor::ExecutionContext*) <null>:39095940 (e2e_test:arm64+0x1008313bc)
    #5 kuzu::processor::ProcessorTask::run() <null>:39095940 (e2e_test:arm64+0x1008c8f6c)
    #6 kuzu::common::TaskScheduler::runWorkerThread() <null>:39095940 (e2e_test:arm64+0x100153cac)
    #7 void* std::__1::__thread_proxy[abi:v160006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, kuzu::common::TaskScheduler::TaskScheduler(unsigned long long)::$_0>>(void*) <null>:39095940 (e2e_test:arm64+0x100154050)

  Previous write of size 8 at 0x000107451d38 by thread T1 (mutexes: write M0):
    #0 kuzu::processor::tableFunc(kuzu::function::TableFuncInput&, kuzu::function::TableFuncOutput&) <null>:39095940 (e2e_test:arm64+0x1007c9978)
    #1 std::__1::__function::__func<unsigned long long (*)(kuzu::function::TableFuncInput&, kuzu::function::TableFuncOutput&), std::__1::allocator<unsigned long long (*)(kuzu::function::TableFuncInput&, kuzu::function::TableFuncOutput&)>, unsigned long long (kuzu::function::TableFuncInput&, kuzu::function::TableFuncOutput&)>::operator()(kuzu::function::TableFuncInput&, kuzu::function::TableFuncOutput&) <null>:39095940 (e2e_test:arm64+0x1001c9eb0)
    #2 kuzu::processor::InQueryCall::getNextTuplesInternal(kuzu::processor::ExecutionContext*) <null>:39095940 (e2e_test:arm64+0x10087abf4)
    #3 kuzu::processor::PhysicalOperator::getNextTuple(kuzu::processor::ExecutionContext*) <null>:39095940 (e2e_test:arm64+0x1008ad4c8)
    #4 kuzu::processor::NodeBatchInsert::executeInternal(kuzu::processor::ExecutionContext*) <null>:39095940 (e2e_test:arm64+0x1008313bc)
    #5 kuzu::processor::ProcessorTask::run() <null>:39095940 (e2e_test:arm64+0x1008c8f6c)
    #6 kuzu::common::TaskScheduler::runWorkerThread() <null>:39095940 (e2e_test:arm64+0x100153cac)
    #7 void* std::__1::__thread_proxy[abi:v160006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, kuzu::common::TaskScheduler::TaskScheduler(unsigned long long)::$_0>>(void*) <null>:39095940 (e2e_test:arm64+0x100154050)

  Location is heap block of size 208 at 0x000107451cf0 allocated by thread T1:
    #0 operator new(unsigned long) <null>:39095940 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x84420)
    #1 std::__1::__unique_if<kuzu::processor::ParallelCSVScanSharedState>::__unique_single std::__1::make_unique[abi:v160006]<kuzu::processor::ParallelCSVScanSharedState, kuzu::common::ReaderConfig, unsigned long long&, unsigned long, kuzu::main::ClientContext*&, kuzu::common::CSVReaderConfig>(kuzu::common::ReaderConfig&&, unsigned long long&, unsigned long&&, kuzu::main::ClientContext*&, kuzu::common::CSVReaderConfig&&) <null>:39095940 (e2e_test:arm64+0x1007cb5d0)
    #2 kuzu::processor::initSharedState(kuzu::function::TableFunctionInitInput&) <null>:39095940 (e2e_test:arm64+0x1007ca038)
    #3 std::__1::__function::__func<std::__1::unique_ptr<kuzu::function::TableFuncSharedState, std::__1::default_delete<kuzu::function::TableFuncSharedState>> (*)(kuzu::function::TableFunctionInitInput&), std::__1::allocator<std::__1::unique_ptr<kuzu::function::TableFuncSharedState, std::__1::default_delete<kuzu::function::TableFuncSharedState>> (*)(kuzu::function::TableFunctionInitInput&)>, std::__1::unique_ptr<kuzu::function::TableFuncSharedState, std::__1::default_delete<kuzu::function::TableFuncSharedState>> (kuzu::function::TableFunctionInitInput&)>::operator()(kuzu::function::TableFunctionInitInput&) <null>:39095940 (e2e_test:arm64+0x1001ca344)
    #4 kuzu::processor::InQueryCall::initGlobalStateInternal(kuzu::processor::ExecutionContext*) <null>:39095940 (e2e_test:arm64+0x10087aac8)
    #5 kuzu::processor::PhysicalOperator::initGlobalState(kuzu::processor::ExecutionContext*) <null>:39095940 (e2e_test:arm64+0x1008ad160)
    #6 kuzu::processor::PhysicalOperator::initGlobalState(kuzu::processor::ExecutionContext*) <null>:39095940 (e2e_test:arm64+0x1008ad144)
    #7 kuzu::processor::ProcessorTask::run() <null>:39095940 (e2e_test:arm64+0x1008c8e68)
    #8 kuzu::common::TaskScheduler::runWorkerThread() <null>:39095940 (e2e_test:arm64+0x100153cac)
    #9 void* std::__1::__thread_proxy[abi:v160006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, kuzu::common::TaskScheduler::TaskScheduler(unsigned long long)::$_0>>(void*) <null>:39095940 (e2e_test:arm64+0x100154050)

  Mutex M0 (0x000107451cf8) created at:
    #0 pthread_mutex_lock <null>:39095940 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x3cf8c)
    #1 std::__1::mutex::lock() <null>:39095940 (libc++.1.dylib:arm64e+0x162fc)
    #2 kuzu::processor::tableFunc(kuzu::function::TableFuncInput&, kuzu::function::TableFuncOutput&) <null>:39095940 (e2e_test:arm64+0x1007c9698)
    #3 std::__1::__function::__func<unsigned long long (*)(kuzu::function::TableFuncInput&, kuzu::function::TableFuncOutput&), std::__1::allocator<unsigned long long (*)(kuzu::function::TableFuncInput&, kuzu::function::TableFuncOutput&)>, unsigned long long (kuzu::function::TableFuncInput&, kuzu::function::TableFuncOutput&)>::operator()(kuzu::function::TableFuncInput&, kuzu::function::TableFuncOutput&) <null>:39095940 (e2e_test:arm64+0x1001c9eb0)
    #4 kuzu::processor::InQueryCall::getNextTuplesInternal(kuzu::processor::ExecutionContext*) <null>:39095940 (e2e_test:arm64+0x10087abf4)
    #5 kuzu::processor::PhysicalOperator::getNextTuple(kuzu::processor::ExecutionContext*) <null>:39095940 (e2e_test:arm64+0x1008ad4c8)
    #6 kuzu::processor::NodeBatchInsert::executeInternal(kuzu::processor::ExecutionContext*) <null>:39095940 (e2e_test:arm64+0x1008313bc)
    #7 kuzu::processor::ProcessorTask::run() <null>:39095940 (e2e_test:arm64+0x1008c8f6c)
    #8 kuzu::common::TaskScheduler::runWorkerThread() <null>:39095940 (e2e_test:arm64+0x100153cac)
    #9 void* std::__1::__thread_proxy[abi:v160006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, kuzu::common::TaskScheduler::TaskScheduler(unsigned long long)::$_0>>(void*) <null>:39095940 (e2e_test:arm64+0x100154050)

  Thread T2 (tid=33068158, running) created by main thread at:
    #0 pthread_create <null>:39095940 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x3062c)
    #1 void std::__1::allocator_traits<std::__1::allocator<std::__1::thread>>::construct[abi:v160006]<std::__1::thread, kuzu::common::TaskScheduler::TaskScheduler(unsigned long long)::$_0, void, void>(std::__1::allocator<std::__1::thread>&, std::__1::thread*, kuzu::common::TaskScheduler::TaskScheduler(unsigned long long)::$_0&&) <null>:39095940 (e2e_test:arm64+0x100153f64)
    #2 kuzu::common::TaskScheduler::TaskScheduler(unsigned long long) <null>:39095940 (e2e_test:arm64+0x1001525e8)
    #3 kuzu::common::TaskScheduler::TaskScheduler(unsigned long long) <null>:39095940 (e2e_test:arm64+0x10015285c)
    #4 kuzu::processor::QueryProcessor::QueryProcessor(unsigned long long) <null>:39095940 (e2e_test:arm64+0x1008c7c04)
    #5 kuzu::main::Database::Database(std::__1::basic_string_view<char, std::__1::char_traits<char>>, kuzu::main::SystemConfig) <null>:39095940 (e2e_test:arm64+0x100642648)
    #6 kuzu::main::Database::Database(std::__1::basic_string_view<char, std::__1::char_traits<char>>, kuzu::main::SystemConfig) <null>:39095940 (e2e_test:arm64+0x100643a6c)
    #7 kuzu::testing::DBTest::createDB(unsigned long long) <null>:39095940 (e2e_test:arm64+0x100084274)
    #8 EndToEndTest::SetUp() <null>:39095940 (e2e_test:arm64+0x10000cd50)
    #9 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null>:39095940 (e2e_test:arm64+0x100c2a9c4)
    #10 testing::Test::Run() <null>:39095940 (e2e_test:arm64+0x100c2a48c)
    #11 testing::TestInfo::Run() <null>:39095940 (e2e_test:arm64+0x100c2ca7c)
    #12 testing::TestSuite::Run() <null>:39095940 (e2e_test:arm64+0x100c2e0d0)
    #13 testing::internal::UnitTestImpl::RunAllTests() <null>:39095940 (e2e_test:arm64+0x100c46624)
    #14 bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) <null>:39095940 (e2e_test:arm64+0x100c45a24)
    #15 testing::UnitTest::Run() <null>:39095940 (e2e_test:arm64+0x100c4594c)
    #16 main <null>:39095940 (e2e_test:arm64+0x10000614c)

  Thread T1 (tid=33068157, running) created by main thread at:
    #0 pthread_create <null>:39095940 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x3062c)
    #1 void std::__1::allocator_traits<std::__1::allocator<std::__1::thread>>::construct[abi:v160006]<std::__1::thread, kuzu::common::TaskScheduler::TaskScheduler(unsigned long long)::$_0, void, void>(std::__1::allocator<std::__1::thread>&, std::__1::thread*, kuzu::common::TaskScheduler::TaskScheduler(unsigned long long)::$_0&&) <null>:39095940 (e2e_test:arm64+0x100153f64)
    #2 kuzu::common::TaskScheduler::TaskScheduler(unsigned long long) <null>:39095940 (e2e_test:arm64+0x1001525e8)
    #3 kuzu::common::TaskScheduler::TaskScheduler(unsigned long long) <null>:39095940 (e2e_test:arm64+0x10015285c)
    #4 kuzu::processor::QueryProcessor::QueryProcessor(unsigned long long) <null>:39095940 (e2e_test:arm64+0x1008c7c04)
    #5 kuzu::main::Database::Database(std::__1::basic_string_view<char, std::__1::char_traits<char>>, kuzu::main::SystemConfig) <null>:39095940 (e2e_test:arm64+0x100642648)
    #6 kuzu::main::Database::Database(std::__1::basic_string_view<char, std::__1::char_traits<char>>, kuzu::main::SystemConfig) <null>:39095940 (e2e_test:arm64+0x100643a6c)
    #7 kuzu::testing::DBTest::createDB(unsigned long long) <null>:39095940 (e2e_test:arm64+0x100084274)
    #8 EndToEndTest::SetUp() <null>:39095940 (e2e_test:arm64+0x10000cd50)
    #9 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null>:39095940 (e2e_test:arm64+0x100c2a9c4)
    #10 testing::Test::Run() <null>:39095940 (e2e_test:arm64+0x100c2a48c)
    #11 testing::TestInfo::Run() <null>:39095940 (e2e_test:arm64+0x100c2ca7c)
    #12 testing::TestSuite::Run() <null>:39095940 (e2e_test:arm64+0x100c2e0d0)
    #13 testing::internal::UnitTestImpl::RunAllTests() <null>:39095940 (e2e_test:arm64+0x100c46624)
    #14 bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) <null>:39095940 (e2e_test:arm64+0x100c45a24)
    #15 testing::UnitTest::Run() <null>:39095940 (e2e_test:arm64+0x100c4594c)
    #16 main <null>:39095940 (e2e_test:arm64+0x10000614c)

SUMMARY: ThreadSanitizer: data race (e2e_test:arm64+0x1007ca6f8) in kuzu::processor::progressFunc(kuzu::function::TableFuncSharedState*)+0x30
==================
@ray6080 ray6080 added the bug Something isn't working label Apr 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants