diff options
author | Nick Vatamaniuc <vatamane@apache.org> | 2019-08-29 11:03:26 -0400 |
---|---|---|
committer | Nick Vatamaniuc <nickva@users.noreply.github.com> | 2019-08-29 11:57:17 -0400 |
commit | 9919496f821d2c062fe8029a139f39b0768876a3 (patch) | |
tree | 57a0d06a87f72218542664abafc9cfc4ad5607de | |
parent | fddc7eec2debf5f3195095d73f86543bf88e6312 (diff) | |
download | couchdb-9919496f821d2c062fe8029a139f39b0768876a3.tar.gz |
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
-rw-r--r-- | src/fabric/src/fabric2_db_plugin.erl | 7 | ||||
-rw-r--r-- | src/fabric/test/fabric2_doc_crud_tests.erl | 24 |
2 files changed, 30 insertions, 1 deletions
diff --git a/src/fabric/src/fabric2_db_plugin.erl b/src/fabric/src/fabric2_db_plugin.erl index 41f9e9db6..cb824d7ab 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 c19c47421..3cb380827 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). |