Uploaded image for project: 'Couchbase Server'
  1. Couchbase Server
  2. MB-19183

ThreadSanitizer: data race on ep-engine_dcp_test during CouchKVStore::snapshotVBucket

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • Major
    • 4.5.0
    • 4.5.0
    • couchbase-bucket
    • None
    • Ubuntu 12.04 (commit validation)
    • Untriaged
    • Unknown
    • KV: April 13 - April 26

    Description

      The following ThreadSanitizer warning was initially seen during commit-validation for a patch adding an atomic unordered map (http://cv.jenkins.couchbase.com/job/ep-engine-threadsanitizer-master/394/consoleFull)

      SUMMARY: ThreadSanitizer: data race ??:0 operator delete(void*)
      

      However I have subsequently reproduced it without that patch, using current tip of couchbase/master (1b03555):

      (first build with TSan)...

      TSAN_OPTIONS=halt_on_error=true ./ep-engine_dcp_test --gtest_repeat=-1
      ...
      WARNING: ThreadSanitizer: data race (pid=13347)
        Write of size 8 at 0x7d100000c5d0 by thread T21 (mutexes: write M7104781):
          #0 operator delete(void*) <null> (ep-engine_dcp_test+0x00000047319b)
          #1 std::string::_Rep::_M_dispose(std::allocator<char> const&) /build/buildd/gcc-5-5.1.0/build/x86_64-linux-gnu/libstdc++-v3/include/bits/basic_string.h:2642 (libstdc++.so.6+0x0000000ceba7)
          #2 CouchKVStore::snapshotVBucket(unsigned short, vbucket_state&, VBStatePersist) /home/couchbase/couchbase/ep-engine/src/couch-kvstore/couch-kvstore.cc:1003 (ep-engine_dcp_test+0x000000662b5e)
          #3 EventuallyPersistentStore::persistVBState(Priority const&, unsigned short) /home/couchbase/couchbase/ep-engine/src/ep.cc:1358 (ep-engine_dcp_test+0x000000554a8f)
          #4 VBStatePersistTask::run() /home/couchbase/couchbase/ep-engine/src/tasks.cc:88 (ep-engine_dcp_test+0x000000605a16)
          #5 ExecutorThread::run() /home/couchbase/couchbase/ep-engine/src/executorthread.cc:115 (ep-engine_dcp_test+0x0000005bf281)
          #6 launch_executor_thread(void*) /home/couchbase/couchbase/ep-engine/src/executorthread.cc:33 (ep-engine_dcp_test+0x0000005bee35)
          #7 platform_thread_wrap(void*) /home/couchbase/couchbase/platform/src/cb_pthreads.cc:54 (libplatform.so.0.1.0+0x00000000558b)
       
        Previous atomic write of size 4 at 0x7d100000c5d0 by thread T22:
          #0 __tsan_atomic32_fetch_add <null> (ep-engine_dcp_test+0x0000004bcf86)
          #1 std::string::_Rep::_M_dispose(std::allocator<char> const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/5.1.0/../../../../include/c++/5.1.0/ext/atomicity.h:81 (ep-engine_dcp_test+0x00000057b6de)
          #2 ~VBucketStateVisitor /usr/bin/../lib/gcc/x86_64-linux-gnu/5.1.0/../../../../include/c++/5.1.0/bits/stl_tree.h:859 (ep-engine_dcp_test+0x000000553ee2)
          #3 VBSnapshotTask::run() /home/couchbase/couchbase/ep-engine/src/tasks.cc:69 (ep-engine_dcp_test+0x000000605756)
          #4 ExecutorThread::run() /home/couchbase/couchbase/ep-engine/src/executorthread.cc:115 (ep-engine_dcp_test+0x0000005bf281)
          #5 launch_executor_thread(void*) /home/couchbase/couchbase/ep-engine/src/executorthread.cc:33 (ep-engine_dcp_test+0x0000005bee35)
          #6 platform_thread_wrap(void*) /home/couchbase/couchbase/platform/src/cb_pthreads.cc:54 (libplatform.so.0.1.0+0x00000000558b)
       
        Mutex M7104781 (0x7db40000a000) created at:
          #0 pthread_mutex_trylock <null> (ep-engine_dcp_test+0x000000477840)
          #1 LockHolder /usr/bin/../lib/gcc/x86_64-linux-gnu/5.1.0/../../../../include/x86_64-linux-gnu/c++/5.1.0/bits/gthr-default.h:757 (ep-engine_dcp_test+0x000000553bc0)
          #2 VBSnapshotTask::run() /home/couchbase/couchbase/ep-engine/src/tasks.cc:69 (ep-engine_dcp_test+0x000000605756)
          #3 ExecutorThread::run() /home/couchbase/couchbase/ep-engine/src/executorthread.cc:115 (ep-engine_dcp_test+0x0000005bf281)
          #4 launch_executor_thread(void*) /home/couchbase/couchbase/ep-engine/src/executorthread.cc:33 (ep-engine_dcp_test+0x0000005bee35)
          #5 platform_thread_wrap(void*) /home/couchbase/couchbase/platform/src/cb_pthreads.cc:54 (libplatform.so.0.1.0+0x00000000558b)
       
        Thread T21 'mc:writer_4' (tid=25161, running) created by main thread at:
          #0 pthread_create <null> (ep-engine_dcp_test+0x000000476091)
          #1 cb_create_named_thread /home/couchbase/couchbase/platform/src/cb_pthreads.cc:104 (libplatform.so.0.1.0+0x0000000053e5)
          #2 ExecutorThread::start() /home/couchbase/couchbase/ep-engine/src/executorthread.cc:46 (ep-engine_dcp_test+0x0000005be8e8)
          #3 ExecutorPool::_startWorkers() /home/couchbase/couchbase/ep-engine/src/executorpool.cc:523 (ep-engine_dcp_test+0x0000005b8363)
          #4 ExecutorPool::_registerTaskable(Taskable&) /home/couchbase/couchbase/ep-engine/src/executorpool.cc:487 (ep-engine_dcp_test+0x0000005b787f)
          #5 ExecutorPool::registerTaskable(Taskable&) /home/couchbase/couchbase/ep-engine/src/executorpool.cc:492 (ep-engine_dcp_test+0x0000005b9f6e)
          #6 EventuallyPersistentStore::EventuallyPersistentStore(EventuallyPersistentEngine&) /home/couchbase/couchbase/ep-engine/src/ep.cc:393 (ep-engine_dcp_test+0x00000054a552)
          #7 EventuallyPersistentEngine::initialize(char const*) /home/couchbase/couchbase/ep-engine/src/ep_engine.cc:2117 (ep-engine_dcp_test+0x00000057fce4)
          #8 DCPTest::SetUp() /home/couchbase/couchbase/ep-engine/tests/module_tests/dcp_test.cc:105 (ep-engine_dcp_test+0x0000004e42ea)
          #9 void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) /home/couchbase/couchbase/googletest/googletest/src/gtest.cc:2402 (ep-engine_dcp_test+0x0000006d4be2)
          #10 testing::Test::Run() /home/couchbase/couchbase/googletest/googletest/src/gtest.cc:2470 (ep-engine_dcp_test+0x0000006a1b2f)
          #11 testing::TestInfo::Run() /home/couchbase/couchbase/googletest/googletest/src/gtest.cc:2656 (ep-engine_dcp_test+0x0000006a3e2b)
          #12 testing::TestCase::Run() /home/couchbase/couchbase/googletest/googletest/src/gtest.cc:2774 (ep-engine_dcp_test+0x0000006a4afa)
          #13 testing::internal::UnitTestImpl::RunAllTests() /home/couchbase/couchbase/googletest/googletest/src/gtest.cc:4649 (ep-engine_dcp_test+0x0000006b5823)
          #14 bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) /home/couchbase/couchbase/googletest/googletest/src/gtest.cc:2402 (ep-engine_dcp_test+0x0000006d5c72)
          #15 testing::UnitTest::Run() /home/couchbase/couchbase/googletest/googletest/src/gtest.cc:4257 (ep-engine_dcp_test+0x0000006b4e00)
          #16 main /home/couchbase/couchbase/googletest/googletest/include/gtest/gtest.h:2237 (ep-engine_dcp_test+0x0000004e2900)
       
        Thread T22 'mc:writer_5' (tid=25162, running) created by main thread at:
          #0 pthread_create <null> (ep-engine_dcp_test+0x000000476091)
          #1 cb_create_named_thread /home/couchbase/couchbase/platform/src/cb_pthreads.cc:104 (libplatform.so.0.1.0+0x0000000053e5)
          #2 ExecutorThread::start() /home/couchbase/couchbase/ep-engine/src/executorthread.cc:46 (ep-engine_dcp_test+0x0000005be8e8)
          #3 ExecutorPool::_startWorkers() /home/couchbase/couchbase/ep-engine/src/executorpool.cc:523 (ep-engine_dcp_test+0x0000005b8363)
          #4 ExecutorPool::_registerTaskable(Taskable&) /home/couchbase/couchbase/ep-engine/src/executorpool.cc:487 (ep-engine_dcp_test+0x0000005b787f)
          #5 ExecutorPool::registerTaskable(Taskable&) /home/couchbase/couchbase/ep-engine/src/executorpool.cc:492 (ep-engine_dcp_test+0x0000005b9f6e)
          #6 EventuallyPersistentStore::EventuallyPersistentStore(EventuallyPersistentEngine&) /home/couchbase/couchbase/ep-engine/src/ep.cc:393 (ep-engine_dcp_test+0x00000054a552)
          #7 EventuallyPersistentEngine::initialize(char const*) /home/couchbase/couchbase/ep-engine/src/ep_engine.cc:2117 (ep-engine_dcp_test+0x00000057fce4)
          #8 DCPTest::SetUp() /home/couchbase/couchbase/ep-engine/tests/module_tests/dcp_test.cc:105 (ep-engine_dcp_test+0x0000004e42ea)
          #9 void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) /home/couchbase/couchbase/googletest/googletest/src/gtest.cc:2402 (ep-engine_dcp_test+0x0000006d4be2)
          #10 testing::Test::Run() /home/couchbase/couchbase/googletest/googletest/src/gtest.cc:2470 (ep-engine_dcp_test+0x0000006a1b2f)
          #11 testing::TestInfo::Run() /home/couchbase/couchbase/googletest/googletest/src/gtest.cc:2656 (ep-engine_dcp_test+0x0000006a3e2b)
          #12 testing::TestCase::Run() /home/couchbase/couchbase/googletest/googletest/src/gtest.cc:2774 (ep-engine_dcp_test+0x0000006a4afa)
          #13 testing::internal::UnitTestImpl::RunAllTests() /home/couchbase/couchbase/googletest/googletest/src/gtest.cc:4649 (ep-engine_dcp_test+0x0000006b5823)
          #14 bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) /home/couchbase/couchbase/googletest/googletest/src/gtest.cc:2402 (ep-engine_dcp_test+0x0000006d5c72)
          #15 testing::UnitTest::Run() /home/couchbase/couchbase/googletest/googletest/src/gtest.cc:4257 (ep-engine_dcp_test+0x0000006b4e00)
          #16 main /home/couchbase/couchbase/googletest/googletest/include/gtest/gtest.h:2237 (ep-engine_dcp_test+0x0000004e2900)
       
      SUMMARY: ThreadSanitizer: data race ??:0 operator delete(void*)
      

      It took a variable number of iterations to hit the issue - least I needed was 1, most I needed was 34 - but it should show up within a couple of minutes.

      Assigning to Dan as he's been working in this area (and authored the test which exposes it).

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            drigby Dave Rigby (Inactive)
            drigby Dave Rigby (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes

                PagerDuty