summaryrefslogtreecommitdiff
path: root/src/mongo/s/request_types/set_shard_version_request.cpp
diff options
context:
space:
mode:
authorKaloian Manassiev <kaloian.manassiev@mongodb.com>2020-05-05 08:35:19 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-05-05 15:11:12 +0000
commita439fbcb0574493648a7a92a4e91117ba79086ed (patch)
tree5344eb5d0d29e1096812a1105c60a456fd582b47 /src/mongo/s/request_types/set_shard_version_request.cpp
parent2a4550891ce40dacc756307ca0b3a4a77d1085ac (diff)
downloadmongo-a439fbcb0574493648a7a92a4e91117ba79086ed.tar.gz
SERVER-47841 Ensure 4.5 nodes always send SSV with {kNoConnectionVersioning:true}
Diffstat (limited to 'src/mongo/s/request_types/set_shard_version_request.cpp')
-rw-r--r--src/mongo/s/request_types/set_shard_version_request.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/mongo/s/request_types/set_shard_version_request.cpp b/src/mongo/s/request_types/set_shard_version_request.cpp
index 5187ed32c43..208d88b66fa 100644
--- a/src/mongo/s/request_types/set_shard_version_request.cpp
+++ b/src/mongo/s/request_types/set_shard_version_request.cpp
@@ -45,6 +45,8 @@ namespace {
const char kCmdName[] = "setShardVersion";
const char kForceRefresh[] = "forceRefresh";
const char kAuthoritative[] = "authoritative";
+const char kNoConnectionVersioning[] =
+ "noConnectionVersioning"; // TODO (SERVER-47956): Remove after 4.6 is released
} // namespace
@@ -102,6 +104,18 @@ StatusWith<SetShardVersionRequest> SetShardVersionRequest::parseFromBSON(const B
request._version = versionStatus.getValue();
}
+ {
+ bool noConnectionVersioning;
+ Status status = bsonExtractBooleanFieldWithDefault(
+ cmdObj, kNoConnectionVersioning, true, &noConnectionVersioning);
+ if (!status.isOK())
+ return status;
+ if (!noConnectionVersioning)
+ return {ErrorCodes::Error(47841),
+ "This is a request with noConnectionVersioning:false, which means it comes "
+ "from an older version of the server and is not supported."};
+ }
+
return request;
}
@@ -111,6 +125,7 @@ BSONObj SetShardVersionRequest::toBSON() const {
cmdBuilder.append(kCmdName, _nss.get().ns());
cmdBuilder.append(kForceRefresh, _forceRefresh);
cmdBuilder.append(kAuthoritative, _isAuthoritative);
+ cmdBuilder.append(kNoConnectionVersioning, true);
_version->appendLegacyWithField(&cmdBuilder, kVersion);