summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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) {