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

ep-engine: Potential data race in PagingVisitor::visit()

    XMLWordPrintable

Details

    • Untriaged
    • Unknown

    Description

      As reported by ThreadSanitizer, there is a race on ItemPager::phase when multiple tasks are running (e.g. when running separate tasks per vbucket).

      Details:

      00:06:34.509 WARNING: ThreadSanitizer: data race (pid=180366)
      00:06:34.509   Read of size 4 at 0x7d1c0000d650 by thread T18 (mutexes: write M18437):
      00:06:34.509     #0 PagingVisitor::visit(StoredValue*) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-watson/ep-engine/src/item_pager.cc:86 (ep.so+0x000000107734)
      00:06:34.509     #1 HashTable::visit(HashTableVisitor&) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-watson/ep-engine/src/stored-value.cc:475 (ep.so+0x00000011d1b8)
      00:06:34.509     #2 VBCBAdaptor::run() /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-watson/ep-engine/src/ep.cc:3929 (ep.so+0x0000000a3c2f)
      00:06:34.509     #3 ExecutorThread::run() /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-watson/ep-engine/src/executorthread.cc:115 (ep.so+0x0000000fb086)
      00:06:34.509 
      00:06:34.509   Previous write of size 4 at 0x7d1c0000d650 by thread T17:
      00:06:34.509     #0 PagingVisitor::complete() /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-watson/ep-engine/src/item_pager.cc:179 (ep.so+0x000000108004)
      00:06:34.509     #1 VBCBAdaptor::run() /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-watson/ep-engine/src/ep.cc:3937 (ep.so+0x0000000a3d7e)
      00:06:34.509     #2 ExecutorThread::run() /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-watson/ep-engine/src/executorthread.cc:115 (ep.so+0x0000000fb086)
      00:06:34.509 
      00:06:34.509   Location is heap block of size 104 at 0x7d1c0000d5f0 allocated by main thread:
      00:06:34.509     #0 operator new(unsigned long) <null> (engine_testapp+0x00000046446d)
      00:06:34.509     #1 EventuallyPersistentStore::initialize() /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-watson/ep-engine/src/ep.cc:429 (ep.so+0x000000088a3d)
      00:06:34.509     #2 EventuallyPersistentEngine::initialize(char const*) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-watson/ep-engine/src/ep_engine.cc:2144 (ep.so+0x0000000bb5c0)
      00:06:34.509     #3 EvpInitialize(engine_interface*, char const*) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-watson/ep-engine/src/ep_engine.cc:143 (ep.so+0x0000000b8e28)
      00:06:34.509     #4 init_engine_instance <null> (libmcd_util.so.1.0.0+0x0000000057ab)
      00:06:34.509     #5 create_bucket(bool, char const*) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-watson/memcached/programs/engine_testapp/engine_testapp.cc:983 (engine_testapp+0x0000004cd657)
      00:06:34.509     #6 execute_test(test, char const*, char const*) /home/couchbase/jenkins/workspace/ep-engine-threadsanitizer-watson/memcached/programs/engine_testapp/engine_testapp.cc:1133 (engine_testapp+0x0000004cc738)
      00:06:34.509     #7 __libc_start_main /build/buildd/eglibc-2.15/csu/libc-start.c:226 (libc.so.6+0x00000002176c)
      

      Log: http://cv.jenkins.couchbase.com/job/ep-engine-threadsanitizer-watson/543/consoleFull#-160107913961882284-c5b1-40af-8076-4f8cb2d12fb1

      The consequence of this would be that a change from PAGING_UNREFERENCED to PAGING_RANDOM (during PagingVisitor::Complete()) may not be observed by other threads.

      Attachments

        Issue Links

          For Gerrit Dashboard: MB-19641
          # Subject Branch Project Status CR V

          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