kuzu icon indicating copy to clipboard operation
kuzu copied to clipboard

Data race in progressFunc

Open ray6080 opened this issue 10 months ago • 0 comments

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 avatar Apr 16 '24 14:04 ray6080