summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul J. Davis <paul.joseph.davis@gmail.com>2020-08-28 11:34:03 -0500
committerPaul J. Davis <paul.joseph.davis@gmail.com>2020-09-03 12:06:42 -0500
commit383f8b430a87a663a70c3c97e8812b3f2d0aae7b (patch)
treef0810a20fac02c79a4204ca5b685f3b32a534688
parentc66bb2853cb6d2d7be6d45c7db0fdb648d912e1a (diff)
downloadcouchdb-383f8b430a87a663a70c3c97e8812b3f2d0aae7b.tar.gz
Use ebtree caching API
-rw-r--r--src/couch_views/src/couch_views_fdb.erl30
1 files changed, 28 insertions, 2 deletions
diff --git a/src/couch_views/src/couch_views_fdb.erl b/src/couch_views/src/couch_views_fdb.erl
index 31c41e184..fe52853ba 100644
--- a/src/couch_views/src/couch_views_fdb.erl
+++ b/src/couch_views/src/couch_views_fdb.erl
@@ -376,7 +376,8 @@ open_id_tree(TxDb, Sig) ->
} = TxDb,
Prefix = id_tree_prefix(DbPrefix, Sig),
TreeOpts = [
- {persist_fun, fun persist_chunks/3}
+ {persist_fun, fun persist_chunks/3},
+ {cache_fun, create_cache_fun(id_tree)}
],
ebtree:open(Tx, Prefix, get_order(id_btree), TreeOpts).
@@ -393,7 +394,8 @@ open_view_tree(TxDb, Sig, Lang, View) ->
TreeOpts = [
{collate_fun, couch_views_util:collate_fun(View)},
{reduce_fun, make_reduce_fun(Lang, View)},
- {persist_fun, fun persist_chunks/3}
+ {persist_fun, fun persist_chunks/3},
+ {cache_fun, create_cache_fun({view, ViewId})}
],
View#mrview{
btree = ebtree:open(Tx, Prefix, get_order(view_btree), TreeOpts)
@@ -465,6 +467,30 @@ persist_chunks(Tx, clear, Key) ->
erlfdb:clear_range_startswith(Tx, Key).
+create_cache_fun(TreeId) ->
+ CacheTid = case get(TreeId) of
+ undefined ->
+ Tid = ets:new(?MODULE, [protected, set]),
+ put(TreeId, {ebtree_cache, Tid}),
+ Tid;
+ {ebtree_cache, Tid} ->
+ Tid
+ end,
+ fun
+ (set, [Id, Node]) ->
+ true = ets:insert_new(CacheTid, {Id, Node}),
+ ok;
+ (clear, Id) ->
+ ets:delete(CacheTid, Id),
+ ok;
+ (get, Id) ->
+ case ets:lookup(CacheTid, Id) of
+ [{Id, Node}] -> Node;
+ [] -> undefined
+ end
+ end.
+
+
to_map_opts(Options) ->
Dir = case lists:keyfind(dir, 1, Options) of
{dir, D} -> D;