From 21899f6bd537399e00dd86833d185b1ebd1fffe9 Mon Sep 17 00:00:00 2001 From: Xuerui Fa Date: Fri, 6 Sep 2019 00:55:27 +0000 Subject: SERVER-42573 Only warn about enableReadConcernMajority if PSA architecture (cherry picked from commit 897ebf0eb55ffc68ef4c09aefc43a48bca82df3d) --- src/mongo/db/repl/repl_set_config.cpp | 6 ++++++ src/mongo/db/repl/repl_set_config.h | 5 +++++ src/mongo/db/repl/replication_coordinator_impl.cpp | 6 ++++-- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/mongo/db/repl/repl_set_config.cpp b/src/mongo/db/repl/repl_set_config.cpp index 34fe0a2feff..00a8177cbf1 100644 --- a/src/mongo/db/repl/repl_set_config.cpp +++ b/src/mongo/db/repl/repl_set_config.cpp @@ -730,6 +730,12 @@ Status ReplSetConfig::checkIfWriteConcernCanBeSatisfied( } } +int ReplSetConfig::getNumDataBearingMembers() const { + int numArbiters = + std::count_if(begin(_members), end(_members), [](const auto& x) { return x.isArbiter(); }); + return _members.size() - numArbiters; +} + const MemberConfig& ReplSetConfig::getMemberAt(size_t i) const { invariant(i < _members.size()); return _members[i]; diff --git a/src/mongo/db/repl/repl_set_config.h b/src/mongo/db/repl/repl_set_config.h index 1e451a968ca..54ea0d52454 100644 --- a/src/mongo/db/repl/repl_set_config.h +++ b/src/mongo/db/repl/repl_set_config.h @@ -160,6 +160,11 @@ public: return _members; } + /** + * Gets the number of data-bearing members in this configuration. + */ + int getNumDataBearingMembers() const; + /** * Access a MemberConfig element by index. */ diff --git a/src/mongo/db/repl/replication_coordinator_impl.cpp b/src/mongo/db/repl/replication_coordinator_impl.cpp index f7d410fdfbe..c6fb608d76b 100644 --- a/src/mongo/db/repl/replication_coordinator_impl.cpp +++ b/src/mongo/db/repl/replication_coordinator_impl.cpp @@ -562,9 +562,11 @@ void ReplicationCoordinatorImpl::_finishLoadLocalConfig( myIndex = StatusWith(-1); } - if (serverGlobalParams.enableMajorityReadConcern && localConfig.containsArbiter()) { + if (serverGlobalParams.enableMajorityReadConcern && localConfig.getNumMembers() == 3 && + localConfig.getNumDataBearingMembers() == 2) { log() << startupWarningsLog; - log() << "** WARNING: This replica set uses arbiters, but readConcern:majority is enabled " + log() << "** WARNING: This replica set has a Primary-Secondary-Arbiter architecture, but " + "readConcern:majority is enabled " << startupWarningsLog; log() << "** for this node. This is not a recommended configuration. Please see " << startupWarningsLog; -- cgit v1.2.1