diff options
author | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2020-05-05 08:35:19 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-05-05 15:11:12 +0000 |
commit | a439fbcb0574493648a7a92a4e91117ba79086ed (patch) | |
tree | 5344eb5d0d29e1096812a1105c60a456fd582b47 /src/mongo/s/request_types/set_shard_version_request.cpp | |
parent | 2a4550891ce40dacc756307ca0b3a4a77d1085ac (diff) | |
download | mongo-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.cpp | 15 |
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); |