diff options
author | Pierlauro Sciarelli <pierlauro.sciarelli@mongodb.com> | 2020-12-01 11:18:18 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-12-01 11:52:38 +0000 |
commit | 4b8e802d58cdec6e340c6f8cace09224a64c9aa9 (patch) | |
tree | 50d4a723cc3376cc77e2785f95e181921c4d7fdf /src/mongo/db/s/config/initial_split_policy.cpp | |
parent | 3439c673b056f727c66da66b44aa79940e149c28 (diff) | |
download | mongo-4b8e802d58cdec6e340c6f8cace09224a64c9aa9.tar.gz |
SERVER-52762 Always persist ChunkType with the proper `collectionUUID`
Diffstat (limited to 'src/mongo/db/s/config/initial_split_policy.cpp')
-rw-r--r-- | src/mongo/db/s/config/initial_split_policy.cpp | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/src/mongo/db/s/config/initial_split_policy.cpp b/src/mongo/db/s/config/initial_split_policy.cpp index c7915293740..c7efc2019f7 100644 --- a/src/mongo/db/s/config/initial_split_policy.cpp +++ b/src/mongo/db/s/config/initial_split_policy.cpp @@ -49,13 +49,19 @@ namespace { * increments the given chunk version */ void appendChunk(const NamespaceString& nss, + const boost::optional<CollectionUUID> collectionUUID, const BSONObj& min, const BSONObj& max, ChunkVersion* version, const Timestamp& validAfter, const ShardId& shardId, std::vector<ChunkType>* chunks) { - chunks->emplace_back(nss, ChunkRange(min, max), *version, shardId); + if (collectionUUID) { + chunks->emplace_back(nss, *collectionUUID, ChunkRange(min, max), *version, shardId); + } else { + chunks->emplace_back(nss, ChunkRange(min, max), *version, shardId); + } + auto& chunk = chunks->back(); chunk.setHistory({ChunkHistory(validAfter, shardId)}); version->incMinor(); @@ -120,7 +126,8 @@ InitialSplitPolicy::ShardCollectionConfig createChunks(const ShardKeyPattern& sh ? params.primaryShardId : allShardIds[(i / numContiguousChunksPerShard) % allShardIds.size()]; - appendChunk(params.nss, min, max, &version, validAfter, shardId, &chunks); + appendChunk( + params.nss, params.collectionUUID, min, max, &version, validAfter, shardId, &chunks); } return {std::move(chunks), validAfter}; @@ -185,9 +192,8 @@ std::vector<BSONObj> InitialSplitPolicy::calculateHashedSplitPoints( } InitialSplitPolicy::ShardCollectionConfig InitialSplitPolicy::generateShardCollectionInitialChunks( - const NamespaceString& nss, + SplitPolicyParams params, const ShardKeyPattern& shardKeyPattern, - const ShardId& databasePrimaryShardId, const Timestamp& validAfter, const std::vector<BSONObj>& splitPoints, const std::vector<ShardId>& allShardIds, @@ -208,7 +214,7 @@ InitialSplitPolicy::ShardCollectionConfig InitialSplitPolicy::generateShardColle } return createChunks(shardKeyPattern, - {nss, databasePrimaryShardId}, + params, numContiguousChunksPerShard, allShardIds, finalSplitPoints, @@ -275,6 +281,7 @@ InitialSplitPolicy::ShardCollectionConfig SingleChunkOnPrimarySplitPolicy::creat const auto& keyPattern = shardKeyPattern.getKeyPattern(); const auto currentTime = VectorClock::get(opCtx)->getTime(); appendChunk(params.nss, + params.collectionUUID, keyPattern.globalMin(), keyPattern.globalMax(), &version, @@ -304,9 +311,8 @@ InitialSplitPolicy::ShardCollectionConfig UnoptimizedSplitPolicy::createFirstChu balancerConfig->getMaxChunkSizeBytes(), 0)); const auto currentTime = VectorClock::get(opCtx)->getTime(); - return generateShardCollectionInitialChunks(params.nss, + return generateShardCollectionInitialChunks(params, shardKeyPattern, - params.primaryShardId, currentTime.clusterTime().asTimestamp(), shardSelectedSplitPoints, shardIds, @@ -324,9 +330,8 @@ InitialSplitPolicy::ShardCollectionConfig SplitPointsBasedSplitPolicy::createFir shardRegistry->getAllShardIdsNoReload(&shardIds); const auto currentTime = VectorClock::get(opCtx)->getTime(); - return generateShardCollectionInitialChunks(params.nss, + return generateShardCollectionInitialChunks(params, shardKeyPattern, - params.primaryShardId, currentTime.clusterTime().asTimestamp(), _splitPoints, shardIds, @@ -375,6 +380,7 @@ InitialSplitPolicy::ShardCollectionConfig AbstractTagsBasedSplitPolicy::createFi // Create a chunk for the hole [lastChunkMax, tag.getMinKey) if (tag.getMinKey().woCompare(lastChunkMax) > 0) { appendChunk(params.nss, + params.collectionUUID, lastChunkMax, tag.getMinKey(), &version, @@ -418,7 +424,14 @@ InitialSplitPolicy::ShardCollectionConfig AbstractTagsBasedSplitPolicy::createFi const BSONObj max = (splitPointIdx == splitInfo.splitPoints.size()) ? tag.getMaxKey() : splitInfo.splitPoints[splitPointIdx]; - appendChunk(params.nss, min, max, &version, validAfter, targetShard, &chunks); + appendChunk(params.nss, + params.collectionUUID, + min, + max, + &version, + validAfter, + targetShard, + &chunks); } } lastChunkMax = tag.getMaxKey(); @@ -427,6 +440,7 @@ InitialSplitPolicy::ShardCollectionConfig AbstractTagsBasedSplitPolicy::createFi // Create a chunk for the hole [lastChunkMax, MaxKey] if (lastChunkMax.woCompare(keyPattern.globalMax()) < 0) { appendChunk(params.nss, + params.collectionUUID, lastChunkMax, keyPattern.globalMax(), &version, |