summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/config/sharding_catalog_manager_bump_shard_versions_and_change_metadata_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/s/config/sharding_catalog_manager_bump_shard_versions_and_change_metadata_test.cpp')
-rw-r--r--src/mongo/db/s/config/sharding_catalog_manager_bump_shard_versions_and_change_metadata_test.cpp233
1 files changed, 128 insertions, 105 deletions
diff --git a/src/mongo/db/s/config/sharding_catalog_manager_bump_shard_versions_and_change_metadata_test.cpp b/src/mongo/db/s/config/sharding_catalog_manager_bump_shard_versions_and_change_metadata_test.cpp
index 9ff72e16ffe..3f5977caf67 100644
--- a/src/mongo/db/s/config/sharding_catalog_manager_bump_shard_versions_and_change_metadata_test.cpp
+++ b/src/mongo/db/s/config/sharding_catalog_manager_bump_shard_versions_and_change_metadata_test.cpp
@@ -118,10 +118,13 @@ protected:
*/
void assertOnlyOneChunkVersionBumped(OperationContext* opCtx,
std::vector<ChunkType> originalChunkTypes,
- const ChunkVersion& targetChunkVersion) {
+ const ChunkVersion& targetChunkVersion,
+ const OID& collEpoch,
+ const boost::optional<Timestamp>& collTimestamp) {
auto aChunkVersionWasBumped = false;
for (auto originalChunkType : originalChunkTypes) {
- auto swChunkTypeAfter = getChunkDoc(opCtx, originalChunkType.getMin());
+ auto swChunkTypeAfter =
+ getChunkDoc(opCtx, originalChunkType.getMin(), collEpoch, collTimestamp);
auto wasBumped = chunkMajorVersionWasBumpedAndOtherFieldsAreUnchanged(
originalChunkType, swChunkTypeAfter, targetChunkVersion);
if (aChunkVersionWasBumped) {
@@ -137,19 +140,19 @@ protected:
TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest,
BumpChunkVersionOneChunkPerShard) {
- const auto epoch = OID::gen();
- const auto shard0Chunk0 =
- generateChunkType(kNss,
- ChunkVersion(10, 1, epoch, boost::none /* timestamp */),
- kShard0.getName(),
- BSON("a" << 1),
- BSON("a" << 10));
- const auto shard1Chunk0 =
- generateChunkType(kNss,
- ChunkVersion(11, 2, epoch, boost::none /* timestamp */),
- kShard1.getName(),
- BSON("a" << 11),
- BSON("a" << 20));
+ const auto collEpoch = OID::gen();
+ const auto collTimestamp = boost::none;
+
+ const auto shard0Chunk0 = generateChunkType(kNss,
+ ChunkVersion(10, 1, collEpoch, collTimestamp),
+ kShard0.getName(),
+ BSON("a" << 1),
+ BSON("a" << 10));
+ const auto shard1Chunk0 = generateChunkType(kNss,
+ ChunkVersion(11, 2, collEpoch, collTimestamp),
+ kShard1.getName(),
+ BSON("a" << 11),
+ BSON("a" << 20));
const auto collectionVersion = shard1Chunk0.getVersion();
ChunkVersion targetChunkVersion(collectionVersion.majorVersion() + 1,
@@ -165,33 +168,36 @@ TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest,
opCtx, kNss, [&](OperationContext*, TxnNumber) {});
ASSERT_TRUE(chunkMajorVersionWasBumpedAndOtherFieldsAreUnchanged(
- shard0Chunk0, getChunkDoc(operationContext(), shard0Chunk0.getMin()), targetChunkVersion));
+ shard0Chunk0,
+ getChunkDoc(operationContext(), shard0Chunk0.getMin(), collEpoch, collTimestamp),
+ targetChunkVersion));
ASSERT_TRUE(chunkMajorVersionWasBumpedAndOtherFieldsAreUnchanged(
- shard1Chunk0, getChunkDoc(operationContext(), shard1Chunk0.getMin()), targetChunkVersion));
+ shard1Chunk0,
+ getChunkDoc(operationContext(), shard1Chunk0.getMin(), collEpoch, collTimestamp),
+ targetChunkVersion));
}
TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest,
BumpChunkVersionTwoChunksOnOneShard) {
- const auto epoch = OID::gen();
- const auto shard0Chunk0 =
- generateChunkType(kNss,
- ChunkVersion(10, 1, epoch, boost::none /* timestamp */),
- kShard0.getName(),
- BSON("a" << 1),
- BSON("a" << 10));
- const auto shard0Chunk1 =
- generateChunkType(kNss,
- ChunkVersion(11, 2, epoch, boost::none /* timestamp */),
- kShard0.getName(),
- BSON("a" << 11),
- BSON("a" << 20));
- const auto shard1Chunk0 =
- generateChunkType(kNss,
- ChunkVersion(8, 1, epoch, boost::none /* timestamp */),
- kShard1.getName(),
- BSON("a" << 21),
- BSON("a" << 100));
+ const auto collEpoch = OID::gen();
+ const auto collTimestamp = boost::none;
+
+ const auto shard0Chunk0 = generateChunkType(kNss,
+ ChunkVersion(10, 1, collEpoch, collTimestamp),
+ kShard0.getName(),
+ BSON("a" << 1),
+ BSON("a" << 10));
+ const auto shard0Chunk1 = generateChunkType(kNss,
+ ChunkVersion(11, 2, collEpoch, collTimestamp),
+ kShard0.getName(),
+ BSON("a" << 11),
+ BSON("a" << 20));
+ const auto shard1Chunk0 = generateChunkType(kNss,
+ ChunkVersion(8, 1, collEpoch, collTimestamp),
+ kShard1.getName(),
+ BSON("a" << 21),
+ BSON("a" << 100));
const auto collectionVersion = shard0Chunk1.getVersion();
ChunkVersion targetChunkVersion(collectionVersion.majorVersion() + 1,
@@ -205,40 +211,43 @@ TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest,
ShardingCatalogManager::get(opCtx)->bumpCollectionVersionAndChangeMetadataInTxn(
opCtx, kNss, [&](OperationContext*, TxnNumber) {});
- assertOnlyOneChunkVersionBumped(
- operationContext(), {shard0Chunk0, shard0Chunk1}, targetChunkVersion);
+ assertOnlyOneChunkVersionBumped(operationContext(),
+ {shard0Chunk0, shard0Chunk1},
+ targetChunkVersion,
+ collEpoch,
+ collTimestamp);
ASSERT_TRUE(chunkMajorVersionWasBumpedAndOtherFieldsAreUnchanged(
- shard1Chunk0, getChunkDoc(operationContext(), shard1Chunk0.getMin()), targetChunkVersion));
+ shard1Chunk0,
+ getChunkDoc(operationContext(), shard1Chunk0.getMin(), collEpoch, collTimestamp),
+ targetChunkVersion));
}
TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest,
BumpChunkVersionTwoChunksOnTwoShards) {
- const auto epoch = OID::gen();
- const auto shard0Chunk0 =
- generateChunkType(kNss,
- ChunkVersion(10, 1, epoch, boost::none /* timestamp */),
- kShard0.getName(),
- BSON("a" << 1),
- BSON("a" << 10));
- const auto shard0Chunk1 =
- generateChunkType(kNss,
- ChunkVersion(11, 2, epoch, boost::none /* timestamp */),
- kShard0.getName(),
- BSON("a" << 11),
- BSON("a" << 20));
- const auto shard1Chunk0 =
- generateChunkType(kNss,
- ChunkVersion(8, 1, epoch, boost::none /* timestamp */),
- kShard1.getName(),
- BSON("a" << 21),
- BSON("a" << 100));
- const auto shard1Chunk1 =
- generateChunkType(kNss,
- ChunkVersion(12, 1, epoch, boost::none /* timestamp */),
- kShard1.getName(),
- BSON("a" << 101),
- BSON("a" << 200));
+ const auto collEpoch = OID::gen();
+ const auto collTimestamp = boost::none;
+
+ const auto shard0Chunk0 = generateChunkType(kNss,
+ ChunkVersion(10, 1, collEpoch, collTimestamp),
+ kShard0.getName(),
+ BSON("a" << 1),
+ BSON("a" << 10));
+ const auto shard0Chunk1 = generateChunkType(kNss,
+ ChunkVersion(11, 2, collEpoch, collTimestamp),
+ kShard0.getName(),
+ BSON("a" << 11),
+ BSON("a" << 20));
+ const auto shard1Chunk0 = generateChunkType(kNss,
+ ChunkVersion(8, 1, collEpoch, collTimestamp),
+ kShard1.getName(),
+ BSON("a" << 21),
+ BSON("a" << 100));
+ const auto shard1Chunk1 = generateChunkType(kNss,
+ ChunkVersion(12, 1, collEpoch, collTimestamp),
+ kShard1.getName(),
+ BSON("a" << 101),
+ BSON("a" << 200));
const auto collectionVersion = shard1Chunk1.getVersion();
ChunkVersion targetChunkVersion(collectionVersion.majorVersion() + 1,
@@ -252,28 +261,34 @@ TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest,
ShardingCatalogManager::get(opCtx)->bumpCollectionVersionAndChangeMetadataInTxn(
opCtx, kNss, [&](OperationContext*, TxnNumber) {});
- assertOnlyOneChunkVersionBumped(
- operationContext(), {shard0Chunk0, shard0Chunk1}, targetChunkVersion);
-
- assertOnlyOneChunkVersionBumped(
- operationContext(), {shard1Chunk0, shard1Chunk1}, targetChunkVersion);
+ assertOnlyOneChunkVersionBumped(operationContext(),
+ {shard0Chunk0, shard0Chunk1},
+ targetChunkVersion,
+ collEpoch,
+ collTimestamp);
+
+ assertOnlyOneChunkVersionBumped(operationContext(),
+ {shard1Chunk0, shard1Chunk1},
+ targetChunkVersion,
+ collEpoch,
+ collTimestamp);
}
TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest,
SucceedsInThePresenceOfTransientTransactionErrors) {
- const auto epoch = OID::gen();
- const auto shard0Chunk0 =
- generateChunkType(kNss,
- ChunkVersion(10, 1, epoch, boost::none /* timestamp */),
- kShard0.getName(),
- BSON("a" << 1),
- BSON("a" << 10));
- const auto shard1Chunk0 =
- generateChunkType(kNss,
- ChunkVersion(11, 2, epoch, boost::none /* timestamp */),
- kShard1.getName(),
- BSON("a" << 11),
- BSON("a" << 20));
+ const auto collEpoch = OID::gen();
+ const auto collTimestamp = boost::none;
+
+ const auto shard0Chunk0 = generateChunkType(kNss,
+ ChunkVersion(10, 1, collEpoch, collTimestamp),
+ kShard0.getName(),
+ BSON("a" << 1),
+ BSON("a" << 10));
+ const auto shard1Chunk0 = generateChunkType(kNss,
+ ChunkVersion(11, 2, collEpoch, collTimestamp),
+ kShard1.getName(),
+ BSON("a" << 11),
+ BSON("a" << 20));
const auto initialCollectionVersion = shard1Chunk0.getVersion();
setupCollection(kNss, kKeyPattern, {shard0Chunk0, shard1Chunk0});
@@ -294,10 +309,14 @@ TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest,
initialCollectionVersion.getTimestamp()};
ASSERT_TRUE(chunkMajorVersionWasBumpedAndOtherFieldsAreUnchanged(
- shard0Chunk0, getChunkDoc(operationContext(), shard0Chunk0.getMin()), targetChunkVersion));
+ shard0Chunk0,
+ getChunkDoc(operationContext(), shard0Chunk0.getMin(), collEpoch, collTimestamp),
+ targetChunkVersion));
ASSERT_TRUE(chunkMajorVersionWasBumpedAndOtherFieldsAreUnchanged(
- shard1Chunk0, getChunkDoc(operationContext(), shard1Chunk0.getMin()), targetChunkVersion));
+ shard1Chunk0,
+ getChunkDoc(operationContext(), shard1Chunk0.getMin(), collEpoch, collTimestamp),
+ targetChunkVersion));
ASSERT_EQ(numCalls, 5) << "transaction succeeded after unexpected number of attempts";
@@ -323,29 +342,33 @@ TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest,
initialCollectionVersion.getTimestamp()};
ASSERT_TRUE(chunkMajorVersionWasBumpedAndOtherFieldsAreUnchanged(
- shard0Chunk0, getChunkDoc(operationContext(), shard0Chunk0.getMin()), targetChunkVersion));
+ shard0Chunk0,
+ getChunkDoc(operationContext(), shard0Chunk0.getMin(), collEpoch, collTimestamp),
+ targetChunkVersion));
ASSERT_TRUE(chunkMajorVersionWasBumpedAndOtherFieldsAreUnchanged(
- shard1Chunk0, getChunkDoc(operationContext(), shard1Chunk0.getMin()), targetChunkVersion));
+ shard1Chunk0,
+ getChunkDoc(operationContext(), shard1Chunk0.getMin(), collEpoch, collTimestamp),
+ targetChunkVersion));
ASSERT_EQ(numCalls, 5) << "transaction succeeded after unexpected number of attempts";
}
TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest,
StopsRetryingOnPermanentServerErrors) {
- const auto epoch = OID::gen();
- const auto shard0Chunk0 =
- generateChunkType(kNss,
- ChunkVersion(10, 1, epoch, boost::none /* timestamp */),
- kShard0.getName(),
- BSON("a" << 1),
- BSON("a" << 10));
- const auto shard1Chunk0 =
- generateChunkType(kNss,
- ChunkVersion(11, 2, epoch, boost::none /* timestamp */),
- kShard1.getName(),
- BSON("a" << 11),
- BSON("a" << 20));
+ const auto collEpoch = OID::gen();
+ const auto collTimestamp = boost::none;
+
+ const auto shard0Chunk0 = generateChunkType(kNss,
+ ChunkVersion(10, 1, collEpoch, collTimestamp),
+ kShard0.getName(),
+ BSON("a" << 1),
+ BSON("a" << 10));
+ const auto shard1Chunk0 = generateChunkType(kNss,
+ ChunkVersion(11, 2, collEpoch, collTimestamp),
+ kShard1.getName(),
+ BSON("a" << 11),
+ BSON("a" << 20));
setupCollection(kNss, kKeyPattern, {shard0Chunk0, shard1Chunk0});
@@ -364,12 +387,12 @@ TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest,
ASSERT_TRUE(chunkMajorVersionWasBumpedAndOtherFieldsAreUnchanged(
shard0Chunk0,
- getChunkDoc(operationContext(), shard0Chunk0.getMin()),
+ getChunkDoc(operationContext(), shard0Chunk0.getMin(), collEpoch, collTimestamp),
shard0Chunk0.getVersion()));
ASSERT_TRUE(chunkMajorVersionWasBumpedAndOtherFieldsAreUnchanged(
shard1Chunk0,
- getChunkDoc(operationContext(), shard1Chunk0.getMin()),
+ getChunkDoc(operationContext(), shard1Chunk0.getMin(), collEpoch, collTimestamp),
shard1Chunk0.getVersion()));
ASSERT_EQ(numCalls, 1) << "transaction failed after unexpected number of attempts";
@@ -389,12 +412,12 @@ TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest,
ASSERT_TRUE(chunkMajorVersionWasBumpedAndOtherFieldsAreUnchanged(
shard0Chunk0,
- getChunkDoc(operationContext(), shard0Chunk0.getMin()),
+ getChunkDoc(operationContext(), shard0Chunk0.getMin(), collEpoch, collTimestamp),
shard0Chunk0.getVersion()));
ASSERT_TRUE(chunkMajorVersionWasBumpedAndOtherFieldsAreUnchanged(
shard1Chunk0,
- getChunkDoc(operationContext(), shard1Chunk0.getMin()),
+ getChunkDoc(operationContext(), shard1Chunk0.getMin(), collEpoch, collTimestamp),
shard1Chunk0.getVersion()));
ASSERT_EQ(numCalls, 1) << "transaction failed after unexpected number of attempts";
@@ -419,12 +442,12 @@ TEST_F(ShardingCatalogManagerBumpShardVersionsAndChangeMetadataTest,
ASSERT_TRUE(chunkMajorVersionWasBumpedAndOtherFieldsAreUnchanged(
shard0Chunk0,
- getChunkDoc(operationContext(), shard0Chunk0.getMin()),
+ getChunkDoc(operationContext(), shard0Chunk0.getMin(), collEpoch, collTimestamp),
shard0Chunk0.getVersion()));
ASSERT_TRUE(chunkMajorVersionWasBumpedAndOtherFieldsAreUnchanged(
shard1Chunk0,
- getChunkDoc(operationContext(), shard1Chunk0.getMin()),
+ getChunkDoc(operationContext(), shard1Chunk0.getMin(), collEpoch, collTimestamp),
shard1Chunk0.getVersion()));
ASSERT_EQ(numCalls, 1) << "transaction failed after unexpected number of attempts";