summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/repl_set_heartbeat_response.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/repl/repl_set_heartbeat_response.cpp')
-rw-r--r--src/mongo/db/repl/repl_set_heartbeat_response.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/mongo/db/repl/repl_set_heartbeat_response.cpp b/src/mongo/db/repl/repl_set_heartbeat_response.cpp
index c43316acdc0..5905881ac3d 100644
--- a/src/mongo/db/repl/repl_set_heartbeat_response.cpp
+++ b/src/mongo/db/repl/repl_set_heartbeat_response.cpp
@@ -51,6 +51,7 @@ namespace {
const std::string kConfigFieldName = "config";
const std::string kConfigVersionFieldName = "v";
+const std::string kConfigTermFieldName = "t";
const std::string kElectionTimeFieldName = "electionTime";
const std::string kMemberStateFieldName = "state";
const std::string kOkFieldName = "ok";
@@ -80,6 +81,7 @@ void ReplSetHeartbeatResponse::addToBSON(BSONObjBuilder* builder) const {
}
if (_configVersion != -1) {
*builder << kConfigVersionFieldName << _configVersion;
+ *builder << kConfigTermFieldName << _configTerm;
}
if (!_setName.empty()) {
*builder << kReplSetFieldName << _setName;
@@ -218,6 +220,12 @@ Status ReplSetHeartbeatResponse::initialize(const BSONObj& doc, long long term)
}
_configVersion = configVersionElement.numberInt();
+ // Allow a missing term field for backward compatibility.
+ const BSONElement configTermElement = doc[kConfigTermFieldName];
+ if (!configTermElement.eoo() && configVersionElement.type() == NumberInt) {
+ _configTerm = configTermElement.numberInt();
+ }
+
const BSONElement syncingToElement = doc[kSyncSourceFieldName];
if (syncingToElement.eoo()) {
_syncingTo = HostAndPort();