summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/repl_set_heartbeat_args_v1.cpp
diff options
context:
space:
mode:
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.cpp14
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) {