Details
-
Bug
-
Resolution: Fixed
-
Critical
-
5.0.0
-
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
|