summaryrefslogtreecommitdiff
path: root/src/mongo/db/index_builds_coordinator_mongod_test.cpp
diff options
context:
space:
mode:
authorSuganthi Mani <suganthi.mani@mongodb.com>2020-04-15 09:23:45 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-04-16 18:30:57 +0000
commit4ab404081f02d52285371c5a3b8520429a74e047 (patch)
treef7f27810f32447bbb7d50bb7a347e18ae82ecdce /src/mongo/db/index_builds_coordinator_mongod_test.cpp
parent44af4b2915cef5afcfe63104fb902e4519ffa889 (diff)
downloadmongo-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.cpp57
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