diff options
Diffstat (limited to 'src/mongo/s/chunk_manager.cpp')
-rw-r--r-- | src/mongo/s/chunk_manager.cpp | 50 |
1 files changed, 17 insertions, 33 deletions
diff --git a/src/mongo/s/chunk_manager.cpp b/src/mongo/s/chunk_manager.cpp index 6d4586d99a8..8a9b7263cad 100644 --- a/src/mongo/s/chunk_manager.cpp +++ b/src/mongo/s/chunk_manager.cpp @@ -67,16 +67,6 @@ void checkAllElementsAreOfType(BSONType type, const BSONObj& o) { allElementsAreOfType(type, o)); } -std::string extractKeyStringInternal(const BSONObj& shardKeyValue, Ordering ordering) { - BSONObjBuilder strippedKeyValue; - for (const auto& elem : shardKeyValue) { - strippedKeyValue.appendAs(elem, ""_sd); - } - - KeyString::Builder ks(KeyString::Version::V1, strippedKeyValue.done(), ordering); - return {ks.getBuffer(), ks.getSize()}; -} - } // namespace ShardVersionMap ChunkMap::constructShardVersionMap(const OID& epoch) const { @@ -123,22 +113,18 @@ ShardVersionMap ChunkMap::constructShardVersionMap(const OID& epoch) const { if (lastMax && !SimpleBSONObjComparator::kInstance.evaluate(*lastMax == rangeMin)) { if (SimpleBSONObjComparator::kInstance.evaluate(*lastMax < rangeMin)) uasserted(ErrorCodes::ConflictingOperationInProgress, - str::stream() - << "Gap exists in the routing table between chunks " - << _chunkMap - .at(extractKeyStringInternal(*lastMax, _shardKeyOrdering)) - ->getRange() - .toString() - << " and " << rangeLast->second->getRange().toString()); + str::stream() << "Gap exists in the routing table between chunks " + << _chunkMap.at(ShardKeyPattern::toKeyString(*lastMax)) + ->getRange() + .toString() + << " and " << rangeLast->second->getRange().toString()); else uasserted(ErrorCodes::ConflictingOperationInProgress, - str::stream() - << "Overlap exists in the routing table between chunks " - << _chunkMap - .at(extractKeyStringInternal(*lastMax, _shardKeyOrdering)) - ->getRange() - .toString() - << " and " << rangeLast->second->getRange().toString()); + str::stream() << "Overlap exists in the routing table between chunks " + << _chunkMap.at(ShardKeyPattern::toKeyString(*lastMax)) + ->getRange() + .toString() + << " and " << rangeLast->second->getRange().toString()); } if (!firstMin) @@ -164,8 +150,8 @@ ShardVersionMap ChunkMap::constructShardVersionMap(const OID& epoch) const { } void ChunkMap::addChunk(const ChunkType& chunk) { - const auto chunkMinKeyString = extractKeyStringInternal(chunk.getMin(), _shardKeyOrdering); - const auto chunkMaxKeyString = extractKeyStringInternal(chunk.getMax(), _shardKeyOrdering); + const auto chunkMinKeyString = ShardKeyPattern::toKeyString(chunk.getMin()); + const auto chunkMaxKeyString = ShardKeyPattern::toKeyString(chunk.getMax()); // Returns the first chunk with a max key that is > min - implies that the chunk overlaps // min @@ -215,16 +201,15 @@ std::shared_ptr<ChunkInfo> ChunkMap::findIntersectingChunk(const BSONObj& shardK ChunkMap::ChunkInfoMap::const_iterator ChunkMap::_findIntersectingChunk( const BSONObj& shardKey) const { - return _chunkMap.upper_bound(extractKeyStringInternal(shardKey, _shardKeyOrdering)); + return _chunkMap.upper_bound(ShardKeyPattern::toKeyString(shardKey)); } std::pair<ChunkMap::ChunkInfoMap::const_iterator, ChunkMap::ChunkInfoMap::const_iterator> ChunkMap::_overlappingBounds(const BSONObj& min, const BSONObj& max, bool isMaxInclusive) const { - const auto itMin = _chunkMap.upper_bound(extractKeyStringInternal(min, _shardKeyOrdering)); + const auto itMin = _chunkMap.upper_bound(ShardKeyPattern::toKeyString(min)); const auto itMax = [&]() { - auto it = isMaxInclusive - ? _chunkMap.upper_bound(extractKeyStringInternal(max, _shardKeyOrdering)) - : _chunkMap.lower_bound(extractKeyStringInternal(max, _shardKeyOrdering)); + auto it = isMaxInclusive ? _chunkMap.upper_bound(ShardKeyPattern::toKeyString(max)) + : _chunkMap.lower_bound(ShardKeyPattern::toKeyString(max)); return it == _chunkMap.end() ? it : ++it; }(); @@ -641,13 +626,12 @@ std::shared_ptr<RoutingTableHistory> RoutingTableHistory::makeNew( bool unique, OID epoch, const std::vector<ChunkType>& chunks) { - auto ordering = Ordering::make(shardKeyPattern.toBSON()); return RoutingTableHistory(std::move(nss), std::move(uuid), std::move(shardKeyPattern), std::move(defaultCollator), std::move(unique), - {std::move(ordering)}, + ChunkMap{}, {0, 0, epoch}) .makeUpdated(chunks); } |