diff options
Diffstat (limited to 'src/mongo/db/repl/repl_set_heartbeat_response.cpp')
-rw-r--r-- | src/mongo/db/repl/repl_set_heartbeat_response.cpp | 8 |
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(); |