summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/repl_set_heartbeat_args.cpp
diff options
context:
space:
mode:
authorTess Avitabile <tess.avitabile@mongodb.com>2017-10-30 15:46:36 -0400
committerTess Avitabile <tess.avitabile@mongodb.com>2017-11-09 09:39:44 -0500
commit271879b7a67c9d9b36778692f2a77e04c6403a1f (patch)
treea4e8911bcb4ac5a0a494725db9b65e92b0f44ae6 /src/mongo/db/repl/repl_set_heartbeat_args.cpp
parent9a7ab2468ec94462890395cc591cd629d1dd9f7c (diff)
downloadmongo-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.cpp29
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;