summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline
diff options
context:
space:
mode:
authorJordi Serra Torrens <jordi.serra-torrens@mongodb.com>2021-02-24 08:53:55 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-03-08 17:21:27 +0000
commitdc009c5a8d484f6a0db2f357274e14e30ea9f476 (patch)
treed36f970ae4e8604f25809d6133058fd823005a75 /src/mongo/db/pipeline
parent931b53d712eaeaec29653799722127983687c284 (diff)
downloadmongo-dc009c5a8d484f6a0db2f357274e14e30ea9f476.tar.gz
SERVER-54874: Ensure reading consistent config.collections and config.chunks when refreshing the CatalogCache
Diffstat (limited to 'src/mongo/db/pipeline')
-rw-r--r--src/mongo/db/pipeline/dispatch_shard_pipeline_test.cpp38
-rw-r--r--src/mongo/db/pipeline/sharded_union_test.cpp111
2 files changed, 69 insertions, 80 deletions
diff --git a/src/mongo/db/pipeline/dispatch_shard_pipeline_test.cpp b/src/mongo/db/pipeline/dispatch_shard_pipeline_test.cpp
index 9d296c32dfa..8f21cad7337 100644
--- a/src/mongo/db/pipeline/dispatch_shard_pipeline_test.cpp
+++ b/src/mongo/db/pipeline/dispatch_shard_pipeline_test.cpp
@@ -220,26 +220,24 @@ TEST_F(DispatchShardPipelineTest, WrappedDispatchDoesRetryOnStaleConfigError) {
const OID epoch = OID::gen();
const UUID uuid = UUID::gen();
const ShardKeyPattern shardKeyPattern(BSON("_id" << 1));
- expectGetCollection(kTestAggregateNss, epoch, uuid, shardKeyPattern);
- expectFindSendBSONObjVector(kConfigHostAndPort, [&]() {
- ChunkVersion version(1, 0, epoch, boost::none /* timestamp */);
-
- ChunkType chunk1(kTestAggregateNss,
- {shardKeyPattern.getKeyPattern().globalMin(), BSON("_id" << 0)},
- version,
- {"0"});
- chunk1.setName(OID::gen());
- version.incMinor();
-
- ChunkType chunk2(kTestAggregateNss,
- {BSON("_id" << 0), shardKeyPattern.getKeyPattern().globalMax()},
- version,
- {"1"});
- chunk2.setName(OID::gen());
- version.incMinor();
-
- return std::vector<BSONObj>{chunk1.toConfigBSON(), chunk2.toConfigBSON()};
- }());
+
+ ChunkVersion version(1, 0, epoch, boost::none /* timestamp */);
+
+ ChunkType chunk1(kTestAggregateNss,
+ {shardKeyPattern.getKeyPattern().globalMin(), BSON("_id" << 0)},
+ version,
+ {"0"});
+ chunk1.setName(OID::gen());
+ version.incMinor();
+
+ ChunkType chunk2(kTestAggregateNss,
+ {BSON("_id" << 0), shardKeyPattern.getKeyPattern().globalMax()},
+ version,
+ {"1"});
+ chunk2.setName(OID::gen());
+ version.incMinor();
+ expectCollectionAndChunksAggregation(
+ kTestAggregateNss, epoch, uuid, shardKeyPattern, {chunk1, chunk2});
// That error should be retried, but only the one on that shard.
onCommand([&](const executor::RemoteCommandRequest& request) {
diff --git a/src/mongo/db/pipeline/sharded_union_test.cpp b/src/mongo/db/pipeline/sharded_union_test.cpp
index bb994059d03..7f1ecf1b870 100644
--- a/src/mongo/db/pipeline/sharded_union_test.cpp
+++ b/src/mongo/db/pipeline/sharded_union_test.cpp
@@ -165,26 +165,25 @@ TEST_F(ShardedUnionTest, RetriesSubPipelineOnStaleConfigError) {
const OID epoch = OID::gen();
const UUID uuid = UUID::gen();
const ShardKeyPattern shardKeyPattern(BSON("_id" << 1));
- expectGetCollection(kTestAggregateNss, epoch, uuid, shardKeyPattern);
- expectFindSendBSONObjVector(kConfigHostAndPort, [&]() {
- ChunkVersion version(1, 0, epoch, boost::none /* timestamp */);
-
- ChunkType chunk1(kTestAggregateNss,
- {shardKeyPattern.getKeyPattern().globalMin(), BSON("_id" << 0)},
- version,
- {"0"});
- chunk1.setName(OID::gen());
- version.incMinor();
-
- ChunkType chunk2(kTestAggregateNss,
- {BSON("_id" << 0), shardKeyPattern.getKeyPattern().globalMax()},
- version,
- {"1"});
- chunk2.setName(OID::gen());
- version.incMinor();
-
- return std::vector<BSONObj>{chunk1.toConfigBSON(), chunk2.toConfigBSON()};
- }());
+
+ ChunkVersion version(1, 0, epoch, boost::none /* timestamp */);
+
+ ChunkType chunk1(kTestAggregateNss,
+ {shardKeyPattern.getKeyPattern().globalMin(), BSON("_id" << 0)},
+ version,
+ {"0"});
+ chunk1.setName(OID::gen());
+ version.incMinor();
+
+ ChunkType chunk2(kTestAggregateNss,
+ {BSON("_id" << 0), shardKeyPattern.getKeyPattern().globalMax()},
+ version,
+ {"1"});
+ chunk2.setName(OID::gen());
+ version.incMinor();
+
+ expectCollectionAndChunksAggregation(
+ kTestAggregateNss, epoch, uuid, shardKeyPattern, {chunk1, chunk2});
// That error should be retried, but only the one on that shard.
onCommand([&](const executor::RemoteCommandRequest& request) {
@@ -242,33 +241,29 @@ TEST_F(ShardedUnionTest, CorrectlySplitsSubPipelineIfRefreshedDistributionRequir
const OID epoch = OID::gen();
const UUID uuid = UUID::gen();
const ShardKeyPattern shardKeyPattern(BSON("_id" << 1));
- expectGetCollection(kTestAggregateNss, epoch, uuid, shardKeyPattern);
- expectFindSendBSONObjVector(kConfigHostAndPort, [&]() {
- ChunkVersion version(1, 0, epoch, boost::none /* timestamp */);
-
- ChunkType chunk1(kTestAggregateNss,
- {shardKeyPattern.getKeyPattern().globalMin(), BSON("_id" << 0)},
- version,
- {shards[0].getName()});
- chunk1.setName(OID::gen());
- version.incMinor();
-
- ChunkType chunk2(kTestAggregateNss,
- {BSON("_id" << 0), BSON("_id" << 10)},
- version,
- {shards[1].getName()});
- chunk2.setName(OID::gen());
- version.incMinor();
-
- ChunkType chunk3(kTestAggregateNss,
- {BSON("_id" << 10), shardKeyPattern.getKeyPattern().globalMax()},
- version,
- {shards[0].getName()});
- chunk3.setName(OID::gen());
-
- return std::vector<BSONObj>{
- chunk1.toConfigBSON(), chunk2.toConfigBSON(), chunk3.toConfigBSON()};
- }());
+
+ ChunkVersion version(1, 0, epoch, boost::none /* timestamp */);
+
+ ChunkType chunk1(kTestAggregateNss,
+ {shardKeyPattern.getKeyPattern().globalMin(), BSON("_id" << 0)},
+ version,
+ {shards[0].getName()});
+ chunk1.setName(OID::gen());
+ version.incMinor();
+
+ ChunkType chunk2(
+ kTestAggregateNss, {BSON("_id" << 0), BSON("_id" << 10)}, version, {shards[1].getName()});
+ chunk2.setName(OID::gen());
+ version.incMinor();
+
+ ChunkType chunk3(kTestAggregateNss,
+ {BSON("_id" << 10), shardKeyPattern.getKeyPattern().globalMax()},
+ version,
+ {shards[0].getName()});
+ chunk3.setName(OID::gen());
+
+ expectCollectionAndChunksAggregation(
+ kTestAggregateNss, epoch, uuid, shardKeyPattern, {chunk1, chunk2, chunk3});
// That error should be retried, this time two shards.
onCommand([&](const executor::RemoteCommandRequest& request) {
@@ -333,19 +328,15 @@ TEST_F(ShardedUnionTest, AvoidsSplittingSubPipelineIfRefreshedDistributionDoesNo
const OID epoch = OID::gen();
const UUID uuid = UUID::gen();
const ShardKeyPattern shardKeyPattern(BSON("_id" << 1));
- expectGetCollection(kTestAggregateNss, epoch, uuid, shardKeyPattern);
- expectFindSendBSONObjVector(kConfigHostAndPort, [&]() {
- ChunkVersion version(1, 0, epoch, boost::none /* timestamp */);
-
- ChunkType chunk1(kTestAggregateNss,
- {shardKeyPattern.getKeyPattern().globalMin(),
- shardKeyPattern.getKeyPattern().globalMax()},
- version,
- {shards[0].getName()});
- chunk1.setName(OID::gen());
-
- return std::vector<BSONObj>{chunk1.toConfigBSON()};
- }());
+ ChunkVersion version(1, 0, epoch, boost::none /* timestamp */);
+ ChunkType chunk1(
+ kTestAggregateNss,
+ {shardKeyPattern.getKeyPattern().globalMin(), shardKeyPattern.getKeyPattern().globalMax()},
+ version,
+ {shards[0].getName()});
+ chunk1.setName(OID::gen());
+
+ expectCollectionAndChunksAggregation(kTestAggregateNss, epoch, uuid, shardKeyPattern, {chunk1});
// That error should be retried, this time targetting only one shard.
onCommand([&](const executor::RemoteCommandRequest& request) {