summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenety Goh <benety@mongodb.com>2016-09-16 17:21:26 -0400
committerBenety Goh <benety@mongodb.com>2016-09-19 11:19:04 -0400
commit35fdb2f02359c3a7fc42c4dffbdc7f47b5ad48ab (patch)
tree99badb2085d8c9c5219d879fe83f19df3e885d74
parentfd19ddff758912365f22813d2ec8c93688676144 (diff)
downloadmongo-35fdb2f02359c3a7fc42c4dffbdc7f47b5ad48ab.tar.gz
SERVER-26151 StorageInterfaceImpl::dropCollection() shouldn't create the database if it doesn't exist
-rw-r--r--src/mongo/db/repl/storage_interface_impl.cpp6
-rw-r--r--src/mongo/db/repl/storage_interface_impl_test.cpp6
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) {