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

Memory leak with subdoc multi-mutation & Add flag if document exists

    XMLWordPrintable

Details

    • Untriaged
    • Unknown
    • KV Spock Beta

    Description

      As identified by AddressSanitizer, there is a leak (an item is not released) if a attempt is made to perform a multi-mutation with the 'Add' doc flag set:

      $  /home/daver/repos/couchbase/server-master/build-asan/memcached/memcached_testapp "-E" "ep" -e --gtest_filter=*SubdocMultiMutation_AddDocFlagEEXists/Plain
      Note: Google Test filter = *SubdocMultiMutation_AddDocFlagEEXists/Plain
      [==========] Running 1 test from 1 test case.
      [----------] Global test environment set-up.
      [----------] 1 test from Transport/McdTestappTest
      [ RUN      ] Transport/McdTestappTest.SubdocMultiMutation_AddDocFlagEEXists/Plain
      [       OK ] Transport/McdTestappTest.SubdocMultiMutation_AddDocFlagEEXists/Plain (2 ms)
      [----------] 1 test from Transport/McdTestappTest (2 ms total)
       
      [----------] Global test environment tear-down
      [==========] 1 test from 1 test case ran. (1157 ms total)
      [  PASSED  ] 1 test.
       
      =================================================================
      ==33026==ERROR: LeakSanitizer: detected memory leaks
       
      Direct leak of 104 byte(s) in 1 object(s) allocated from:
          #0 0x7f43bc927532 in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x99532)
          #1 0x7f43b4c0191f in __unique_if<Item>::__unique_single std::make_unique<Item, SerialisedDocKey const&, unsigned int, long, SingleThreadedRCPtr<Blob> const&, unsigned long, long const&, unsigned short&, unsigned long>(SerialisedDocKey const&, unsigned int&&, long&&, SingleThreadedRCPtr<Blob> const&, unsigned long&&, long const&, unsigned short
      &, unsigned long&&) /home/daver/repos/couchbase/server-master/platform/include/platform/make_unique.h:43
          #2 0x7f43b4c0191f in StoredValue::toItem(bool, unsigned short) const /home/daver/repos/couchbase/server-master/ep-engine/src/stored-value.cc:166
          #3 0x7f43b4c2a3e9 in VBucket::getInternal(DocKey const&, void const*, EventuallyPersistentEngine&, int, get_options_t, bool) /home/daver/repos/couchbase/server-master/ep-engine/src/vbucket.cc:1576
          #4 0x7f43b4be1898 in KVBucket::getInternal(DocKey const&, unsigned short, void const*, vbucket_state_t, get_options_t) /home/daver/repos/couchbase/server-master/ep-engine/src/kv_bucket.cc:1434
          #5 0x7f43b4b9a5e1 in KVBucket::get(DocKey const&, unsigned short, void const*, get_options_t) /home/daver/repos/couchbase/server-master/ep-engine/src/kv_bucket.h:152
          #6 0x7f43b4b9a5e1 in EventuallyPersistentEngine::get(void const*, void**, DocKey const&, unsigned short, get_options_t) /home/daver/repos/couchbase/server-master/ep-engine/src/ep_engine.h:176
          #7 0x7f43b4b9a5e1 in EvpGet /home/daver/repos/couchbase/server-master/ep-engine/src/ep_engine.cc:268
          #8 0x7f43b1244d84  (<unknown module>)
          #9 0x6b38b0 in bucket_get(McbpConnection*, void**, DocKey const&, unsigned short, DocStateFilter) /home/daver/repos/couchbase/server-master/memcached/daemon/protocol/mcbp/engine_wrapper.cc:148
          #10 0x7723a3 in subdoc_fetch /home/daver/repos/couchbase/server-master/memcached/daemon/subdocument.cc:482
          #11 0x7723a3 in subdoc_executor /home/daver/repos/couchbase/server-master/memcached/daemon/subdocument.cc:394
          #12 0x7775fc in subdoc_multi_mutation_executor(McbpConnection*, void*) /home/daver/repos/couchbase/server-master/memcached/daemon/subdocument.cc:1568
      

      Issue is that after the document is successfully looked up, we do not release it before returning EEXISTs.

      Steps to reproduce

      Checkout http://review.couchbase.org/#/c/78321/ (to allow memcached_testapp to run against ep-engine), and then run Transport/McdTestappTest.SubdocMultiMutation_AddDocFlagEEXists/Plain:

      build-asan/memcached/memcached_testapp "-E" "ep" -e --gtest_filter=*SubdocMultiMutation_AddDocFlagEEXists/Plain
      

      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