This is an automated email from the ASF dual-hosted git repository. davisp pushed a commit to branch prototype/fdb-layer-get-dbs-info in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 614acee1510fc9921cd1ab2a59640ed842bf3234 Author: Paul J. Davis <paul.joseph.da...@gmail.com> AuthorDate: Tue Dec 3 10:24:36 2019 -0600 Track a database level view size rollup This way we can expose the total view size for a database in the dbinfo JSON blob. --- src/couch_views/src/couch_views_fdb.erl | 17 +++++++++++++++-- src/fabric/src/fabric2_fdb.erl | 3 ++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/couch_views/src/couch_views_fdb.erl b/src/couch_views/src/couch_views_fdb.erl index 60ce300..6124672 100644 --- a/src/couch_views/src/couch_views_fdb.erl +++ b/src/couch_views/src/couch_views_fdb.erl @@ -366,8 +366,16 @@ update_kv_size(TxDb, Sig, ViewId, Increment) -> tx := Tx, db_prefix := DbPrefix } = TxDb, - Key = kv_size_key(DbPrefix, Sig, ViewId), - erlfdb:add(Tx, Key, Increment). + + % Track a view specific size for calls to + % GET /dbname/_design/doc/_info` + IdxKey = kv_size_key(DbPrefix, Sig, ViewId), + erlfdb:add(Tx, IdxKey, Increment), + + % Track a database level rollup for calls to + % GET /dbname + DbKey = db_kv_size_key(DbPrefix), + erlfdb:add(Tx, DbKey, Increment). seq_key(DbPrefix, Sig) -> @@ -385,6 +393,11 @@ kv_size_key(DbPrefix, Sig, ViewId) -> erlfdb_tuple:pack(Key, DbPrefix). +db_kv_size_key(DbPrefix) -> + Key = {?DB_STATS, <<"view_size">>}, + erlfdb_tuple:pack(Key, DbPrefix). + + id_idx_key(DbPrefix, Sig, DocId, ViewId) -> Key = {?DB_VIEWS, Sig, ?VIEW_ID_RANGE, DocId, ViewId}, erlfdb_tuple:pack(Key, DbPrefix). diff --git a/src/fabric/src/fabric2_fdb.erl b/src/fabric/src/fabric2_fdb.erl index fb2891b..643f839 100644 --- a/src/fabric/src/fabric2_fdb.erl +++ b/src/fabric/src/fabric2_fdb.erl @@ -171,7 +171,8 @@ create(#{} = Db0, Options) -> {?DB_STATS, <<"doc_del_count">>, ?uint2bin(0)}, {?DB_STATS, <<"doc_design_count">>, ?uint2bin(0)}, {?DB_STATS, <<"doc_local_count">>, ?uint2bin(0)}, - {?DB_STATS, <<"size">>, ?uint2bin(2)} + {?DB_STATS, <<"size">>, ?uint2bin(2)}, + {?DB_STATS, <<"view_size">>, ?uint2bin(0)} ], lists:foreach(fun({P, K, V}) -> Key = erlfdb_tuple:pack({P, K}, DbPrefix),