summaryrefslogtreecommitdiff
path: root/src/mongo/db/catalog/drop_database_test.cpp
diff options
context:
space:
mode:
authorRandolph Tan <randolph@10gen.com>2019-06-27 16:02:28 -0400
committerRandolph Tan <randolph@10gen.com>2019-07-16 13:44:09 -0400
commit2dfbaadb85f32869c75f87117d9f6e98b4e948ea (patch)
tree131ffaee362373775aadef9105db99337c5d7fa6 /src/mongo/db/catalog/drop_database_test.cpp
parentdb2cfda750494cf1c2d0a235df945e335075b8e2 (diff)
downloadmongo-2dfbaadb85f32869c75f87117d9f6e98b4e948ea.tar.gz
SERVER-40785 Create WaitForMajorityService to allow waiting for write concern asynchronously
Diffstat (limited to 'src/mongo/db/catalog/drop_database_test.cpp')
-rw-r--r--src/mongo/db/catalog/drop_database_test.cpp84
1 files changed, 45 insertions, 39 deletions
diff --git a/src/mongo/db/catalog/drop_database_test.cpp b/src/mongo/db/catalog/drop_database_test.cpp
index 4fe1d2bc098..2eb37e80a36 100644
--- a/src/mongo/db/catalog/drop_database_test.cpp
+++ b/src/mongo/db/catalog/drop_database_test.cpp
@@ -268,7 +268,7 @@ TEST_F(DropDatabaseTest, DropDatabaseWaitsForDropPendingCollectionOpTimeIfNoColl
// Update ReplicationCoordinatorMock so that we record the optime passed to awaitReplication().
_replCoord->setAwaitReplicationReturnValueFunction(
- [&clientLastOpTime, this](const repl::OpTime& opTime) {
+ [&clientLastOpTime, this](OperationContext*, const repl::OpTime& opTime) {
clientLastOpTime = opTime;
ASSERT_GREATER_THAN(clientLastOpTime, repl::OpTime());
return repl::ReplicationCoordinator::StatusAndDuration(Status::OK(), Milliseconds(0));
@@ -283,11 +283,12 @@ TEST_F(DropDatabaseTest, DropDatabaseWaitsForDropPendingCollectionOpTimeIfNoColl
TEST_F(DropDatabaseTest, DropDatabasePassedThroughAwaitReplicationErrorForDropPendingCollection) {
// Update ReplicationCoordinatorMock so that we record the optime passed to awaitReplication().
- _replCoord->setAwaitReplicationReturnValueFunction([this](const repl::OpTime& opTime) {
- ASSERT_GREATER_THAN(opTime, repl::OpTime());
- return repl::ReplicationCoordinator::StatusAndDuration(
- Status(ErrorCodes::WriteConcernFailed, ""), Milliseconds(0));
- });
+ _replCoord->setAwaitReplicationReturnValueFunction(
+ [this](OperationContext*, const repl::OpTime& opTime) {
+ ASSERT_GREATER_THAN(opTime, repl::OpTime());
+ return repl::ReplicationCoordinator::StatusAndDuration(
+ Status(ErrorCodes::WriteConcernFailed, ""), Milliseconds(0));
+ });
repl::OpTime dropOpTime(Timestamp(Seconds(100), 0), 1LL);
auto dpns = _nss.makeDropPendingNamespace(dropOpTime);
@@ -342,7 +343,7 @@ void _testDropDatabaseResetsDropPendingStateIfAwaitReplicationFails(OperationCon
TEST_F(DropDatabaseTest,
DropDatabaseResetsDropPendingStateIfAwaitReplicationFailsAndDatabaseIsPresent) {
// Update ReplicationCoordinatorMock so that awaitReplication() fails.
- _replCoord->setAwaitReplicationReturnValueFunction([](const repl::OpTime&) {
+ _replCoord->setAwaitReplicationReturnValueFunction([](OperationContext*, const repl::OpTime&) {
return repl::ReplicationCoordinator::StatusAndDuration(
Status(ErrorCodes::WriteConcernFailed, ""), Milliseconds(0));
});
@@ -353,11 +354,12 @@ TEST_F(DropDatabaseTest,
TEST_F(DropDatabaseTest,
DropDatabaseResetsDropPendingStateIfAwaitReplicationFailsAndDatabaseIsMissing) {
// Update ReplicationCoordinatorMock so that awaitReplication() fails.
- _replCoord->setAwaitReplicationReturnValueFunction([this](const repl::OpTime&) {
- _removeDatabaseFromCatalog(_opCtx.get(), _nss.db());
- return repl::ReplicationCoordinator::StatusAndDuration(
- Status(ErrorCodes::WriteConcernFailed, ""), Milliseconds(0));
- });
+ _replCoord->setAwaitReplicationReturnValueFunction(
+ [this](OperationContext*, const repl::OpTime&) {
+ _removeDatabaseFromCatalog(_opCtx.get(), _nss.db());
+ return repl::ReplicationCoordinator::StatusAndDuration(
+ Status(ErrorCodes::WriteConcernFailed, ""), Milliseconds(0));
+ });
_testDropDatabaseResetsDropPendingStateIfAwaitReplicationFails(_opCtx.get(), _nss, false);
}
@@ -368,15 +370,16 @@ TEST_F(DropDatabaseTest,
// dropDatabase() should detect this and release the global lock temporarily if it needs to call
// ReplicationCoordinator::awaitReplication().
bool isAwaitReplicationCalled = false;
- _replCoord->setAwaitReplicationReturnValueFunction([&, this](const repl::OpTime& opTime) {
- isAwaitReplicationCalled = true;
- // This test does not set the client's last optime.
- ASSERT_EQUALS(opTime, repl::OpTime());
- ASSERT_FALSE(_opCtx->lockState()->isW());
- ASSERT_FALSE(_opCtx->lockState()->isDbLockedForMode(_nss.db(), MODE_X));
- ASSERT_FALSE(_opCtx->lockState()->isLocked());
- return repl::ReplicationCoordinator::StatusAndDuration(Status::OK(), Milliseconds(0));
- });
+ _replCoord->setAwaitReplicationReturnValueFunction(
+ [&, this](OperationContext*, const repl::OpTime& opTime) {
+ isAwaitReplicationCalled = true;
+ // This test does not set the client's last optime.
+ ASSERT_EQUALS(opTime, repl::OpTime());
+ ASSERT_FALSE(_opCtx->lockState()->isW());
+ ASSERT_FALSE(_opCtx->lockState()->isDbLockedForMode(_nss.db(), MODE_X));
+ ASSERT_FALSE(_opCtx->lockState()->isLocked());
+ return repl::ReplicationCoordinator::StatusAndDuration(Status::OK(), Milliseconds(0));
+ });
{
Lock::GlobalWrite lk(_opCtx.get());
@@ -392,14 +395,15 @@ TEST_F(DropDatabaseTest,
// dropDatabase() should detect this and release the global lock temporarily if it needs to call
// ReplicationCoordinator::awaitReplication().
bool isAwaitReplicationCalled = false;
- _replCoord->setAwaitReplicationReturnValueFunction([&, this](const repl::OpTime& opTime) {
- isAwaitReplicationCalled = true;
- ASSERT_GREATER_THAN(opTime, repl::OpTime());
- ASSERT_FALSE(_opCtx->lockState()->isW());
- ASSERT_FALSE(_opCtx->lockState()->isDbLockedForMode(_nss.db(), MODE_X));
- ASSERT_FALSE(_opCtx->lockState()->isLocked());
- return repl::ReplicationCoordinator::StatusAndDuration(Status::OK(), Milliseconds(0));
- });
+ _replCoord->setAwaitReplicationReturnValueFunction(
+ [&, this](OperationContext*, const repl::OpTime& opTime) {
+ isAwaitReplicationCalled = true;
+ ASSERT_GREATER_THAN(opTime, repl::OpTime());
+ ASSERT_FALSE(_opCtx->lockState()->isW());
+ ASSERT_FALSE(_opCtx->lockState()->isDbLockedForMode(_nss.db(), MODE_X));
+ ASSERT_FALSE(_opCtx->lockState()->isLocked());
+ return repl::ReplicationCoordinator::StatusAndDuration(Status::OK(), Milliseconds(0));
+ });
repl::OpTime dropOpTime(Timestamp(Seconds(100), 0), 1LL);
auto dpns = _nss.makeDropPendingNamespace(dropOpTime);
@@ -416,10 +420,11 @@ TEST_F(DropDatabaseTest,
TEST_F(DropDatabaseTest,
DropDatabaseReturnsNamespaceNotFoundIfDatabaseIsRemovedAfterCollectionsDropsAreReplicated) {
// Update ReplicationCoordinatorMock so that awaitReplication() fails.
- _replCoord->setAwaitReplicationReturnValueFunction([this](const repl::OpTime&) {
- _removeDatabaseFromCatalog(_opCtx.get(), _nss.db());
- return repl::ReplicationCoordinator::StatusAndDuration(Status::OK(), Milliseconds(0));
- });
+ _replCoord->setAwaitReplicationReturnValueFunction(
+ [this](OperationContext*, const repl::OpTime&) {
+ _removeDatabaseFromCatalog(_opCtx.get(), _nss.db());
+ return repl::ReplicationCoordinator::StatusAndDuration(Status::OK(), Milliseconds(0));
+ });
_createCollection(_opCtx.get(), _nss);
@@ -438,12 +443,13 @@ TEST_F(DropDatabaseTest,
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));
- });
+ _replCoord->setAwaitReplicationReturnValueFunction(
+ [this](OperationContext*, 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);