Joe McDonnell created IMPALA-12193:
--------------------------------------
Summary: DataCacheTest.SetReadOnly fails for TSAN builds
Key: IMPALA-12193
URL: https://issues.apache.org/jira/browse/IMPALA-12193
Project: IMPALA
Issue Type: Bug
Components: Backend
Affects Versions: Impala 4.3.0
Reporter: Joe McDonnell
Assignee: Joe McDonnell
The DataCacheTest.SetReadOnly test fails on TSAN due to races around the
readonly_ variable:
{noformat}
WARNING: ThreadSanitizer: data race (pid=519229)
Write of size 1 at 0x7fff29489528 by main thread:
#0 impala::io::DataCache::SetDataCacheReadOnly()
/home/joemcdonnell/upstream/Impala/be/src/runtime/io/data-cache.cc:1391:13
(data-cache-test+0x1f9ab61)
#1
impala::io::DataCacheBaseTest::MultiThreadedReadWrite(impala::io::DataCache*,
long, bool, bool, double*, bool)
/home/joemcdonnell/upstream/Impala/be/src/runtime/io/data-cache-test.cc:153:27
(data-cache-test+0x1efdd59)
#2 impala::io::DataCacheTest_SetReadOnly_Test::TestBody()
/home/joemcdonnell/upstream/Impala/be/src/runtime/io/data-cache-test.cc:904:3
(data-cache-test+0x1ef8be9)
#3 void
testing::internal::HandleExceptionsInMethodIfSupported<testing::Test,
void>(testing::Test*, void (testing::Test::*)(), char const*) <null>
(data-cache-test+0x4e7468c)
#4 __libc_start_main <null> (libc.so.6+0x24082) Previous read of size 1 at
0x7fff29489528 by thread T767:
#0 impala::io::DataCache::StoreInternal(impala::io::DataCache::CacheKey
const&, unsigned char const*, long)
/home/joemcdonnell/upstream/Impala/be/src/runtime/io/data-cache.cc:1481:7
(data-cache-test+0x1f9a6b3)
#1 impala::io::DataCache::Store(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, long, long, unsigned
char const*, long)
/home/joemcdonnell/upstream/Impala/be/src/runtime/io/data-cache.cc:1373:10
(data-cache-test+0x1f9a164)
#2 impala::io::DataCacheBaseTest::ThreadFn(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, impala::io::DataCache*,
long, impala::CountingBarrier*, int*, long*)
/home/joemcdonnell/upstream/Impala/be/src/runtime/io/data-cache-test.cc:292:14
(data-cache-test+0x1f096cc)
#3 boost::_mfi::mf6<void, impala::io::DataCacheBaseTest,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
const&, impala::io::DataCache*, long, impala::CountingBarrier*, int*,
long*>::operator()(impala::io::DataCacheBaseTest*,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
const&, impala::io::DataCache*, long, impala::CountingBarrier*, int*, long*)
const
/opt/Impala-Toolchain/toolchain-packages-gcc10.4.0/boost-1.74.0-p1/include/boost/bind/mem_fn_template.hpp:732:29
(data-cache-test+0x1f0b33c)
#4 void
boost::_bi::list7<boost::_bi::value<impala::io::DataCacheBaseTest*>,
boost::_bi::value<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >, boost::_bi::value<impala::io::DataCache*>,
boost::_bi::value<long>, boost::_bi::value<impala::CountingBarrier*>,
boost::_bi::value<int*>, boost::_bi::value<long*>
>::operator()<boost::_mfi::mf6<void, impala::io::DataCacheBaseTest,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
const&, impala::io::DataCache*, long, impala::CountingBarrier*, int*, long*>,
boost::_bi::list0>(boost::_bi::type<void>, boost::_mfi::mf6<void,
impala::io::DataCacheBaseTest, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, impala::io::DataCache*,
long, impala::CountingBarrier*, int*, long*>&, boost::_bi::list0&, int)
/opt/Impala-Toolchain/toolchain-packages-gcc10.4.0/boost-1.74.0-p1/include/boost/bind/bind.hpp:676:9
(data-cache-test+0x1f0b249)
#5 boost::_bi::bind_t<void, boost::_mfi::mf6<void,
impala::io::DataCacheBaseTest, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, impala::io::DataCache*,
long, impala::CountingBarrier*, int*, long*>,
boost::_bi::list7<boost::_bi::value<impala::io::DataCacheBaseTest*>,
boost::_bi::value<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >, boost::_bi::value<impala::io::DataCache*>,
boost::_bi::value<long>, boost::_bi::value<impala::CountingBarrier*>,
boost::_bi::value<int*>, boost::_bi::value<long*> > >::operator()()
/opt/Impala-Toolchain/toolchain-packages-gcc10.4.0/boost-1.74.0-p1/include/boost/bind/bind.hpp:1294:16
(data-cache-test+0x1f0b0f3)
#6
boost::detail::function::void_function_obj_invoker0<boost::_bi::bind_t<void,
boost::_mfi::mf6<void, impala::io::DataCacheBaseTest,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
const&, impala::io::DataCache*, long, impala::CountingBarrier*, int*, long*>,
boost::_bi::list7<boost::_bi::value<impala::io::DataCacheBaseTest*>,
boost::_bi::value<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >, boost::_bi::value<impala::io::DataCache*>,
boost::_bi::value<long>, boost::_bi::value<impala::CountingBarrier*>,
boost::_bi::value<int*>, boost::_bi::value<long*> > >,
void>::invoke(boost::detail::function::function_buffer&)
/opt/Impala-Toolchain/toolchain-packages-gcc10.4.0/boost-1.74.0-p1/include/boost/function/function_template.hpp:158:11
(data-cache-test+0x1f0ac11)
#7 boost::function0<void>::operator()() const
/opt/Impala-Toolchain/toolchain-packages-gcc10.4.0/boost-1.74.0-p1/include/boost/function/function_template.hpp:763:14
(data-cache-test+0x2166bd1)
#8 impala::Thread::SuperviseThread(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
const&, boost::function<void ()>, impala::ThreadDebugInfo const*,
impala::Promise<long, (impala::PromiseMode)0>*)
/home/joemcdonnell/upstream/Impala/be/src/util/thread.cc:360:3
(data-cache-test+0x2981908)
#9 void
boost::_bi::list5<boost::_bi::value<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > >,
boost::_bi::value<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >, boost::_bi::value<boost::function<void ()> >,
boost::_bi::value<impala::ThreadDebugInfo*>,
boost::_bi::value<impala::Promise<long, (impala::PromiseMode)0>*>
>::operator()<void (*)(std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, boost::function<void
()>, impala::ThreadDebugInfo const*, impala::Promise<long,
(impala::PromiseMode)0>*), boost::_bi::list0>(boost::_bi::type<void>, void
(*&)(std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, boost::function<void
()>, impala::ThreadDebugInfo const*, impala::Promise<long,
(impala::PromiseMode)0>*), boost::_bi::list0&, int)
/opt/Impala-Toolchain/toolchain-packages-gcc10.4.0/boost-1.74.0-p1/include/boost/bind/bind.hpp:531:9
(data-cache-test+0x298a76c)
#10 boost::_bi::bind_t<void, void (*)(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
const&, boost::function<void ()>, impala::ThreadDebugInfo const*,
impala::Promise<long, (impala::PromiseMode)0>*),
boost::_bi::list5<boost::_bi::value<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > >,
boost::_bi::value<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >, boost::_bi::value<boost::function<void ()> >,
boost::_bi::value<impala::ThreadDebugInfo*>,
boost::_bi::value<impala::Promise<long, (impala::PromiseMode)0>*> >
>::operator()()
/opt/Impala-Toolchain/toolchain-packages-gcc10.4.0/boost-1.74.0-p1/include/boost/bind/bind.hpp:1294:16
(data-cache-test+0x298a683)
#11 boost::detail::thread_data<boost::_bi::bind_t<void, void
(*)(std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, boost::function<void
()>, impala::ThreadDebugInfo const*, impala::Promise<long,
(impala::PromiseMode)0>*),
boost::_bi::list5<boost::_bi::value<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > >,
boost::_bi::value<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >, boost::_bi::value<boost::function<void ()> >,
boost::_bi::value<impala::ThreadDebugInfo*>,
boost::_bi::value<impala::Promise<long, (impala::PromiseMode)0>*> > > >::run()
/opt/Impala-Toolchain/toolchain-packages-gcc10.4.0/boost-1.74.0-p1/include/boost/thread/detail/thread.hpp:120:17
(data-cache-test+0x298a370)
#12 thread_proxy <null> (data-cache-test+0x3904f36) Location is stack of
main thread. Thread T767 (tid=520047, running) created by main thread at:
#0 pthread_create
/mnt/source/llvm/llvm-5.0.1.src-p5/projects/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc:889:3
(data-cache-test+0x1e8ed83)
#1 boost::thread::start_thread_noexcept() <null> (data-cache-test+0x390423d)
#2 boost::thread::thread<void (*)(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
const&, boost::function<void ()>, impala::ThreadDebugInfo const*,
impala::Promise<long, (impala::PromiseMode)0>*),
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >, boost::function<void ()>, impala::ThreadDebugInfo*,
impala::Promise<long, (impala::PromiseMode)0>*>(void
(*)(std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, boost::function<void
()>, impala::ThreadDebugInfo const*, impala::Promise<long,
(impala::PromiseMode)0>*), std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, boost::function<void ()>, impala::ThreadDebugInfo*, impala::Promise<long,
(impala::PromiseMode)0>*)
/opt/Impala-Toolchain/toolchain-packages-gcc10.4.0/boost-1.74.0-p1/include/boost/thread/detail/thread.hpp:424:13
(data-cache-test+0x2984ec4)
#3 impala::Thread::StartThread(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
const&, boost::function<void ()> const&, std::unique_ptr<impala::Thread,
std::default_delete<impala::Thread> >*, bool)
/home/joemcdonnell/upstream/Impala/be/src/util/thread.cc:317:13
(data-cache-test+0x298128c)
#4 impala::Status impala::Thread::Create<boost::_bi::bind_t<void,
boost::_mfi::mf6<void, impala::io::DataCacheBaseTest,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
const&, impala::io::DataCache*, long, impala::CountingBarrier*, int*, long*>,
boost::_bi::list7<boost::_bi::value<impala::io::DataCacheBaseTest*>,
boost::_bi::value<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >, boost::_bi::value<impala::io::DataCache*>,
boost::_bi::value<long>, boost::_bi::value<impala::CountingBarrier*>,
boost::_bi::value<int*>, boost::_bi::value<long*> > >
>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
> const&, std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, boost::_bi::bind_t<void, boost::_mfi::mf6<void,
impala::io::DataCacheBaseTest, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, impala::io::DataCache*,
long, impala::CountingBarrier*, int*, long*>,
boost::_bi::list7<boost::_bi::value<impala::io::DataCacheBaseTest*>,
boost::_bi::value<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >, boost::_bi::value<impala::io::DataCache*>,
boost::_bi::value<long>, boost::_bi::value<impala::CountingBarrier*>,
boost::_bi::value<int*>, boost::_bi::value<long*> > > const&,
std::unique_ptr<impala::Thread, std::default_delete<impala::Thread> >*, bool)
/home/joemcdonnell/upstream/Impala/be/src/util/thread.h:74:12
(data-cache-test+0x1f092ca)
#5
impala::io::DataCacheBaseTest::MultiThreadedReadWrite(impala::io::DataCache*,
long, bool, bool, double*, bool)
/home/joemcdonnell/upstream/Impala/be/src/runtime/io/data-cache-test.cc:142:7
(data-cache-test+0x1efdb75)
#6 impala::io::DataCacheTest_SetReadOnly_Test::TestBody()
/home/joemcdonnell/upstream/Impala/be/src/runtime/io/data-cache-test.cc:904:3
(data-cache-test+0x1ef8be9)
#7 void
testing::internal::HandleExceptionsInMethodIfSupported<testing::Test,
void>(testing::Test*, void (testing::Test::*)(), char const*) <null>
(data-cache-test+0x4e7468c)
#8 __libc_start_main <null> (libc.so.6+0x24082)SUMMARY: ThreadSanitizer:
data race
/home/joemcdonnell/upstream/Impala/be/src/runtime/io/data-cache.cc:1391:13 in
impala::io::DataCache::SetDataCacheReadOnly()
==================
{noformat}
The locking needs some work (or readonly_ needs to be an AtomicBool).
--
This message was sent by Atlassian Jira
(v8.20.10#820010)