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

ep-engine: Potentially incorrect compaction scheduling due to data race in WorkloadPolicy::workloadPattern

    XMLWordPrintable

Details

    • Untriaged
    • Unknown

    Description

      As reported by threadSanitizer:

      WARNING: ThreadSanitizer: data race (pid=24180)
          
            Read of size 4 at 0x7d040000f608 by main thread (mutexes: write M1308043):
              #0 WorkLoadPolicy::stringOfWorkLoadPattern() /home/abhinav/couchbase/ep-engine/src/workload.h:65 (ep.so+0x0000000bee15)
              #1 EventuallyPersistentEngine::getStats(void const*, char const*, int, void (*)(char const*, unsigned short, char const*, unsigned int, void const*)) /home/abhinav/couchbase/ep-engine/src/ep_engine.cc:4554 (ep.so+0x0000000c5cac)
              #2 EvpGetStats(engine_interface*, void const*, char const*, int, void (*)(char const*, unsigned short, char const*, unsigned int, void const*)) /home/abhinav/couchbase/ep-engine/src/ep_engine.cc:213 (ep.so+0x0000000b4dee)
              #3 mock_get_stats(engine_interface*, void const*, char const*, int, void (*)(char const*, unsigned short, char const*, unsigned int, void const*)) /home/abhinav/couchbase/memcached/programs/engine_testapp/engine_testapp.cc:239 (engine_testapp+0x0000000ba9ad)
              #4 get_int_stat(engine_interface*, engine_interface_v1*, char const*, char const*) /home/abhinav/couchbase/ep-engine/tests/ep_test_apis.cc:990 (ep_testsuite.so+0x0000000aebb1)
              #5 test_access_scanner(engine_interface*, engine_interface_v1*) /home/abhinav/couchbase/ep-engine/tests/ep_testsuite.cc:8569 (ep_testsuite.so+0x00000002efd7)
              #6 execute_test(test, char const*, char const*) /home/abhinav/couchbase/memcached/programs/engine_testapp/engine_testapp.cc:1090 (engine_testapp+0x0000000b946c)
              #7 __libc_start_main /build/buildd/eglibc-2.19/csu/libc-start.c:287 (libc.so.6+0x000000021ec4)
          
            Previous write of size 4 at 0x7d040000f608 by thread T10:
              #0 WorkLoadPolicy::setWorkLoadPattern(workload_pattern_t) /home/abhinav/couchbase/ep-engine/src/workload.h:76 (ep.so+0x00000013d75b)
              #1 ExecutorThread::run() /home/abhinav/couchbase/ep-engine/src/executorthread.cc:112 (ep.so+0x0000000f9503)
              #2 launch_executor_thread(void*) /home/abhinav/couchbase/ep-engine/src/executorthread.cc:33 (ep.so+0x0000000f9085)
              #3 platform_thread_wrap /home/abhinav/couchbase/platform/src/cb_pthreads.c:23 (libplatform.so.0.1.0+0x000000003d31)
      

      This variable is reported in the ThreadSanitizer output as being read by a stats function, which could result in incorrect stats printed to the user.

      However, from code inspection the compactor (EventuallyPersistentStore::scheduleCompaction) also reads this variable, and hence could result in incorrect task scheduling.

      Attachments

        Issue Links

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

          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