summaryrefslogtreecommitdiff
path: root/src/mongo/db/catalog/drop_database_test.cpp
diff options
context:
space:
mode:
authorBenety Goh <benety@mongodb.com>2017-10-06 14:53:02 -0400
committerBenety Goh <benety@mongodb.com>2017-10-13 14:19:26 -0400
commitae3ea6327667d80aed87150fb8ed9ba21dbae1b0 (patch)
treea598b1071659876b8ab41feb4164f4780a67d966 /src/mongo/db/catalog/drop_database_test.cpp
parent82c6964a6fd3c71861e4c085effc73a52976a720 (diff)
downloadmongo-ae3ea6327667d80aed87150fb8ed9ba21dbae1b0.tar.gz
SERVER-31436 dropDatabase ensures writes are still accepted before finishing database drop
Diffstat (limited to 'src/mongo/db/catalog/drop_database_test.cpp')
-rw-r--r--src/mongo/db/catalog/drop_database_test.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/mongo/db/catalog/drop_database_test.cpp b/src/mongo/db/catalog/drop_database_test.cpp
index 1e384c3a031..7ba02585bcd 100644
--- a/src/mongo/db/catalog/drop_database_test.cpp
+++ b/src/mongo/db/catalog/drop_database_test.cpp
@@ -426,4 +426,28 @@ TEST_F(DropDatabaseTest,
ASSERT_FALSE(AutoGetDb(_opCtx.get(), _nss.db(), MODE_X).getDb());
}
+TEST_F(DropDatabaseTest,
+ DropDatabaseReturnsNotMasterIfNotPrimaryAfterCollectionsDropsAreReplicated) {
+ // Transition from PRIMARY to SECONDARY while awaiting replication of collection drops.
+ _replCoord->setAwaitReplicationReturnValueFunction([this](const repl::OpTime&) {
+ ASSERT_OK(_replCoord->setFollowerMode(repl::MemberState::RS_SECONDARY));
+ ASSERT_TRUE(_opCtx->writesAreReplicated());
+ ASSERT_FALSE(_replCoord->canAcceptWritesForDatabase(_opCtx.get(), _nss.db()));
+ return repl::ReplicationCoordinator::StatusAndDuration(Status::OK(), Milliseconds(0));
+ });
+
+ _createCollection(_opCtx.get(), _nss);
+
+ ASSERT_TRUE(AutoGetDb(_opCtx.get(), _nss.db(), MODE_X).getDb());
+
+ auto status = dropDatabase(_opCtx.get(), _nss.db().toString());
+ ASSERT_EQUALS(ErrorCodes::NotMaster, status);
+ ASSERT_EQUALS(status.reason(),
+ str::stream() << "Could not drop database " << _nss.db()
+ << " because we transitioned from PRIMARY to SECONDARY"
+ << " while waiting for 1 pending collection drop(s).");
+
+ ASSERT_TRUE(AutoGetDb(_opCtx.get(), _nss.db(), MODE_X).getDb());
+}
+
} // namespace