diff options
author | Jordi Serra Torrens <jordi.serra-torrens@mongodb.com> | 2021-02-24 08:53:55 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-03-08 17:21:27 +0000 |
commit | dc009c5a8d484f6a0db2f357274e14e30ea9f476 (patch) | |
tree | d36f970ae4e8604f25809d6133058fd823005a75 /src/mongo/db/pipeline | |
parent | 931b53d712eaeaec29653799722127983687c284 (diff) | |
download | mongo-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.cpp | 38 | ||||
-rw-r--r-- | src/mongo/db/pipeline/sharded_union_test.cpp | 111 |
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) { |