This is an automated email from the ASF dual-hosted git repository. rnewson pushed a commit to branch user-partitioned-dbs-6 in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 027c1f133ac63c0adcd44ef8f5493299dd725eac Author: Robert Newson <[email protected]> AuthorDate: Wed Sep 12 19:10:34 2018 +0100 WIP get_size_info by partition --- src/couch/src/couch_bt_engine.erl | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/couch/src/couch_bt_engine.erl b/src/couch/src/couch_bt_engine.erl index 6748e98..4ab6211 100644 --- a/src/couch/src/couch_bt_engine.erl +++ b/src/couch/src/couch_bt_engine.erl @@ -43,6 +43,7 @@ get_prop/2, get_prop/3, get_size_info/1, + get_size_info/2, get_update_seq/1, get_uuid/1, @@ -262,6 +263,37 @@ get_size_info(#st{} = St) -> ]. +get_size_info(#st{} = St, Partition) when is_binary(Partition) -> + StartKey = <<Partition/binary, ":">>, + EndKey = <<Partition/binary, ";">>, + Fun = fun(_Key, {FDIs, SIs}, Acc) -> + Sizes = [sizes(S) || S <- FDIs ++ SIs], + {ok, sum_sizes([Acc | Sizes])} + end, + Options = [{start_key, StartKey}, {end_key, EndKey}, {key_group_level, 0}], + {ok, {ActiveSize, ExternalSize}} = couch_btree:fold_reduce( + St#st.id_tree, Fun, {0, 0}, Options), + [ + {active, ActiveSize}, + {external, ExternalSize} + ]. + +sizes(#full_doc_info{} = FDI) -> + sizes(FDI#full_doc_info.sizes); +sizes({_DocCount, _DelDocCount, #size_info{} = SI}) -> + sizes(SI); +sizes(#size_info{} = SI) -> + #size_info{active = A, external = E} = SI, + {A, E}. + +sum_sizes(Sizes) -> + sum_sizes(Sizes, {0, 0}). + +sum_sizes([], Acc) -> + Acc; +sum_sizes([{Active, External} | Rest], {ActiveAcc, ExternalAcc}) -> + sum_sizes(Rest, {Active + ActiveAcc, External + ExternalAcc}). + get_security(#st{header = Header} = St) -> case couch_bt_engine_header:get(Header, security_ptr) of undefined ->
