summaryrefslogtreecommitdiff
path: root/src/mongo/db/index_builds_coordinator_mongod.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.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.cpp')
-rw-r--r--src/mongo/db/index_builds_coordinator_mongod.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/mongo/db/index_builds_coordinator_mongod.cpp b/src/mongo/db/index_builds_coordinator_mongod.cpp
index 189e0397f29..517cf95d2c2 100644
--- a/src/mongo/db/index_builds_coordinator_mongod.cpp
+++ b/src/mongo/db/index_builds_coordinator_mongod.cpp
@@ -802,7 +802,17 @@ Status IndexBuildsCoordinatorMongod::setCommitQuorum(OperationContext* opCtx,
<< nss << "'.");
}
- invariantStatusOK(swOnDiskCommitQuorum);
+ auto currentCommitQuorum = invariantStatusOK(swOnDiskCommitQuorum);
+ if (currentCommitQuorum.numNodes == CommitQuorumOptions::kDisabled ||
+ newCommitQuorum.numNodes == CommitQuorumOptions::kDisabled) {
+ return Status(ErrorCodes::BadValue,
+ str::stream() << "Commit quorum value can be changed only for index builds "
+ << "with commit quorum enabled, nss: '" << nss
+ << "' first index name: '" << indexNames.front()
+ << "' currentCommitQuorum: " << currentCommitQuorum.toBSON()
+ << " providedCommitQuorum: " << newCommitQuorum.toBSON());
+ }
+
invariant(opCtx->lockState()->isRSTLLocked());
// About to update the commit quorum value on-disk. So, take the lock in exclusive mode to
// prevent readers from reading the commit quorum value and making decision on commit quorum