You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2020/08/06 19:06:02 UTC

[couchdb] branch prototype/fdb-layer-ebtree-persist-fun created (now ee213c9)

This is an automated email from the ASF dual-hosted git repository.

rnewson pushed a change to branch prototype/fdb-layer-ebtree-persist-fun
in repository https://gitbox.apache.org/repos/asf/couchdb.git.


      at ee213c9  Pluggable persist_fun

This branch includes the following new commits:

     new ee213c9  Pluggable persist_fun

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[couchdb] 01/01: Pluggable persist_fun

Posted by rn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rnewson pushed a commit to branch prototype/fdb-layer-ebtree-persist-fun
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit ee213c9c995c2be9d103e32c0e2f9d01477a446e
Author: Robert Newson <rn...@apache.org>
AuthorDate: Thu Aug 6 20:04:58 2020 +0100

    Pluggable persist_fun
---
 src/ebtree/src/ebtree.erl | 29 +++++++++++++++++++++++------
 1 file changed, 23 insertions(+), 6 deletions(-)

diff --git a/src/ebtree/src/ebtree.erl b/src/ebtree/src/ebtree.erl
index c31f503..bacb42e 100644
--- a/src/ebtree/src/ebtree.erl
+++ b/src/ebtree/src/ebtree.erl
@@ -46,7 +46,8 @@
     max,
     collate_fun,
     reduce_fun,
-    encode_fun
+    encode_fun,
+    persist_fun
 }).
 
 -define(META, 0).
@@ -83,12 +84,14 @@ open(Db, Prefix, Order, Options) when is_binary(Prefix), is_integer(Order), Orde
     ReduceFun = proplists:get_value(reduce_fun, Options, fun reduce_noop/2),
     CollateFun = proplists:get_value(collate_fun, Options, fun collate_raw/2),
     EncodeFun = proplists:get_value(encode_fun, Options, fun encode_erlang/3),
+    PersistFun = proplists:get_value(persist_fun, Options, fun simple_persist/3),
 
     Tree = #tree{
         prefix = Prefix,
         reduce_fun = ReduceFun,
         collate_fun = CollateFun,
-        encode_fun = EncodeFun
+        encode_fun = EncodeFun,
+        persist_fun = PersistFun
     },
 
     erlfdb:transactional(Db, fun(Tx) ->
@@ -772,8 +775,8 @@ meta_key(Prefix, MetaKey) when is_binary(Prefix) ->
 
 get_node(Tx, #tree{} = Tree, Id) ->
     Key = node_key(Tree#tree.prefix, Id),
-    Future = erlfdb:get(Tx, Key),
-    Value = erlfdb:wait(Future),
+    #tree{persist_fun = PersistFun} = Tree,
+    Value = PersistFun(Tx, get, Key),
     decode_node(Tree, Id, Key, Value).
 
 
@@ -785,7 +788,8 @@ clear_nodes(Tx, #tree{} = Tree, Nodes) ->
 
 clear_node(Tx, #tree{} = Tree, #node{} = Node) ->
      Key = node_key(Tree#tree.prefix, Node#node.id),
-     erlfdb:clear(Tx, Key).
+     #tree{persist_fun = PersistFun} = Tree,
+     PersistFun(Tx, clear, Key).
 
 
 set_nodes(Tx, #tree{} = Tree, Nodes) ->
@@ -805,7 +809,8 @@ set_node(Tx, #tree{} = Tree, #node{} = Node) ->
     validate_node(Tree, Node),
     Key = node_key(Tree#tree.prefix, Node#node.id),
     Value = encode_node(Tree, Key, Node),
-    erlfdb:set(Tx, Key, Value).
+    #tree{persist_fun = PersistFun} = Tree,
+    PersistFun(Tx, set, [Key, Value]).
 
 
 node_key(Prefix, Id) when is_binary(Prefix), is_integer(Id) ->
@@ -1006,6 +1011,18 @@ encode_erlang(encode, _Key, Value) ->
 encode_erlang(decode, _Key, Value) ->
     binary_to_term(Value, [safe]).
 
+%% persist function
+
+simple_persist(Tx, set, [Key, Value]) ->
+    erlfdb:set(Tx, Key, Value);
+
+simple_persist(Tx, get, Key) ->
+    erlfdb:wait(erlfdb:get(Tx, Key));
+
+simple_persist(Tx, clear, Key) ->
+    erlfdb:clear(Tx, Key).
+
+
 %% private functions
 
 init_order(#tree{} = Tree, Order)