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

ep-engine: Potential data race in TapThrottle::queueCap

    XMLWordPrintable

Details

    • Untriaged
    • Unknown

    Description

      As detected by threadsanitizer; there is a race on TapThrottle::queueCap. The detected usage is just in stats, however there is an indirect usage of this variable (persistenceQueueSmallEnough, via stats.replicationThrottleWriteQueueCap) which could result in an incorrect queue size being used.

      WARNING: ThreadSanitizer: data race (pid=4196)
        Read of size 8 at 0x7d0800005400 by thread T10:
          #0 TapThrottle::adjustWriteQueueCap(unsigned long) /home/daver/repos/couchbase/server/ep-engine/src/tapthrottle.cc:49 (ep.so+0x0000002517b5)
          #1 EventuallyPersistentEngine::doEngineStats(void const*, void (*)(char const*, unsigned short, char const*, unsigned int, void const*)) /home/daver/repos/couchbase/server/ep-engine/src/ep_engine.cc:2953 (ep.so+0x0000001428d5)
          #2 EventuallyPersistentEngine::getStats(void const*, char const*, int, void (*)(char const*, unsigned short, char const*, unsigned int, void const*)) /home/daver/repos/couchbase/server/ep-engine/src/ep_engine.cc:4349 (ep.so+0x00000015080a)
          #3 EventuallyPersistentStore::snapshotStats() /home/daver/repos/couchbase/server/ep-engine/src/ep.cc:1358 (ep.so+0x0000000e0f9e)
          #4 StatSnap::run() /home/daver/repos/couchbase/server/ep-engine/src/tasks.cc:80 (ep.so+0x0000002528c3)
          #5 ExecutorThread::run() /home/daver/repos/couchbase/server/ep-engine/src/executorthread.cc:109 (ep.so+0x0000001e329f)
          #6 launch_executor_thread(void*) /home/daver/repos/couchbase/server/ep-engine/src/executorthread.cc:34 (ep.so+0x0000001e28aa)
          #7 platform_thread_wrap /home/daver/repos/couchbase/server/platform/src/cb_pthreads.c:19 (libplatform.so.0.1.0+0x0000000035dc)
       
        Previous write of size 8 at 0x7d0800005400 by main thread (mutexes: write M739290916774260632):
          #0 TapThrottle::setQueueCap(long) /home/daver/repos/couchbase/server/ep-engine/src/tapthrottle.h:43 (ep.so+0x000000133967)
          #1 EPStoreValueChangeListener::sizeValueChanged(std::string const&, unsigned long) /home/daver/repos/couchbase/server/ep-engine/src/ep.cc:115 (ep.so+0x000000133570)
          #2 Configuration::setParameter(std::string const&, long) /home/daver/repos/couchbase/server/ep-engine/src/configuration.cc:210 (ep.so+0x000000356ac1)
          #3 Configuration::setTapThrottleQueueCap(long const&) /home/daver/repos/couchbase/server/build-tsan/ep-engine/src/generated_configuration.cc:387 (ep.so+0x000000370c9b)
          #4 setTapParam(EventuallyPersistentEngine*, char const*, char const*, char const**, unsigned long*) /home/daver/repos/couchbase/server/ep-engine/src/ep_engine.cc:319 (ep.so+0x00000016c8cf)
          #5 setParam(EventuallyPersistentEngine*, protocol_binary_request_set_param*, char const**, unsigned long*) /home/daver/repos/couchbase/server/ep-engine/src/ep_engine.cc:752 (ep.so+0x0000001678c5)
          #6 processUnknownCommand(EventuallyPersistentEngine*, void const*, protocol_binary_request_header*, bool (*)(void const*, unsigned short, void const*, unsigned char, void const*, unsigned int, unsigned char, unsigned short, unsigned long, void const*)) /home/daver/repos/couchbase/server/ep-engine/src/ep_engine.cc:1136 (ep.so+0x000000163dbd)
          #7 EvpUnknownCommand(engine_interface*, void const*, protocol_binary_request_header*, bool (*)(void const*, unsigned short, void const*, unsigned char, void const*, unsigned int, unsigned char, unsigned short, unsigned long, void const*)) /home/daver/repos/couchbase/server/ep-engine/src/ep_engine.cc:1312 (ep.so+0x000000137765)
          #8 mock_unknown_command /home/daver/repos/couchbase/server/memcached/programs/engine_testapp/engine_testapp.c:335 (engine_testapp+0x0000004be97a)
          #9 set_param(engine_interface*, engine_interface_v1*, protocol_binary_engine_param_t, char const*, char const*) /home/daver/repos/couchbase/server/ep-engine/tests/ep_test_apis.cc:469 (ep_testsuite.so+0x0000000e6641)
          #10 test_consumer_backoff_stat(engine_interface*, engine_interface_v1*) /home/daver/repos/couchbase/server/ep-engine/tests/ep_testsuite.cc:4334 (ep_testsuite.so+0x000000096d98)
          #11 execute_test /home/daver/repos/couchbase/server/memcached/programs/engine_testapp/engine_testapp.c:1042 (engine_testapp+0x0000004ba8ff)
          #12 main /home/daver/repos/couchbase/server/memcached/programs/engine_testapp/engine_testapp.c:1296 (engine_testapp+0x0000004b8861)
      

      Note: already fixed in watson: http://review.couchbase.org/59215

      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

                  PagerDuty