diff options
author | Tess Avitabile <tess.avitabile@mongodb.com> | 2017-10-30 15:46:36 -0400 |
---|---|---|
committer | Tess Avitabile <tess.avitabile@mongodb.com> | 2017-11-09 09:39:44 -0500 |
commit | 271879b7a67c9d9b36778692f2a77e04c6403a1f (patch) | |
tree | a4e8911bcb4ac5a0a494725db9b65e92b0f44ae6 /src/mongo/db/repl/repl_set_heartbeat_args.cpp | |
parent | 9a7ab2468ec94462890395cc591cd629d1dd9f7c (diff) | |
download | mongo-271879b7a67c9d9b36778692f2a77e04c6403a1f.tar.gz |
SERVER-31631 Bump minimum outgoing wire version for mongod when featureCompatibilityVersion is 3.6
Diffstat (limited to 'src/mongo/db/repl/repl_set_heartbeat_args.cpp')
-rw-r--r-- | src/mongo/db/repl/repl_set_heartbeat_args.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/mongo/db/repl/repl_set_heartbeat_args.cpp b/src/mongo/db/repl/repl_set_heartbeat_args.cpp index db88f7e47b6..5b75f97c516 100644 --- a/src/mongo/db/repl/repl_set_heartbeat_args.cpp +++ b/src/mongo/db/repl/repl_set_heartbeat_args.cpp @@ -42,6 +42,7 @@ namespace { const std::string kCheckEmptyFieldName = "checkEmpty"; const std::string kProtocolVersionFieldName = "pv"; const std::string kConfigVersionFieldName = "v"; +const std::string kHeartbeatVersionFieldName = "hbv"; const std::string kSenderIdFieldName = "fromId"; const std::string kSetNameFieldName = "replSetHeartbeat"; const std::string kSenderHostFieldName = "from"; @@ -49,6 +50,7 @@ const std::string kSenderHostFieldName = "from"; const std::string kLegalHeartbeatFieldNames[] = {kCheckEmptyFieldName, kProtocolVersionFieldName, kConfigVersionFieldName, + kHeartbeatVersionFieldName, kSenderIdFieldName, kSetNameFieldName, kSenderHostFieldName}; @@ -59,12 +61,14 @@ ReplSetHeartbeatArgs::ReplSetHeartbeatArgs() : _hasCheckEmpty(false), _hasProtocolVersion(false), _hasConfigVersion(false), + _hasHeartbeatVersion(false), _hasSenderId(false), _hasSetName(false), _hasSenderHost(false), _checkEmpty(false), _protocolVersion(-1), _configVersion(-1), + _heartbeatVersion(-1), _senderId(-1), _setName(""), _senderHost(HostAndPort()) {} @@ -90,6 +94,22 @@ Status ReplSetHeartbeatArgs::initialize(const BSONObj& argsObj) { return status; _hasConfigVersion = true; + long long tempHeartbeatVersion; + status = bsonExtractIntegerField(argsObj, kHeartbeatVersionFieldName, &tempHeartbeatVersion); + if (status.isOK()) { + if (tempHeartbeatVersion != 1) { + return Status(ErrorCodes::Error(40665), + str::stream() << "Found invalid value for field " + << kHeartbeatVersionFieldName + << ": " + << tempHeartbeatVersion); + } + _heartbeatVersion = tempHeartbeatVersion; + _hasHeartbeatVersion = true; + } else if (status.code() != ErrorCodes::NoSuchKey) { + return status; + } + status = bsonExtractIntegerFieldWithDefault(argsObj, kSenderIdFieldName, -1, &_senderId); if (!status.isOK()) return status; @@ -126,6 +146,10 @@ BSONObj ReplSetHeartbeatArgs::toBSON() const { builder.append("replSetHeartbeat", _setName); builder.appendIntOrLL("pv", _protocolVersion); builder.appendIntOrLL("v", _configVersion); + if (_hasHeartbeatVersion) { + builder.append("hbv", _heartbeatVersion); + } + builder.append("from", _hasSenderHost ? _senderHost.toString() : ""); if (_hasSenderId) { @@ -152,6 +176,11 @@ void ReplSetHeartbeatArgs::setConfigVersion(long long newVal) { _hasConfigVersion = true; } +void ReplSetHeartbeatArgs::setHeartbeatVersion(long long newVal) { + _heartbeatVersion = newVal; + _hasHeartbeatVersion = true; +} + void ReplSetHeartbeatArgs::setSenderId(long long newVal) { _senderId = newVal; _hasSenderId = true; |