diff options
author | Pierlauro Sciarelli <pierlauro.sciarelli@mongodb.com> | 2022-07-27 12:09:08 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-07-27 13:26:01 +0000 |
commit | 7438eb5acd7f99ad7e1a618eb13598f3e5e5cff4 (patch) | |
tree | 559ddb00061cf39c7b80eb2f3e421e0f56a053bf /src | |
parent | 921c4514352f572bc64b78f068d765206c12e301 (diff) | |
download | mongo-7438eb5acd7f99ad7e1a618eb13598f3e5e5cff4.tar.gz |
SERVER-68130 adjust autoSplitVector's estimatedAdditionalBytesPerItemInBSONArray
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/db/s/auto_split_vector.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/mongo/db/s/auto_split_vector.cpp b/src/mongo/db/s/auto_split_vector.cpp index a430d84593c..adbe4ca5818 100644 --- a/src/mongo/db/s/auto_split_vector.cpp +++ b/src/mongo/db/s/auto_split_vector.cpp @@ -49,7 +49,16 @@ namespace mongo { namespace { -constexpr int estimatedAdditionalBytesPerItemInBSONArray{2}; +/* + * 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 kMaxSplitPointsToReposition{3}; |