summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Avdey <eiri@eiri.ca>2019-03-29 08:44:52 -0300
committerGitHub <noreply@github.com>2019-03-29 08:44:52 -0300
commit3227e61ebbe6ee15d122036ec85b57ebffeb062d (patch)
treeef7ff5f383368bff81cee199edfb449297484030
parent9d7a56ea59a8d787249defc00666eb471395a7ad (diff)
parent4f31cdce5dd078e7699739fdc65979c8cd935f1e (diff)
downloadcouchdb-3227e61ebbe6ee15d122036ec85b57ebffeb062d.tar.gz
Merge pull request #1983 from cloudant/fix-external-docs-size
More precise calculation of external docs' size
-rw-r--r--src/couch/src/couch_bt_engine_compactor.erl12
-rw-r--r--src/couch/src/couch_db.erl2
2 files changed, 7 insertions, 7 deletions
diff --git a/src/couch/src/couch_bt_engine_compactor.erl b/src/couch/src/couch_bt_engine_compactor.erl
index 737f77245..0b3fb22ef 100644
--- a/src/couch/src/couch_bt_engine_compactor.erl
+++ b/src/couch/src/couch_bt_engine_compactor.erl
@@ -297,13 +297,13 @@ copy_docs(St, #st{} = NewSt, MixedInfos, Retry) ->
{NewRevTree, FinalAcc} = couch_key_tree:mapfold(fun
({RevPos, RevId}, #leaf{ptr=Sp}=Leaf, leaf, SizesAcc) ->
{Body, AttInfos} = copy_doc_attachments(St, Sp, NewSt),
- % In the future, we should figure out how to do this for
- % upgrade purposes.
- ExternalSize = case is_binary(Body) of
- true ->
+ #size_info{external = OldExternalSize} = Leaf#leaf.sizes,
+ ExternalSize = case OldExternalSize of
+ 0 when is_binary(Body) ->
couch_compress:uncompressed_size(Body);
- false ->
- ?term_size(Body)
+ 0 ->
+ couch_ejson_size:encoded_size(Body);
+ N -> N
end,
Doc0 = #doc{
id = Info#full_doc_info.id,
diff --git a/src/couch/src/couch_db.erl b/src/couch/src/couch_db.erl
index bdb9dfeca..a40f1131e 100644
--- a/src/couch/src/couch_db.erl
+++ b/src/couch/src/couch_db.erl
@@ -1359,7 +1359,7 @@ prepare_doc_summaries(Db, BucketList) ->
meta = [
{size_info, SizeInfo},
{atts_stream, AttsStream},
- {ejson_size, ?term_size(Body)}
+ {ejson_size, couch_ejson_size:encoded_size(Body)}
] ++ Doc0#doc.meta
},
couch_db_engine:serialize_doc(Db, Doc1)