summaryrefslogtreecommitdiff
path: root/src/mongo
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
parent2a4550891ce40dacc756307ca0b3a4a77d1085ac (diff)
downloadmongo-a439fbcb0574493648a7a92a4e91117ba79086ed.tar.gz
SERVER-47841 Ensure 4.5 nodes always send SSV with {kNoConnectionVersioning:true}
Diffstat (limited to 'src/mongo')
-rw-r--r--src/mongo/s/request_types/set_shard_version_request.cpp15
-rw-r--r--src/mongo/s/request_types/set_shard_version_request_test.cpp9
-rw-r--r--src/mongo/s/sharding_router_test_fixture.cpp21
-rw-r--r--src/mongo/s/sharding_router_test_fixture.h8
4 files changed, 21 insertions, 32 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);
diff --git a/src/mongo/s/request_types/set_shard_version_request_test.cpp b/src/mongo/s/request_types/set_shard_version_request_test.cpp
index f89feb18e80..ce3d2202cb8 100644
--- a/src/mongo/s/request_types/set_shard_version_request_test.cpp
+++ b/src/mongo/s/request_types/set_shard_version_request_test.cpp
@@ -112,7 +112,8 @@ TEST(SetShardVersionRequest, ToSSVCommandFull) {
ASSERT_BSONOBJ_EQ(ssv.toBSON(),
BSON("setShardVersion"
<< "db.coll"
- << "forceRefresh" << false << "authoritative" << false << "version"
+ << "forceRefresh" << false << "authoritative" << false
+ << "noConnectionVersioning" << true << "version"
<< Timestamp(chunkVersion.toLong()) << "versionEpoch"
<< chunkVersion.epoch()));
}
@@ -130,7 +131,8 @@ TEST(SetShardVersionRequest, ToSSVCommandFullAuthoritative) {
ASSERT_BSONOBJ_EQ(ssv.toBSON(),
BSON("setShardVersion"
<< "db.coll"
- << "forceRefresh" << false << "authoritative" << true << "version"
+ << "forceRefresh" << false << "authoritative" << true
+ << "noConnectionVersioning" << true << "version"
<< Timestamp(chunkVersion.toLong()) << "versionEpoch"
<< chunkVersion.epoch()));
}
@@ -148,7 +150,8 @@ TEST(SetShardVersionRequest, ToSSVCommandFullForceRefresh) {
ASSERT_BSONOBJ_EQ(ssv.toBSON(),
BSON("setShardVersion"
<< "db.coll"
- << "forceRefresh" << true << "authoritative" << false << "version"
+ << "forceRefresh" << true << "authoritative" << false
+ << "noConnectionVersioning" << true << "version"
<< Timestamp(chunkVersion.toLong()) << "versionEpoch"
<< chunkVersion.epoch()));
}
diff --git a/src/mongo/s/sharding_router_test_fixture.cpp b/src/mongo/s/sharding_router_test_fixture.cpp
index f83f7c6186a..92dda1d5c2a 100644
--- a/src/mongo/s/sharding_router_test_fixture.cpp
+++ b/src/mongo/s/sharding_router_test_fixture.cpp
@@ -68,7 +68,6 @@
#include "mongo/s/config_server_catalog_cache_loader.h"
#include "mongo/s/grid.h"
#include "mongo/s/query/cluster_cursor_manager.h"
-#include "mongo/s/request_types/set_shard_version_request.h"
#include "mongo/s/sharding_egress_metadata_hook_for_mongos.h"
#include "mongo/s/sharding_task_executor.h"
#include "mongo/s/write_ops/batched_command_response.h"
@@ -447,26 +446,6 @@ void ShardingTestFixture::expectUpdateCollection(const HostAndPort& expectedHost
});
}
-void ShardingTestFixture::expectSetShardVersion(const HostAndPort& expectedHost,
- const ShardType& expectedShard,
- const NamespaceString& expectedNs,
- const ChunkVersion& expectedChunkVersion) {
- onCommand([&](const RemoteCommandRequest& request) {
- ASSERT_EQ(expectedHost, request.target);
- ASSERT_BSONOBJ_EQ(rpc::makeEmptyMetadata(),
- rpc::TrackingMetadata::removeTrackingData(request.metadata));
-
- SetShardVersionRequest ssv =
- assertGet(SetShardVersionRequest::parseFromBSON(request.cmdObj));
-
- ASSERT(ssv.isAuthoritative());
- ASSERT_EQ(expectedNs, ssv.getNS());
- ASSERT_EQ(expectedChunkVersion.toString(), ssv.getNSVersion().toString());
-
- return BSON("ok" << true);
- });
-}
-
void ShardingTestFixture::expectCount(const HostAndPort& configHost,
const NamespaceString& expectedNs,
const BSONObj& expectedQuery,
diff --git a/src/mongo/s/sharding_router_test_fixture.h b/src/mongo/s/sharding_router_test_fixture.h
index 84a9b7c5dc3..7f0de2cbd77 100644
--- a/src/mongo/s/sharding_router_test_fixture.h
+++ b/src/mongo/s/sharding_router_test_fixture.h
@@ -152,14 +152,6 @@ public:
const CollectionType& coll,
bool expectUpsert = true);
- /**
- * Expects a setShardVersion command to be executed on the specified shard.
- */
- void expectSetShardVersion(const HostAndPort& expectedHost,
- const ShardType& expectedShard,
- const NamespaceString& expectedNs,
- const ChunkVersion& expectedChunkVersion);
-
void shutdownExecutor();
void setRemote(const HostAndPort& remote);