You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2019/08/29 15:57:24 UTC
[couchdb] 01/02: Skip before_doc_update processing for local docs
This is an automated email from the ASF dual-hosted git repository.
vatamane pushed a commit to branch prototype/fdb-layer
in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 9919496f821d2c062fe8029a139f39b0768876a3
Author: Nick Vatamaniuc <va...@apache.org>
AuthorDate: Thu Aug 29 11:03:26 2019 -0400
Skip before_doc_update processing for local docs
This matches behavior on master:
https://github.com/apache/couchdb/blob/master/src/couch/src/couch_db.erl#L1373-L1387
---
src/fabric/src/fabric2_db_plugin.erl | 7 +++++++
src/fabric/test/fabric2_doc_crud_tests.erl | 24 +++++++++++++++++++++++-
2 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/src/fabric/src/fabric2_db_plugin.erl b/src/fabric/src/fabric2_db_plugin.erl
index 41f9e9d..cb824d7 100644
--- a/src/fabric/src/fabric2_db_plugin.erl
+++ b/src/fabric/src/fabric2_db_plugin.erl
@@ -21,6 +21,10 @@
is_valid_purge_client/2
]).
+
+-include_lib("couch/include/couch_db.hrl").
+
+
-define(SERVICE_ID, fabric2_db).
@@ -32,6 +36,9 @@ validate_dbname(DbName, Normalized, Default) ->
maybe_handle(validate_dbname, [DbName, Normalized], Default).
+before_doc_update(_, #doc{id = <<?LOCAL_DOC_PREFIX, _/binary>>} = Doc, _) ->
+ Doc;
+
before_doc_update(Db, Doc0, UpdateType) ->
Fun = fabric2_db:get_before_doc_update_fun(Db),
case with_pipe(before_doc_update, [Doc0, Db, UpdateType]) of
diff --git a/src/fabric/test/fabric2_doc_crud_tests.erl b/src/fabric/test/fabric2_doc_crud_tests.erl
index c19c474..3cb3808 100644
--- a/src/fabric/test/fabric2_doc_crud_tests.erl
+++ b/src/fabric/test/fabric2_doc_crud_tests.erl
@@ -60,7 +60,8 @@ doc_crud_test_() ->
fun delete_local_doc_basic/1,
fun recreate_local_doc/1,
fun create_local_doc_bad_rev/1,
- fun create_local_doc_random_rev/1
+ fun create_local_doc_random_rev/1,
+ fun before_doc_update_skips_local_docs/1
]}
}
}.
@@ -762,3 +763,24 @@ create_local_doc_random_rev({Db, _}) ->
?assertEqual({ok, {0, <<"2">>}}, fabric2_db:update_doc(Db, Doc5)),
{ok, Doc6} = fabric2_db:open_doc(Db, LDocId, []),
?assertEqual(Doc5#doc{revs = {0, [<<"2">>]}}, Doc6).
+
+
+before_doc_update_skips_local_docs({Db0, _}) ->
+
+ BduFun = fun(Doc, _, _) ->
+ Doc#doc{body = {[<<"bdu_was_here">>, true]}}
+ end,
+
+ Db = Db0#{before_doc_update := BduFun},
+
+ LDoc1 = #doc{id = <<"_local/ldoc1">>},
+ Doc1 = #doc{id = <<"doc1">>},
+
+ ?assertMatch({ok, {_, _}}, fabric2_db:update_doc(Db, LDoc1)),
+ ?assertMatch({ok, {_, _}}, fabric2_db:update_doc(Db, Doc1)),
+
+ {ok, LDoc2} = fabric2_db:open_doc(Db, LDoc1#doc.id),
+ {ok, Doc2} = fabric2_db:open_doc(Db, Doc1#doc.id),
+
+ ?assertEqual({[]}, LDoc2#doc.body),
+ ?assertEqual({[<<"bdu_was_here">>, true]}, Doc2#doc.body).