diff options
author | Suganthi Mani <suganthi.mani@mongodb.com> | 2020-04-15 09:23:45 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-04-16 18:30:57 +0000 |
commit | 4ab404081f02d52285371c5a3b8520429a74e047 (patch) | |
tree | f7f27810f32447bbb7d50bb7a347e18ae82ecdce /src/mongo/db/index_builds_coordinator_mongod_test.cpp | |
parent | 44af4b2915cef5afcfe63104fb902e4519ffa889 (diff) | |
download | mongo-4ab404081f02d52285371c5a3b8520429a74e047.tar.gz |
SERVER-47464 Prevent SetIndexCommitQuorum cmd from changing commit quorum on to off & vice versa.
Diffstat (limited to 'src/mongo/db/index_builds_coordinator_mongod_test.cpp')
-rw-r--r-- | src/mongo/db/index_builds_coordinator_mongod_test.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/mongo/db/index_builds_coordinator_mongod_test.cpp b/src/mongo/db/index_builds_coordinator_mongod_test.cpp index d4fba054cae..59ecfba58b6 100644 --- a/src/mongo/db/index_builds_coordinator_mongod_test.cpp +++ b/src/mongo/db/index_builds_coordinator_mongod_test.cpp @@ -313,6 +313,63 @@ TEST_F(IndexBuildsCoordinatorMongodTest, SetCommitQuorumWithBadArguments) { unittest::assertGet(testFoo1Future.getNoThrow()); } +TEST_F(IndexBuildsCoordinatorMongodTest, SetCommitQuorumFailsToTurnCommitQuorumFromOffToOn) { + _indexBuildsCoord->sleepIndexBuilds_forTestOnly(true); + + // Start an index build on _testFooNss with commit quorum disabled. + auto testFoo1Future = + assertGet(_indexBuildsCoord->startIndexBuild(operationContext(), + _testFooNss.db().toString(), + _testFooUUID, + makeSpecs(_testFooNss, {"a"}), + UUID::gen(), + IndexBuildProtocol::kTwoPhase, + _indexBuildOptions)); + + // Update the commit quorum value such that it enables commit quorum for the index + // build 'a_1'. + auto status = _indexBuildsCoord->setCommitQuorum( + operationContext(), _testFooNss, {"a_1"}, CommitQuorumOptions(1)); + ASSERT_EQUALS(ErrorCodes::BadValue, status); + + _indexBuildsCoord->sleepIndexBuilds_forTestOnly(false); + assertGet(testFoo1Future.getNoThrow()); +} + +TEST_F(IndexBuildsCoordinatorMongodTest, SetCommitQuorumFailsToTurnCommitQuorumFromOnToOff) { + _indexBuildsCoord->sleepIndexBuilds_forTestOnly(true); + + const IndexBuildsCoordinator::IndexBuildOptions indexBuildOptionsWithCQOn = { + CommitQuorumOptions(1)}; + const auto buildUUID = UUID::gen(); + + // Start an index build on _testFooNss with commit quorum enabled. + auto testFoo1Future = + assertGet(_indexBuildsCoord->startIndexBuild(operationContext(), + _testFooNss.db().toString(), + _testFooUUID, + makeSpecs(_testFooNss, {"a"}), + buildUUID, + IndexBuildProtocol::kTwoPhase, + indexBuildOptionsWithCQOn)); + + // Update the commit quorum value such that it disables commit quorum for the index + // build 'a_1'. + auto status = + _indexBuildsCoord->setCommitQuorum(operationContext(), + _testFooNss, + {"a_1"}, + CommitQuorumOptions(CommitQuorumOptions::kDisabled)); + ASSERT_EQUALS(ErrorCodes::BadValue, status); + + _indexBuildsCoord->sleepIndexBuilds_forTestOnly(false); + + ASSERT_OK(_indexBuildsCoord->voteCommitIndexBuild( + operationContext(), buildUUID, HostAndPort("test1", 1234))); + + assertGet(testFoo1Future.getNoThrow()); +} + } // namespace } // namespace mongo |