summaryrefslogtreecommitdiff
path: root/src/mongo/s/chunk_manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/s/chunk_manager.cpp')
-rw-r--r--src/mongo/s/chunk_manager.cpp50
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);
}