diff options
Diffstat (limited to 'src/mongo/db/repl/repl_set_heartbeat_args_v1.cpp')
-rw-r--r-- | src/mongo/db/repl/repl_set_heartbeat_args_v1.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/mongo/db/repl/repl_set_heartbeat_args_v1.cpp b/src/mongo/db/repl/repl_set_heartbeat_args_v1.cpp index 57f85aa58f9..05423e1b538 100644 --- a/src/mongo/db/repl/repl_set_heartbeat_args_v1.cpp +++ b/src/mongo/db/repl/repl_set_heartbeat_args_v1.cpp @@ -159,25 +159,27 @@ void ReplSetHeartbeatArgsV1::setCheckEmpty() { _checkEmpty = true; } -BSONObj ReplSetHeartbeatArgsV1::toBSON(bool omitConfigTerm) const { +BSONObj ReplSetHeartbeatArgsV1::toBSON() const { invariant(isInitialized()); BSONObjBuilder builder; - addToBSON(&builder, omitConfigTerm); + addToBSON(&builder); return builder.obj(); } -void ReplSetHeartbeatArgsV1::addToBSON(BSONObjBuilder* builder, bool omitConfigTerm) const { +void ReplSetHeartbeatArgsV1::addToBSON(BSONObjBuilder* builder) const { builder->append(kSetNameFieldName, _setName); if (_checkEmpty) { builder->append(kCheckEmptyFieldName, _checkEmpty); } builder->appendIntOrLL(kConfigVersionFieldName, _configVersion); - // Only attach the term field if we are fully upgraded to 4.4, since 4.2 nodes won't be able to - // parse it. + // The configTerm field is new in 4.4 and cannot be parsed by MongoDB 4.2. Therefore omit it if + // we have a 4.2-style replica set config with no "term". This permits us to downgrade by first + // removing the replica set config's term, then downgrading to 4.2. + // TODO (SERVER-46288): Don't check FCV. if (serverGlobalParams.featureCompatibility.isVersionInitialized() && serverGlobalParams.featureCompatibility.getVersion() == ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo44 && - !omitConfigTerm) { + _configTerm != OpTime::kUninitializedTerm) { builder->appendIntOrLL(kConfigTermFieldName, _configTerm); } if (_hasHeartbeatVersion) { |