diff options
author | Benety Goh <benety@mongodb.com> | 2016-09-16 17:21:26 -0400 |
---|---|---|
committer | Benety Goh <benety@mongodb.com> | 2016-09-19 11:19:04 -0400 |
commit | 35fdb2f02359c3a7fc42c4dffbdc7f47b5ad48ab (patch) | |
tree | 99badb2085d8c9c5219d879fe83f19df3e885d74 /src/mongo/db | |
parent | fd19ddff758912365f22813d2ec8c93688676144 (diff) | |
download | mongo-35fdb2f02359c3a7fc42c4dffbdc7f47b5ad48ab.tar.gz |
SERVER-26151 StorageInterfaceImpl::dropCollection() shouldn't create the database if it doesn't exist
Diffstat (limited to 'src/mongo/db')
-rw-r--r-- | src/mongo/db/repl/storage_interface_impl.cpp | 6 | ||||
-rw-r--r-- | src/mongo/db/repl/storage_interface_impl_test.cpp | 6 |
2 files changed, 9 insertions, 3 deletions
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) { |