kuzu
kuzu copied to clipboard
Data race in progressFunc
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
==================