diff options
author | A. Jesse Jiryu Davis <jesse@mongodb.com> | 2020-02-11 22:03:34 -0500 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-02-24 02:09:50 +0000 |
commit | e433f91f86eb909d8de849798e1fdbd4c98147a5 (patch) | |
tree | a1f4610966b9402339c3e3643e58d36ab4b1092c /src/mongo/db/repl/repl_set_heartbeat_args_v1.cpp | |
parent | e8f1d29de757d41f7d082d5ca1e667d1b8938741 (diff) | |
download | mongo-e433f91f86eb909d8de849798e1fdbd4c98147a5.tar.gz |
SERVER-46303 Omit configTerm -1 from heartbeats
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) { |