You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ji...@apache.org on 2018/12/13 06:35:43 UTC
[couchdb] branch before_doc_update updated: Update
before_doc_update/2 to before_doc_update/3
This is an automated email from the ASF dual-hosted git repository.
jiangphcn pushed a commit to branch before_doc_update
in repository https://gitbox.apache.org/repos/asf/couchdb.git
The following commit(s) were added to refs/heads/before_doc_update by this push:
new 01e0403 Update before_doc_update/2 to before_doc_update/3
01e0403 is described below
commit 01e0403bdacdee660fea357d1fcbe2ff83cd2fa4
Author: jiangph <ji...@cn.ibm.com>
AuthorDate: Thu Dec 13 14:34:47 2018 +0800
Update before_doc_update/2 to before_doc_update/3
- Pass UpdateType to before_doc_update/3
---
src/couch/src/couch_db.erl | 8 ++++----
src/couch/src/couch_db_plugin.erl | 12 +++++++-----
src/couch/src/couch_server.erl | 4 ++--
src/couch/src/couch_users_db.erl | 4 ++--
src/couch/test/couch_db_plugin_tests.erl | 17 ++++++++++-------
src/couch_replicator/src/couch_replicator_manager.erl | 4 ++--
src/fabric/src/fabric_doc_update.erl | 4 ++--
7 files changed, 29 insertions(+), 24 deletions(-)
diff --git a/src/couch/src/couch_db.erl b/src/couch/src/couch_db.erl
index 0ae164d..bc0a344 100644
--- a/src/couch/src/couch_db.erl
+++ b/src/couch/src/couch_db.erl
@@ -1148,7 +1148,7 @@ update_docs(Db, Docs0, Options, replicated_changes) ->
end,
{ok, DocBuckets, NonRepDocs, DocErrors}
- = before_docs_update(Db, Docs, PrepValidateFun),
+ = before_docs_update(Db, Docs, PrepValidateFun, replicated_changes),
DocBuckets2 = [[doc_flush_atts(Db, check_dup_atts(Doc))
|| Doc <- Bucket] || Bucket <- DocBuckets],
@@ -1166,7 +1166,7 @@ update_docs(Db, Docs0, Options, interactive_edit) ->
end,
{ok, DocBuckets, NonRepDocs, DocErrors}
- = before_docs_update(Db, Docs, PrepValidateFun),
+ = before_docs_update(Db, Docs, PrepValidateFun, interactive_edit),
if (AllOrNothing) and (DocErrors /= []) ->
RefErrorDict = dict:from_list([{doc_tag(Doc), Doc} || Doc <- Docs]),
@@ -1309,7 +1309,7 @@ prepare_doc_summaries(Db, BucketList) ->
Bucket) || Bucket <- BucketList].
-before_docs_update(#db{validate_doc_funs = VDFuns} = Db, Docs, PVFun) ->
+before_docs_update(#db{validate_doc_funs = VDFuns} = Db, Docs, PVFun, UpdateType) ->
increment_stat(Db, [couchdb, database_writes]),
% Separate _local docs from normal docs
@@ -1324,7 +1324,7 @@ before_docs_update(#db{validate_doc_funs = VDFuns} = Db, Docs, PVFun) ->
DocBuckets = lists:map(fun(Bucket) ->
lists:map(fun(Doc) ->
DocWithBody = couch_doc:with_ejson_body(Doc),
- couch_db_plugin:before_doc_update(Db, DocWithBody)
+ couch_db_plugin:before_doc_update(Db, DocWithBody, UpdateType)
end, Bucket)
end, BucketList),
diff --git a/src/couch/src/couch_db_plugin.erl b/src/couch/src/couch_db_plugin.erl
index e25866e..53640cc 100644
--- a/src/couch/src/couch_db_plugin.erl
+++ b/src/couch/src/couch_db_plugin.erl
@@ -14,7 +14,7 @@
-export([
validate_dbname/3,
- before_doc_update/2,
+ before_doc_update/3,
after_doc_read/2,
validate_docid/1,
check_is_admin/1,
@@ -34,11 +34,13 @@
validate_dbname(DbName, Normalized, Default) ->
maybe_handle(validate_dbname, [DbName, Normalized], Default).
-before_doc_update(Db, Doc0) ->
+before_doc_update(Db, Doc0, UpdateType) ->
Fun = couch_db:get_before_doc_update_fun(Db),
- case with_pipe(before_doc_update, [Doc0, Db]) of
- [Doc1, _Db] when is_function(Fun) -> Fun(Doc1, Db);
- [Doc1, _Db] -> Doc1
+ case with_pipe(before_doc_update, [Doc0, Db, UpdateType]) of
+ [Doc1, _Db, UpdateType] when is_function(Fun) ->
+ Fun(Doc1, Db, UpdateType);
+ [Doc1, _Db, _UpdateType] ->
+ Doc1
end.
after_doc_read(Db, Doc0) ->
diff --git a/src/couch/src/couch_server.erl b/src/couch/src/couch_server.erl
index c4b7bf1..d72c2a0 100644
--- a/src/couch/src/couch_server.erl
+++ b/src/couch/src/couch_server.erl
@@ -165,11 +165,11 @@ maybe_add_sys_db_callbacks(DbName, Options) ->
DbName == NodesDbName ->
[sys_db | Options];
IsReplicatorDb ->
- [{before_doc_update, fun couch_replicator_manager:before_doc_update/2},
+ [{before_doc_update, fun couch_replicator_manager:before_doc_update/3},
{after_doc_read, fun couch_replicator_manager:after_doc_read/2},
sys_db | Options];
IsUsersDb ->
- [{before_doc_update, fun couch_users_db:before_doc_update/2},
+ [{before_doc_update, fun couch_users_db:before_doc_update/3},
{after_doc_read, fun couch_users_db:after_doc_read/2},
sys_db | Options];
true ->
diff --git a/src/couch/src/couch_users_db.erl b/src/couch/src/couch_users_db.erl
index c7b41f1..e6e1c48 100644
--- a/src/couch/src/couch_users_db.erl
+++ b/src/couch/src/couch_users_db.erl
@@ -12,7 +12,7 @@
-module(couch_users_db).
--export([before_doc_update/2, after_doc_read/2, strip_non_public_fields/1]).
+-export([before_doc_update/3, after_doc_read/2, strip_non_public_fields/1]).
-include_lib("couch/include/couch_db.hrl").
@@ -39,7 +39,7 @@
% -> 404 // Not Found
% Else
% -> save_doc
-before_doc_update(Doc, Db) ->
+before_doc_update(Doc, Db, _UpdateType) ->
#user_ctx{name=Name} = couch_db:get_user_ctx(Db),
DocName = get_doc_name(Doc),
case (catch couch_db:check_is_admin(Db)) of
diff --git a/src/couch/test/couch_db_plugin_tests.erl b/src/couch/test/couch_db_plugin_tests.erl
index 52533fe..52bcf94 100644
--- a/src/couch/test/couch_db_plugin_tests.erl
+++ b/src/couch/test/couch_db_plugin_tests.erl
@@ -14,7 +14,7 @@
-export([
validate_dbname/2,
- before_doc_update/2,
+ before_doc_update/3,
after_doc_read/2,
validate_docid/1,
check_is_admin/1,
@@ -58,9 +58,9 @@ validate_dbname({false, _Db}, _) -> {decided, false};
validate_dbname({fail, _Db}, _) -> throw(validate_dbname);
validate_dbname({pass, _Db}, _) -> no_decision.
-before_doc_update({fail, _Doc}, _Db) -> throw(before_doc_update);
-before_doc_update({true, Doc}, Db) -> [{true, [before_doc_update|Doc]}, Db];
-before_doc_update({false, Doc}, Db) -> [{false, Doc}, Db].
+before_doc_update({fail, _Doc}, _Db, interactive_edit) -> throw(before_doc_update);
+before_doc_update({true, Doc}, Db, interactive_edit) -> [{true, [before_doc_update|Doc]}, Db];
+before_doc_update({false, Doc}, Db, interactive_edit) -> [{false, Doc}, Db].
after_doc_read({fail, _Doc}, _Db) -> throw(after_doc_read);
after_doc_read({true, Doc}, Db) -> [{true, [after_doc_read|Doc]}, Db];
@@ -134,17 +134,20 @@ validate_dbname_pass() ->
before_doc_update_match() ->
?assertMatch(
{true, [before_doc_update, doc]},
- couch_db_plugin:before_doc_update(fake_db(), {true, [doc]})).
+ couch_db_plugin:before_doc_update(
+ fake_db(), {true, [doc]}, interactive_edit)).
before_doc_update_no_match() ->
?assertMatch(
{false, [doc]},
- couch_db_plugin:before_doc_update(fake_db(), {false, [doc]})).
+ couch_db_plugin:before_doc_update(
+ fake_db(), {false, [doc]}, interactive_edit)).
before_doc_update_throw() ->
?assertThrow(
before_doc_update,
- couch_db_plugin:before_doc_update(fake_db(), {fail, [doc]})).
+ couch_db_plugin:before_doc_update(
+ fake_db(), {fail, [doc]}, interactive_edit)).
after_doc_read_match() ->
diff --git a/src/couch_replicator/src/couch_replicator_manager.erl b/src/couch_replicator/src/couch_replicator_manager.erl
index afccc0b..edd68d6 100644
--- a/src/couch_replicator/src/couch_replicator_manager.erl
+++ b/src/couch_replicator/src/couch_replicator_manager.erl
@@ -19,10 +19,10 @@
% NV: TODO: These functions were moved to couch_replicator_docs
% but it is still called from fabric_doc_update. Keep it here for now
% later, update fabric to call couch_replicator_docs instead
--export([before_doc_update/2, after_doc_read/2]).
+-export([before_doc_update/3, after_doc_read/2]).
-before_doc_update(Doc, Db) ->
+before_doc_update(Doc, Db, _UpdateType) ->
couch_replicator_docs:before_doc_update(Doc, Db).
after_doc_read(Doc, Db) ->
diff --git a/src/fabric/src/fabric_doc_update.erl b/src/fabric/src/fabric_doc_update.erl
index a4867f3..8833cde 100644
--- a/src/fabric/src/fabric_doc_update.erl
+++ b/src/fabric/src/fabric_doc_update.erl
@@ -106,11 +106,11 @@ before_doc_update(DbName, Docs, Opts) ->
{true, _} ->
%% fake db is expensive to create so we only do it if we have to
Db = fabric_util:fake_db(DbName, Opts),
- [couch_replicator_manager:before_doc_update(Doc, Db) || Doc <- Docs];
+ [couch_replicator_manager:before_doc_update(Doc, Db, []) || Doc <- Docs];
{_, true} ->
%% fake db is expensive to create so we only do it if we have to
Db = fabric_util:fake_db(DbName, Opts),
- [couch_users_db:before_doc_update(Doc, Db) || Doc <- Docs];
+ [couch_users_db:before_doc_update(Doc, Db, []) || Doc <- Docs];
_ ->
Docs
end.