From 35fdb2f02359c3a7fc42c4dffbdc7f47b5ad48ab Mon Sep 17 00:00:00 2001 From: Benety Goh Date: Fri, 16 Sep 2016 17:21:26 -0400 Subject: SERVER-26151 StorageInterfaceImpl::dropCollection() shouldn't create the database if it doesn't exist --- src/mongo/db/repl/storage_interface_impl.cpp | 6 +++++- src/mongo/db/repl/storage_interface_impl_test.cpp | 6 ++++-- 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/mongo/db/repl/storage_interface_impl.cpp b/src/mongo/db/repl/storage_interface_impl.cpp index acabfe69eb9..c71191a2fce 100644 --- a/src/mongo/db/repl/storage_interface_impl.cpp +++ b/src/mongo/db/repl/storage_interface_impl.cpp @@ -422,7 +422,11 @@ Status StorageInterfaceImpl::createCollection(OperationContext* txn, Status StorageInterfaceImpl::dropCollection(OperationContext* txn, const NamespaceString& nss) { MONGO_WRITE_CONFLICT_RETRY_LOOP_BEGIN { ScopedTransaction transaction(txn, MODE_IX); - AutoGetOrCreateDb autoDB(txn, nss.db(), MODE_X); + AutoGetDb autoDB(txn, nss.db(), MODE_X); + if (!autoDB.getDb()) { + // Database does not exist - nothing to do. + return Status::OK(); + } WriteUnitOfWork wunit(txn); const auto status = autoDB.getDb()->dropCollection(txn, nss.ns()); if (status.isOK()) { diff --git a/src/mongo/db/repl/storage_interface_impl_test.cpp b/src/mongo/db/repl/storage_interface_impl_test.cpp index 218f925b97d..2ec1acfbdd6 100644 --- a/src/mongo/db/repl/storage_interface_impl_test.cpp +++ b/src/mongo/db/repl/storage_interface_impl_test.cpp @@ -580,9 +580,11 @@ TEST_F(StorageInterfaceImplWithReplCoordTest, DropCollectionWorksWithMissingColl auto txn = getOperationContext(); StorageInterfaceImpl storage; NamespaceString nss("foo.bar"); + ASSERT_FALSE(AutoGetDb(txn, nss.db(), MODE_IS).getDb()); ASSERT_OK(storage.dropCollection(txn, nss)); - AutoGetCollectionForRead autoColl(txn, nss); - ASSERT_FALSE(autoColl.getCollection()); + ASSERT_FALSE(AutoGetCollectionForRead(txn, nss).getCollection()); + // Database should not be created after running dropCollection. + ASSERT_FALSE(AutoGetDb(txn, nss.db(), MODE_IS).getDb()); } TEST_F(StorageInterfaceImplWithReplCoordTest, FindOneReturnsInvalidNamespaceIfCollectionIsMissing) { -- cgit v1.2.1