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)

Reply via email to