diff options
Diffstat (limited to 'src/mongo/db/s/auto_split_vector.cpp')
| -rw-r--r-- | src/mongo/db/s/auto_split_vector.cpp | 19 |
1 files changed, 4 insertions, 15 deletions
diff --git a/src/mongo/db/s/auto_split_vector.cpp b/src/mongo/db/s/auto_split_vector.cpp index 2dcb509f156..8be8c5dde8b 100644 --- a/src/mongo/db/s/auto_split_vector.cpp +++ b/src/mongo/db/s/auto_split_vector.cpp @@ -50,16 +50,7 @@ namespace mongo { namespace { -/* - * BSON arrays are serialized as BSON objects with the index of each element as a string key: for - * example, the array ["a","b","c"] is going to be serialized as {"0":"a","1":"b","2":"c"}. The - * minimum size for a BSON object is `BSONObj::kMinBSONLength`. - * - * Given that the `vector<BSONObj>` returned by `autoSplitVector` can't be greater than 16MB when - * serialized, pessimistically assume that each key occupies the highest possible number of bytes. - */ -const int estimatedAdditionalBytesPerItemInBSONArray{ - (int)std::to_string(BSONObjMaxUserSize / BSONObj::kMinBSONLength).length()}; +constexpr int estimatedAdditionalBytesPerItemInBSONArray{2}; constexpr int kMaxSplitPointsToReposition{3}; @@ -94,11 +85,9 @@ const std::tuple<BSONObj, BSONObj> getMinMaxExtendedBounds(const ShardKeyIndex& /* * Reshuffle fields according to the shard key pattern. */ -auto orderShardKeyFields(const BSONObj& keyPattern, const BSONObj& key) { - // Note: It is correct to hydrate the indexKey 'key' with 'keyPattern', because the index key - // pattern is a prefix of 'keyPattern'. - return dotted_path_support::extractElementsBasedOnTemplate(key.replaceFieldNames(keyPattern), - keyPattern); +auto orderShardKeyFields(const BSONObj& keyPattern, BSONObj& key) { + return dotted_path_support::extractElementsBasedOnTemplate( + prettyKey(keyPattern, key.getOwned()), keyPattern); } } // namespace |
