[SERVER-16038] CanonicalQuery leaks in mr::MapReduceCommand::run(), mr::State::finalReduce(), newRunQuery() Created: 08/Nov/14  Updated: 11/Jul/16  Resolved: 17/Nov/14

Status: Closed
Project: Core Server
Component/s: MapReduce
Affects Version/s: None
Fix Version/s: 2.8.0-rc1

Type: Bug Priority: Major - P3
Reporter: Kamran K. Assignee: J Rassi
Resolution: Done Votes: 0
Labels: 28qa
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Related
related to SERVER-16276 Perf degradation in query Closed
is related to SERVER-15842 Server aborts during concurrent mapre... Closed
Operating System: ALL
Participants:

 Description   

A CanonicalQuery object can leak if the !db path on line 1353 is taken (i.e., before cq ownership has been transferred in getExecutor):

1341   CanonicalQuery* cq;
1342   if (!CanonicalQuery::canonicalize(config.ns,
1343                                     config.filter,
1344                                     config.sort,
1345                                     BSONObj(),
1346                                     &cq,
1347                                     whereCallback).isOK()) {
1348       uasserted(17238, "Can't canonicalize query " + config.filter.toString());
1349       return 0;
1350   }
1351
1352   Database* db = dbHolder().get(txn, nss.db());
1353   if (!db) {
1354       errmsg = "ns doesn't exist";
1355       return false;
1356   }
1357
1358   PlanExecutor* rawExec;
1359   if (!getExecutor(txn,
1360                    state.getCollectionOrUassert(db, config.ns),
1361                    cq,
1362                    PlanExecutor::YIELD_AUTO,
1363                    &rawExec).isOK()) {
1364       uasserted(17239, "Can't get executor for query "
1365                        + config.filter.toString());
1366       return 0;
1367   }

Valgrind output:

==11542== 732 (80 direct, 652 indirect) bytes in 2 blocks are definitely lost in loss record 5,896 of 6,057
==11542==    at 0x4C2B2C0: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11542==    by 0x153ECC3: mongo::CanonicalQuery::canonicalize(std::string const&, mongo::BSONObj const&, mongo::BSONObj const&, mongo::BSONObj const&, long long, long long, mongo::BSONObj const&, mongo::BSONObj const&, mongo::BSONObj const&, bool, bool, mongo::CanonicalQuery**, mongo::MatchExpressionParser::WhereCallback const&) (canonical_query.cpp:522)
==11542==    by 0x153E62E: mongo::CanonicalQuery::canonicalize(std::string const&, mongo::BSONObj const&, mongo::BSONObj const&, mongo::BSONObj const&, long long, long long, mongo::BSONObj const&, mongo::CanonicalQuery**, mongo::MatchExpressionParser::WhereCallback const&) (canonical_query.cpp:415)
==11542==    by 0x153E565: mongo::CanonicalQuery::canonicalize(std::string const&, mongo::BSONObj const&, mongo::BSONObj const&, mongo::BSONObj const&, long long, long long, mongo::CanonicalQuery**, mongo::MatchExpressionParser::WhereCallback const&) (canonical_query.cpp:396)
==11542==    by 0x153E4EF: mongo::CanonicalQuery::canonicalize(std::string const&, mongo::BSONObj const&, mongo::BSONObj const&, mongo::BSONObj const&, mongo::CanonicalQuery**, mongo::MatchExpressionParser::WhereCallback const&) (canonical_query.cpp:382)
==11542==    by 0x12E4572: mongo::mr::MapReduceCommand::run(mongo::OperationContext*, std::string const&, mongo::BSONObj&, int, std::string&, mongo::BSONObjBuilder&, bool) (mr.cpp:1347)
==11542==    by 0x134201A: mongo::_execCommand(mongo::OperationContext*, mongo::Command*, std::string const&, mongo::BSONObj&, int, std::string&, mongo::BSONObjBuilder&, bool) (dbcommands.cpp:1160)
==11542==    by 0x1342FCF: mongo::Command::execCommand(mongo::OperationContext*, mongo::Command*, int, char const*, mongo::BSONObj&, mongo::BSONObjBuilder&, bool) (dbcommands.cpp:1374)
==11542==    by 0x13438DC: mongo::_runCommands(mongo::OperationContext*, char const*, mongo::BSONObj&, mongo::_BufBuilder<mongo::TrivialAllocator>&, mongo::BSONObjBuilder&, bool, int) (dbcommands.cpp:1450)
==11542==    by 0x1560D48: mongo::runCommands(mongo::OperationContext*, char const*, mongo::BSONObj&, mongo::CurOp&, mongo::_BufBuilder<mongo::TrivialAllocator>&, mongo::BSONObjBuilder&, bool, int) (new_find.cpp:131)
==11542==    by 0x15629D5: mongo::newRunQuery(mongo::OperationContext*, mongo::Message&, mongo::QueryMessage&, mongo::CurOp&, mongo::Message&, bool) (new_find.cpp:552)
==11542==    by 0x144E78A: mongo::receivedQuery(mongo::OperationContext*, mongo::Client&, mongo::DbResponse&, mongo::Message&, bool) (instance.cpp:220)
==11542==    by 0x144F8AD: mongo::assembleResponse(mongo::OperationContext*, mongo::Message&, mongo::DbResponse&, mongo::HostAndPort const&, bool) (instance.cpp:393)
==11542==    by 0x11567CB: mongo::MyMessageHandler::process(mongo::Message&, mongo::AbstractMessagingPort*, mongo::LastError*) (db.cpp:185)
==11542==    by 0x190A91A: mongo::PortMessageServer::handleIncomingMsg(void*) (message_server_port.cpp:234)
==11542==    by 0x4E3F181: start_thread (pthread_create.c:312)
==11542==    by 0x5D7BFBC: clone (clone.S:111)


Version: 18c94ba44d3



 Comments   
Comment by Githook User [ 17/Nov/14 ]

Author:

{u'username': u'jrassi', u'name': u'Jason Rassi', u'email': u'rassi@10gen.com'}

Message: SERVER-16038 Manage CanonicalQuery with auto_ptr in db/commands/mr.cpp
Branch: master
https://github.com/mongodb/mongo/commit/bec3fc4b1374fb9eff9e4cc82ada7b8d5f43de45

Comment by Githook User [ 17/Nov/14 ]

Author:

{u'username': u'jrassi', u'name': u'Jason Rassi', u'email': u'rassi@10gen.com'}

Message: SERVER-16038 Manage CanonicalQuery with auto_ptr in newRunQuery()
Branch: master
https://github.com/mongodb/mongo/commit/e8437d34eee926e5c6bb3eac4a74f8a1fdf19448

Comment by Githook User [ 17/Nov/14 ]

Author:

{u'username': u'jrassi', u'name': u'Jason Rassi', u'email': u'rassi@10gen.com'}

Message: SERVER-16038 Clean up ns local vars in newRunQuery()
Branch: master
https://github.com/mongodb/mongo/commit/2783e323051eb5eeaedee4a607934974177f74c2

Generated at Thu Feb 08 03:39:45 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.