You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ja...@apache.org on 2019/07/20 10:53:00 UTC

[couchdb] branch access updated: fix revids

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

jan pushed a commit to branch access
in repository https://gitbox.apache.org/repos/asf/couchdb.git


The following commit(s) were added to refs/heads/access by this push:
     new 8e25108  fix revids
8e25108 is described below

commit 8e251081fdbd4b0f0bcf8fa043dc12899fc754bc
Author: Jan Lehnardt <ja...@apache.org>
AuthorDate: Sat Jul 20 12:52:51 2019 +0200

    fix revids
---
 src/couch/src/couch_db.erl  | 12 ++++--------
 src/couch/src/couch_doc.erl |  2 +-
 t.sh                        | 14 ++++++++------
 3 files changed, 13 insertions(+), 15 deletions(-)

diff --git a/src/couch/src/couch_db.erl b/src/couch/src/couch_db.erl
index 52975fd..fb11ee2 100644
--- a/src/couch/src/couch_db.erl
+++ b/src/couch/src/couch_db.erl
@@ -1143,7 +1143,7 @@ prep_and_validate_replicated_updates(Db, [Bucket|RestBuckets], [OldInfo|RestOldI
 
 
 
-new_revid(#doc{body=Body, revs={OldStart,OldRevs}, atts=Atts, deleted=Deleted}) ->
+new_revid(#doc{body=Body, revs={OldStart,OldRevs}, atts=Atts, deleted=Deleted}=Doc) ->
     DigestedAtts = lists:foldl(fun(Att, Acc) ->
         [N, T, M] = couch_att:fetch([name, type, md5], Att),
         case M == <<>> of
@@ -1157,7 +1157,8 @@ new_revid(#doc{body=Body, revs={OldStart,OldRevs}, atts=Atts, deleted=Deleted})
             ?l2b(integer_to_list(couch_util:rand32()));
         Atts2 ->
             OldRev = case OldRevs of [] -> 0; [OldRev0|_] -> OldRev0 end,
-            couch_hash:md5_hash(term_to_binary([Deleted, OldStart, OldRev, Body, Atts2], [{minor_version, 1}]))
+            H = couch_hash:md5_hash(term_to_binary([Deleted, OldStart, OldRev, Body, Atts2], [{minor_version, 1}])),
+            H
     end.
 
 new_revs([], OutBuckets, IdRevsAcc) ->
@@ -1420,7 +1421,7 @@ before_docs_update(#db{validate_doc_funs = VDFuns} = Db, Docs, PVFun, UpdateType
         (#doc{atts = Atts}) -> Atts /= []
     end,
 
-    case lists:any(ValidatePred, Docs2) of
+    case (VDFuns /= []) orelse lists:any(ValidatePred, Docs2) of
         true ->
             % lookup the doc by id and get the most recent
             Ids = [Id || [#doc{id = Id} | _] <- DocBuckets],
@@ -1732,7 +1733,6 @@ open_doc_revs_int(Db, IdRevs, Options) ->
         IdRevs, LookupResults).
 
 open_doc_int(Db, <<?LOCAL_DOC_PREFIX, _/binary>> = Id, Options) ->
-%    couch_log:info(">>> open_doc_int 1", []),
     case couch_db_engine:open_local_docs(Db, [Id]) of
     [#doc{} = Doc] ->
         apply_open_options(Db, {ok, Doc}, Options);
@@ -1740,22 +1740,18 @@ open_doc_int(Db, <<?LOCAL_DOC_PREFIX, _/binary>> = Id, Options) ->
         {not_found, missing}
     end;
 open_doc_int(Db, #doc_info{id=Id,revs=[RevInfo|_],access=Access}=DocInfo, Options) ->
-%   couch_log:info(">>> open_doc_int 2, DocInfo: ~p", [DocInfo]),
     #rev_info{deleted=IsDeleted,rev={Pos,RevId},body_sp=Bp} = RevInfo,
     Doc = make_doc(Db, Id, IsDeleted, Bp, {Pos,[RevId]}, Access),
     apply_open_options(Db,
        {ok, Doc#doc{meta=doc_meta_info(DocInfo, [], Options)}}, Options);
 open_doc_int(Db, #full_doc_info{id=Id,rev_tree=RevTree,access=Access}=FullDocInfo, Options) ->
-%   couch_log:info(">>> open_doc_int 3, FDI: ~p, Access: ~p", [FullDocInfo, Access]),
     #doc_info{revs=[#rev_info{deleted=IsDeleted,rev=Rev,body_sp=Bp}|_]} =
         DocInfo = couch_doc:to_doc_info(FullDocInfo),
     {[{_, RevPath}], []} = couch_key_tree:get(RevTree, [Rev]),
     Doc = make_doc(Db, Id, IsDeleted, Bp, RevPath, Access),
-%   couch_log:info(">>> ***** open_doc_int 3 made that doc: ~p", [Doc]),
     apply_open_options(Db,
         {ok, Doc#doc{meta=doc_meta_info(DocInfo, RevTree, Options)}}, Options);
 open_doc_int(Db, Id, Options) ->
-%    couch_log:info(">>> open_doc_int 4", []),
     case get_full_doc_info(Db, Id) of
     #full_doc_info{} = FullDocInfo ->
         open_doc_int(Db, FullDocInfo, Options);
diff --git a/src/couch/src/couch_doc.erl b/src/couch/src/couch_doc.erl
index e7d7095..76692d3 100644
--- a/src/couch/src/couch_doc.erl
+++ b/src/couch/src/couch_doc.erl
@@ -262,7 +262,7 @@ transfer_fields([{<<"_id">>, Id} | Rest], Doc, DbName) ->
 
 transfer_fields([{<<"_access">>, Access} = Field | Rest], Doc, DbName) ->
     % TODO: validate access as array strings, and optional arrays of strings
-    transfer_fields(Rest, Doc#doc{body=Rest,access=Access}, DbName);
+    transfer_fields(Rest, Doc#doc{access=Access}, DbName);
 
 transfer_fields([{<<"_rev">>, Rev} | Rest], #doc{revs={0, []}}=Doc, DbName) ->
     {Pos, RevId} = parse_rev(Rev),
diff --git a/t.sh b/t.sh
index 741a10a..d2c4d67 100755
--- a/t.sh
+++ b/t.sh
@@ -3,10 +3,12 @@ DB=http://a:a@127.0.0.1:15984 #
 XDB=http://x:x@127.0.0.1:15984
 YDB=http://y:y@127.0.0.1:15984
 
+curl -sX DELETE $DB/_users
+curl -sX PUT $DB/_users?q=1
 curl -sX PUT $DB/_users/org.couchdb.user:x -d @user.json > /dev/null #
 curl -sX PUT $DB/_users/org.couchdb.user:y -d @user2.json > /dev/null #
 
-# curl -sX DELETE $DB/_global_changes
+curl -sX DELETE $DB/_global_changes # reduce log noise
 curl -sX DELETE $DB/db
 curl -sX PUT $DB/db?q=1'&access=true'
 
@@ -14,11 +16,11 @@ curl -sX DELETE $DB/db2
 curl -sX PUT $DB/db2
 
 # ##############
-curl -sX PUT $DB/db/a -d '{"a":1,"_access":["x"]}'
-curl -s $DB/db/a
+curl -vX PUT $DB/db/a -d '{"a":1,"_access":["x"]}' -Hcontent-type:application/json
+# curl -s $DB/db/a
 
-curl -sX PUT $DB/db2/a -d '{"a":1,"_access":["x"]}'
-curl -s $DB/db2/a
+curl -vX PUT $DB/db2/a -d '{"b":1,"_access":["x"]}' -Hcontent-type:application/json
+# curl -s $DB/db2/a
 
 
 curl -s $XDB/db/a
@@ -29,7 +31,7 @@ curl -sX PUT $DB/db/c -d '{"c":3,"_access":["y"]}'
 curl -X PUT $XDB/db/c?rev="1-0865d643568aa9be6bcdc15d88b25912" -d '{"c":6,"_access":["y"]}'
 #
 curl -sX PUT $DB/db/d -d '{"d":4,"_access":["y"]}'
-#
+
 curl -sX DELETE $DB/db/a?rev="1-967a00dff5e02add41819138abb3284d"
 
 # echo