diff options
author | Benety Goh <benety@mongodb.com> | 2018-01-03 17:20:03 -0500 |
---|---|---|
committer | Benety Goh <benety@mongodb.com> | 2018-01-04 11:00:18 -0500 |
commit | a7cdfa8d4567bda72fd3475daacf9724d333bac4 (patch) | |
tree | 09f137d9b3cd5bdc35ab5df633ea85a645b073fe /src/mongo/db/catalog/drop_database.cpp | |
parent | 7a1c7b85f2cf120178d631c2c8c6f0d2eaa780b9 (diff) | |
download | mongo-a7cdfa8d4567bda72fd3475daacf9724d333bac4.tar.gz |
SERVER-32532 dropDatabase() drops collections in separate loop after gathering namespaces to drop
Diffstat (limited to 'src/mongo/db/catalog/drop_database.cpp')
-rw-r--r-- | src/mongo/db/catalog/drop_database.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/mongo/db/catalog/drop_database.cpp b/src/mongo/db/catalog/drop_database.cpp index 23f05c15788..99bd4fe88b8 100644 --- a/src/mongo/db/catalog/drop_database.cpp +++ b/src/mongo/db/catalog/drop_database.cpp @@ -135,6 +135,7 @@ Status dropDatabase(OperationContext* opCtx, const std::string& dbName) { // on Database. auto dropPendingGuard = MakeGuard([&db, opCtx] { db->setDropPending(opCtx, false); }); + std::vector<NamespaceString> collectionsToDrop; for (auto collection : *db) { const auto& nss = collection->ns(); if (nss.isDropPendingNamespace() && replCoord->isReplEnabled() && @@ -147,11 +148,17 @@ Status dropDatabase(OperationContext* opCtx, const std::string& dbName) { if (replCoord->isOplogDisabledFor(opCtx, nss) || nss.isSystemDotIndexes()) { continue; } + collectionsToDrop.push_back(nss); + } + numCollectionsToDrop = collectionsToDrop.size(); + + log() << "dropDatabase " << dbName << " - dropping " << numCollectionsToDrop + << " collections"; + for (auto nss : collectionsToDrop) { log() << "dropDatabase " << dbName << " - dropping collection: " << nss; WriteUnitOfWork wunit(opCtx); fassertStatusOK(40476, db->dropCollectionEvenIfSystem(opCtx, nss)); wunit.commit(); - numCollectionsToDrop++; } dropPendingGuard.Dismiss(); |