diff options
author | Benety Goh <benety@mongodb.com> | 2017-10-06 14:53:02 -0400 |
---|---|---|
committer | Benety Goh <benety@mongodb.com> | 2017-10-13 14:19:26 -0400 |
commit | ae3ea6327667d80aed87150fb8ed9ba21dbae1b0 (patch) | |
tree | a598b1071659876b8ab41feb4164f4780a67d966 /src/mongo/db/catalog/drop_database_test.cpp | |
parent | 82c6964a6fd3c71861e4c085effc73a52976a720 (diff) | |
download | mongo-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.cpp | 24 |
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 |