summaryrefslogtreecommitdiff
path: root/src/mongo/db/catalog/drop_database.cpp
diff options
context:
space:
mode:
authorBenety Goh <benety@mongodb.com>2018-01-03 17:20:03 -0500
committerBenety Goh <benety@mongodb.com>2018-01-04 11:00:18 -0500
commita7cdfa8d4567bda72fd3475daacf9724d333bac4 (patch)
tree09f137d9b3cd5bdc35ab5df633ea85a645b073fe /src/mongo/db/catalog/drop_database.cpp
parent7a1c7b85f2cf120178d631c2c8c6f0d2eaa780b9 (diff)
downloadmongo-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.cpp9
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();