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

ep-engine: data races in Stream::readyQueueMemory

    XMLWordPrintable

Details

    • Untriaged
    • Unknown

    Description

      As detected by TSan. This variable is only used to generate stream statistics, so the impact of it being incorrect should be limited to the %s:stream_%d_ready_queue_memory stream stat.

      WARNING: ThreadSanitizer: data race (pid=17244)
        Read of size 8 at 0x7d480000b370 by main thread (mutexes: write M24165, write M969, read M24121):
          #0 Stream::getReadyQueueMemory() /home/daver/repos/couchbase/server/ep-engine/src/dcp-stream.cc:234 (ep.so+0x00000028f51e)
          #1 ActiveStream::addStats(void (*)(char const*, unsigned short, char const*, unsigned int, void const*), void const*) /home/daver/repos/couchbase/server/ep-engine/src/dcp-stream.cc:563 (ep.so+0x00000029452f)
          #2 DcpProducer::addStats(void (*)(char const*, unsigned short, char const*, unsigned int, void const*), void const*) /home/daver/repos/couchbase/server/ep-engine/src/dcp-producer.cc:551 (ep.so+0x00000027f1a0)
          #3 ConnStatBuilder::operator()(SingleThreadedRCPtr<ConnHandler>&) /home/daver/repos/couchbase/server/ep-engine/src/ep_engine.cc:3696 (ep.so+0x000000182d54)
       
        Previous write of size 8 at 0x7d480000b370 by thread T16 (mutexes: write M24143):
          #0 Stream::pushToReadyQ(DcpResponse*) /home/daver/repos/couchbase/server/ep-engine/src/dcp-stream.cc:211 (ep.so+0x00000028f4a6)
          #1 ActiveStream::backfillReceived(Item*) /home/daver/repos/couchbase/server/ep-engine/src/dcp-stream.cc:407 (ep.so+0x00000028d6e5)
          #2 CacheCallback::callback(CacheLookup&) /home/daver/repos/couchbase/server/ep-engine/src/dcp-stream.cc:87 (ep.so+0x00000028d4b3)
          #3 CouchKVStore::recordDbDump(_db*, _docinfo*, void*) /home/daver/repos/couchbase/server/ep-engine/src/couch-kvstore/couch-kvstore.cc:1563 (ep.so+0x00000031dec5)
      

      Note: Already fixed in watson: http://review.couchbase.org/54314:

      We are also not acquiring lock in the function getReadyQueueMemory. Given that it is just a read instead of acquiring the streamMutex lock, the readyQueueMemory variable can be made an atomic.

      Attachments

        Issue Links

          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:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There are no open Gerrit changes

                  PagerDuty