diff options
author | Gregory Wlodarek <gregory.wlodarek@mongodb.com> | 2019-08-27 13:52:23 +0000 |
---|---|---|
committer | evergreen <evergreen@mongodb.com> | 2019-08-27 13:52:23 +0000 |
commit | 077f247b29e9f6c5afecec11bb41858ae95067b6 (patch) | |
tree | 090fe306fe92910a0427b0287e1763cac34ef2b9 /src/mongo/db/repl | |
parent | e650acdf68952bf967e9eb9cd2a8d990a4c502da (diff) | |
download | mongo-077f247b29e9f6c5afecec11bb41858ae95067b6.tar.gz |
Revert "SERVER-33272 Proactively close newly empty databases"
This reverts commit 40f226b5a9bfb4863268334d287a46fb226a22cf.
Diffstat (limited to 'src/mongo/db/repl')
-rw-r--r-- | src/mongo/db/repl/rs_rollback.cpp | 19 | ||||
-rw-r--r-- | src/mongo/db/repl/rs_rollback_test.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/repl/storage_interface_impl.cpp | 28 |
3 files changed, 20 insertions, 31 deletions
diff --git a/src/mongo/db/repl/rs_rollback.cpp b/src/mongo/db/repl/rs_rollback.cpp index 1a7d03ef9e2..1b685116242 100644 --- a/src/mongo/db/repl/rs_rollback.cpp +++ b/src/mongo/db/repl/rs_rollback.cpp @@ -42,7 +42,6 @@ #include "mongo/db/catalog/collection_catalog.h" #include "mongo/db/catalog/database_holder.h" #include "mongo/db/catalog/document_validation.h" -#include "mongo/db/catalog/drop_collection.h" #include "mongo/db/catalog/index_catalog.h" #include "mongo/db/catalog/rename_collection.h" #include "mongo/db/catalog_raii.h" @@ -1159,20 +1158,14 @@ void rollback_internal::syncFixUp(OperationContext* opCtx, log() << "This collection does not exist, UUID: " << uuid; } else { log() << "Dropping collection: " << *nss << ", UUID: " << uuid; + AutoGetDb dbLock(opCtx, nss->db(), MODE_X); - { - AutoGetDb dbLock(opCtx, nss->db(), MODE_X); - - Database* db = dbLock.getDb(); - if (db) { - Collection* collection = - CollectionCatalog::get(opCtx).lookupCollectionByUUID(uuid); - dropCollection(opCtx, *nss, collection, db); - LOG(1) << "Dropped collection: " << *nss << ", UUID: " << uuid; - } + Database* db = dbLock.getDb(); + if (db) { + Collection* collection = CollectionCatalog::get(opCtx).lookupCollectionByUUID(uuid); + dropCollection(opCtx, *nss, collection, db); + LOG(1) << "Dropped collection: " << *nss << ", UUID: " << uuid; } - - closeDatabaseIfEmpty(opCtx, nss->db()); } } diff --git a/src/mongo/db/repl/rs_rollback_test.cpp b/src/mongo/db/repl/rs_rollback_test.cpp index a4f5b6221dd..6408443af27 100644 --- a/src/mongo/db/repl/rs_rollback_test.cpp +++ b/src/mongo/db/repl/rs_rollback_test.cpp @@ -1648,7 +1648,9 @@ TEST_F(RSRollbackTest, RollbackCreateCollectionCommand) { { Lock::DBLock dbLock(_opCtx.get(), "test", MODE_S); auto databaseHolder = DatabaseHolder::get(_opCtx.get()); - ASSERT_FALSE(databaseHolder->getDb(_opCtx.get(), "test")); + auto db = databaseHolder->getDb(_opCtx.get(), "test"); + ASSERT_TRUE(db); + ASSERT_FALSE(db->getCollection(_opCtx.get(), NamespaceString("test.t"))); } } diff --git a/src/mongo/db/repl/storage_interface_impl.cpp b/src/mongo/db/repl/storage_interface_impl.cpp index ff17b6c7175..88f4e2f36c7 100644 --- a/src/mongo/db/repl/storage_interface_impl.cpp +++ b/src/mongo/db/repl/storage_interface_impl.cpp @@ -49,7 +49,6 @@ #include "mongo/db/catalog/collection_catalog.h" #include "mongo/db/catalog/database_holder.h" #include "mongo/db/catalog/document_validation.h" -#include "mongo/db/catalog/drop_collection.h" #include "mongo/db/catalog/index_catalog.h" #include "mongo/db/client.h" #include "mongo/db/concurrency/d_concurrency.h" @@ -460,23 +459,18 @@ Status StorageInterfaceImpl::createCollection(OperationContext* opCtx, Status StorageInterfaceImpl::dropCollection(OperationContext* opCtx, const NamespaceString& nss) { return writeConflictRetry(opCtx, "StorageInterfaceImpl::dropCollection", nss.ns(), [&] { - { - AutoGetDb autoDb(opCtx, nss.db(), MODE_IX); - Lock::CollectionLock collLock(opCtx, nss, MODE_X); - if (!autoDb.getDb()) { - // Database does not exist - nothing to do. - return Status::OK(); - } - WriteUnitOfWork wunit(opCtx); - const auto status = autoDb.getDb()->dropCollectionEvenIfSystem(opCtx, nss); - if (!status.isOK()) { - return status; - } - wunit.commit(); + AutoGetDb autoDb(opCtx, nss.db(), MODE_IX); + Lock::CollectionLock collLock(opCtx, nss, MODE_X); + if (!autoDb.getDb()) { + // Database does not exist - nothing to do. + return Status::OK(); } - - // If this dropped the last collection in the database, we should close the database. - closeDatabaseIfEmpty(opCtx, nss.db()); + WriteUnitOfWork wunit(opCtx); + const auto status = autoDb.getDb()->dropCollectionEvenIfSystem(opCtx, nss); + if (!status.isOK()) { + return status; + } + wunit.commit(); return Status::OK(); }); } |