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.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.cpp')
-rw-r--r-- | src/mongo/db/index_builds_coordinator_mongod.cpp | 12 |
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 |