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/19 15:56:56 UTC

[couchdb] branch access updated (dd94d4c -> 535bbeb)

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

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


    from dd94d4c  test(access): add some basic tests for access
     new 8d593d1  fix access CRUD for reads
     new 535bbeb  wip: cleanup debug logs, start fixing tests

The 2 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.


Summary of changes:
 rel/overlay/etc/default.ini                   |  2 +-
 src/chttpd/src/chttpd_db.erl                  |  2 +-
 src/couch/src/couch_bt_engine.erl             | 25 +++++---
 src/couch/src/couch_btree.erl                 |  7 +--
 src/couch/src/couch_db.erl                    | 26 +++++---
 src/couch/src/couch_db_updater.erl            |  4 +-
 src/couch/src/couch_doc.erl                   |  9 +--
 src/couch/test/couchdb_access_tests.erl       | 88 +++++++++++++--------------
 src/couch_mrview/src/couch_mrview.erl         |  2 -
 src/couch_mrview/src/couch_mrview_updater.erl |  2 -
 t.sh                                          | 45 +++++++-------
 user.json                                     |  2 +-
 12 files changed, 110 insertions(+), 104 deletions(-)


[couchdb] 01/02: fix access CRUD for reads

Posted by ja...@apache.org.
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

commit 8d593d1cc7d879cea9c432de35879f9d2367b9c6
Author: Jan Lehnardt <ja...@apache.org>
AuthorDate: Fri Jul 19 17:31:51 2019 +0200

    fix access CRUD for reads
---
 rel/overlay/etc/default.ini        |  2 +-
 src/chttpd/src/chttpd_db.erl       |  4 +++-
 src/couch/src/couch_bt_engine.erl  | 42 +++++++++++++++++++++++++++--------
 src/couch/src/couch_btree.erl      |  7 ++----
 src/couch/src/couch_db.erl         | 29 +++++++++++++++++-------
 src/couch/src/couch_db_updater.erl |  4 ++--
 src/couch/src/couch_doc.erl        |  6 +++--
 t.sh                               | 45 +++++++++++++++++++-------------------
 user.json                          |  2 +-
 9 files changed, 89 insertions(+), 52 deletions(-)

diff --git a/rel/overlay/etc/default.ini b/rel/overlay/etc/default.ini
index 3e2e877..e8df095 100644
--- a/rel/overlay/etc/default.ini
+++ b/rel/overlay/etc/default.ini
@@ -505,7 +505,7 @@ _default = [{db_fragmentation, "70%"}, {view_fragmentation, "60%"}]
 ;  emergency, emerg
 ;  none
 ;
-level = info
+level = debug
 ;
 ; Set the maximum log message length in bytes that will be
 ; passed through the writer
diff --git a/src/chttpd/src/chttpd_db.erl b/src/chttpd/src/chttpd_db.erl
index 53cede4..48cef48 100644
--- a/src/chttpd/src/chttpd_db.erl
+++ b/src/chttpd/src/chttpd_db.erl
@@ -1269,8 +1269,10 @@ couch_doc_open(Db, DocId, Rev, Options0) ->
     nil -> % open most recent rev
         case fabric:open_doc(Db, DocId, Options) of
         {ok, Doc} ->
-            Doc;
+             couch_log:info("~n################ chttpd couch_doc_open: Doc: ~p", [Doc]),
+             Doc;
          Error ->
+             couch_log:info("~n################ chttpd couch_doc_open ERROR: Error: ~p", [Error]),
              throw(Error)
          end;
     _ -> % open a specific rev (deletions come back as stubs)
diff --git a/src/couch/src/couch_bt_engine.erl b/src/couch/src/couch_bt_engine.erl
index b9cd33d..287c84e 100644
--- a/src/couch/src/couch_bt_engine.erl
+++ b/src/couch/src/couch_bt_engine.erl
@@ -409,7 +409,7 @@ write_doc_infos(#st{} = St, Pairs, LocalDocs) ->
     end, {[], [], []}, Pairs),
 
     {Add, RemIds, RemSeqs} = FinalAcc,
-    couch_log:info("~n~nadding these to by-id and by-seq~p~n~n", [Add]),
+    couch_log:info("~n > > > > > write path: ENGINE:write_doc_infos: FinalAcc:~p ~n", [FinalAcc]),
     {ok, IdTree2} = couch_btree:add_remove(IdTree, Add, RemIds),
     {ok, SeqTree2} = couch_btree:add_remove(SeqTree, Add, RemSeqs),
 
@@ -595,22 +595,25 @@ id_tree_split(#full_doc_info{}=Info) ->
         update_seq = Seq,
         deleted = Deleted,
         sizes = SizeInfo,
-        rev_tree = Tree
+        rev_tree = Tree,
+        access = Access
     } = Info,
-    {Id, {Seq, ?b2i(Deleted), split_sizes(SizeInfo), disk_tree(Tree)}}.
+    {Id, {Seq, ?b2i(Deleted), split_sizes(SizeInfo), disk_tree(Tree), split_access(Access)}}.
 
 
 id_tree_join(Id, {HighSeq, Deleted, DiskTree}) ->
     % Handle old formats before data_size was added
     id_tree_join(Id, {HighSeq, Deleted, #size_info{}, DiskTree});
-
 id_tree_join(Id, {HighSeq, Deleted, Sizes, DiskTree}) ->
+    id_tree_join(Id, {HighSeq, Deleted, Sizes, DiskTree, []});
+id_tree_join(Id, {HighSeq, Deleted, Sizes, DiskTree, Access}) ->
     #full_doc_info{
         id = Id,
         update_seq = HighSeq,
         deleted = ?i2b(Deleted),
         sizes = couch_db_updater:upgrade_sizes(Sizes),
-        rev_tree = rev_tree(DiskTree)
+        rev_tree = rev_tree(DiskTree),
+        access = join_access(Access)
     }.
 
 
@@ -641,21 +644,24 @@ seq_tree_split(#full_doc_info{}=Info) ->
         update_seq = Seq,
         deleted = Del,
         sizes = SizeInfo,
-        rev_tree = Tree
+        rev_tree = Tree,
+        access = Access
     } = Info,
-    {Seq, {Id, ?b2i(Del), split_sizes(SizeInfo), disk_tree(Tree)}}.
+    {Seq, {Id, ?b2i(Del), split_sizes(SizeInfo), disk_tree(Tree), split_access(Access)}}.
 
 
 seq_tree_join(Seq, {Id, Del, DiskTree}) when is_integer(Del) ->
     seq_tree_join(Seq, {Id, Del, {0, 0}, DiskTree});
-
 seq_tree_join(Seq, {Id, Del, Sizes, DiskTree}) when is_integer(Del) ->
+    seq_tree_join(Seq, {Id, Del, Sizes, DiskTree, []});
+seq_tree_join(Seq, {Id, Del, Sizes, DiskTree, Access}) when is_integer(Del) ->
     #full_doc_info{
         id = Id,
         update_seq = Seq,
         deleted = ?i2b(Del),
         sizes = join_sizes(Sizes),
-        rev_tree = rev_tree(DiskTree)
+        rev_tree = rev_tree(DiskTree),
+        access = join_access(Access)
     };
 
 seq_tree_join(KeySeq, {Id, RevInfos, DeletedRevInfos}) ->
@@ -680,6 +686,24 @@ seq_tree_reduce(reduce, DocInfos) ->
 seq_tree_reduce(rereduce, Reds) ->
     lists:sum(Reds).
 
+join_access(Access) -> Access.
+split_access(Access) -> Access.
+
+% split_access([]) ->
+%     [];
+% split_access(Access) when is_list(Access) ->
+%     term_to_binary(Access);
+% split_access(Access) ->
+%     couch_log:info("~n~n &&&&&&&& split IN VAL ID ACC ESS: ~p~n~n", [Access]),
+%     throw(invalid_access_term_in_fdi).
+%
+% join_access([]) ->
+%     [];
+% join_access(Access) when is_binary(Access) ->
+%     binary_to_term(Access);
+% join_access(Access) ->
+%     couch_log:info("~n~n &&&&&&&& JOIN IN VAL ID ACC ESS: ~p~n~n", [Access]),
+%     throw(invalid_access_term_in_fdi).
 
 local_tree_split(#doc{revs = {0, [Rev]}} = Doc) when is_binary(Rev) ->
     #doc{
diff --git a/src/couch/src/couch_btree.erl b/src/couch/src/couch_btree.erl
index 031ce68..f45d9e7 100644
--- a/src/couch/src/couch_btree.erl
+++ b/src/couch/src/couch_btree.erl
@@ -35,8 +35,6 @@ assemble(#btree{assemble_kv=Assemble}, Key, Value) ->
 less(#btree{less=undefined}, A, B) ->
     A < B;
 less(#btree{less=Less}, A, B) ->
-    couch_log:info("~n A:~p~n", [A]),
-    couch_log:info("~n B:~p~n", [B]),
     Less(A, B).
 
 % pass in 'nil' for State if a new Btree.
@@ -107,9 +105,9 @@ full_reduce_with_options(Bt, Options0) ->
     Options = Options0 ++ [
         {end_key, EndKey}
     ],
-    couch_log:info("~n Options:~p~n", [Options]),
+    % couch_log:info("~n Options:~p~n", [Options]),
     R = fold_reduce(Bt, CountFun, 0, Options),
-    couch_log:info("~n~n R: ~p ~n", [R]),
+    % couch_log:info("~n~n R: ~p ~n", [R]),
     R.
 
 full_reduce(#btree{root=nil,reduce=Reduce}) ->
@@ -117,7 +115,6 @@ full_reduce(#btree{root=nil,reduce=Reduce}) ->
 full_reduce(#btree{root=Root}) ->
     {ok, element(2, Root)}.
 
-
 size(#btree{root = nil}) ->
     0;
 size(#btree{root = {_P, _Red}}) ->
diff --git a/src/couch/src/couch_db.erl b/src/couch/src/couch_db.erl
index 37fdee9..72a9d8f 100644
--- a/src/couch/src/couch_db.erl
+++ b/src/couch/src/couch_db.erl
@@ -280,6 +280,7 @@ open_doc(Db, IdOrDocInfo) ->
     open_doc(Db, IdOrDocInfo, []).
 
 open_doc(Db, Id, Options) ->
+    couch_log:info("~n$$$$$$$$$$$$$$$$$$$$$: open_doc Id: ~p~n", [Id]),
     increment_stat(Db, [couchdb, database_reads]),
     case open_doc_int(Db, Id, Options) of
     {ok, #doc{deleted=true}=Doc} ->
@@ -290,7 +291,8 @@ open_doc(Db, Id, Options) ->
             {not_found, deleted}
         end;
     Else ->
-        apply_open_options(Db, Else,Options)
+        couch_log:info("~n$$$$$$$$$$$$$$$$$$$$$: opened_doc Else : ~p~n", [Else ]),
+        apply_open_options(Db, Else, Options)
     end.
 
 apply_open_options(Db, {ok, Doc}, Options) ->
@@ -732,7 +734,7 @@ validate_access1(_) -> throw({forbidden, <<"can't touch this">>}).
 
 
 check_access(Db, #doc{access=Access}=Doc) ->
-    couch_log:info("check_access: ~n~n~p ~p~n~n", [Db, Doc]),
+    couch_log:info("check_access: ~n~n~p ~p~n~n", [Db#db.name, Doc]),
     check_access(Db, Access);
 check_access(Db, Access) ->
     #user_ctx{
@@ -1733,6 +1735,7 @@ 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,18 +1743,22 @@ open_doc_int(Db, <<?LOCAL_DOC_PREFIX, _/binary>> = Id, Options) ->
         {not_found, missing}
     end;
 open_doc_int(Db, #doc_info{id=Id,revs=[RevInfo|_]}=DocInfo, Options) ->
+    couch_log:info(">>> open_doc_int 2", []),
     #rev_info{deleted=IsDeleted,rev={Pos,RevId},body_sp=Bp} = RevInfo,
     Doc = make_doc(Db, Id, IsDeleted, Bp, {Pos,[RevId]}),
     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}=FullDocInfo, 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),
+    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);
@@ -1799,22 +1806,28 @@ doc_meta_info(#doc_info{high_seq=Seq,revs=[#rev_info{rev=Rev}|RestInfo]}, RevTre
     true -> [{local_seq, Seq}]
     end.
 
+make_doc(Db, Id, Deleted, Bp, RevisionPath) ->
+    make_doc(Db, Id, Deleted, Bp, RevisionPath, []);
+make_doc(Db, Id, Deleted, Bp, {Pos, Revs}) ->
+    make_doc(Db, Id, Deleted, Bp, {Pos, Revs}, []).
 
-make_doc(_Db, Id, Deleted, nil = _Bp, RevisionPath) ->
+make_doc(_Db, Id, Deleted, nil = _Bp, RevisionPath, Access) ->
     #doc{
         id = Id,
         revs = RevisionPath,
         body = [],
         atts = [],
-        deleted = Deleted
+        deleted = Deleted,
+        access = Access
     };
-make_doc(#db{} = Db, Id, Deleted, Bp, {Pos, Revs}) ->
+make_doc(#db{} = Db, Id, Deleted, Bp, {Pos, Revs}, Access) ->
     RevsLimit = get_revs_limit(Db),
     Doc0 = couch_db_engine:read_doc_body(Db, #doc{
         id = Id,
         revs = {Pos, lists:sublist(Revs, 1, RevsLimit)},
         body = Bp,
-        deleted = Deleted
+        deleted = Deleted,
+        access = Access
     }),
 
     Doc1 = case Doc0#doc.atts of
diff --git a/src/couch/src/couch_db_updater.erl b/src/couch/src/couch_db_updater.erl
index 4546be5..f5ebc53 100644
--- a/src/couch/src/couch_db_updater.erl
+++ b/src/couch/src/couch_db_updater.erl
@@ -255,6 +255,7 @@ code_change(_OldVsn, State, _Extra) ->
     {ok, State}.
 
 sort_and_tag_grouped_docs(Client, GroupedDocs) ->
+    couch_log:info("~nBERTBERTBERTBERTBERTBERTBERTBERTBERT: GroupedDocs: ~p", [GroupedDocs]),
     % These groups should already be sorted but sometimes clients misbehave.
     % The merge_updates function will fail and the database can end up with
     % duplicate documents if the incoming groups are not sorted, so as a sanity
@@ -311,7 +312,7 @@ init_db(DbName, FilePath, EngineState, Options) ->
     ADR = couch_util:get_value(after_doc_read, Options, nil),
     Access = couch_util:get_value(access, Options, false),
     CleanedOpts = [Opt || Opt <- Options, Opt /= create],
-    
+
     InitDb = #db{
         name = DbName,
         filepath = FilePath,
@@ -607,7 +608,6 @@ update_docs_int(Db, DocsList, LocalDocs, MergeConflicts, FullCommit) ->
     {ok, IndexFDIs} = flush_trees(Db, NewFullDocInfos, []),
     Pairs = pair_write_info(OldDocLookups, IndexFDIs),
     LocalDocs2 = update_local_doc_revs(LocalDocs),
-
     {ok, Db1} = couch_db_engine:write_doc_infos(Db, Pairs, LocalDocs2),
 
     WriteCount = length(IndexFDIs),
diff --git a/src/couch/src/couch_doc.erl b/src/couch/src/couch_doc.erl
index 500a5c7..0d9d0cb 100644
--- a/src/couch/src/couch_doc.erl
+++ b/src/couch/src/couch_doc.erl
@@ -57,7 +57,7 @@ to_json_body(true, {Body}, Access0) ->
     Body ++ [{<<"_deleted">>, true}] ++ [{<<"_access">>, {Access}}];
 to_json_body(false, {Body}, Access0) ->
     Access = reduce_access(Access0),
-    Body ++ [{<<"_access">>, {Access}}].
+    Body ++ [{<<"_access">>, Access}].
 
 to_json_revisions(Options, Start, RevIds0) ->
     RevIds = case proplists:get_value(revs, Options) of
@@ -127,6 +127,8 @@ to_json_obj(Doc, Options) ->
 
 doc_to_json_obj(#doc{id=Id,deleted=Del,body=Body,revs={Start, RevIds},
             meta=Meta,access=Access}=Doc,Options)->
+    couch_log:info("~n~n ___________________doc_to_json_obj Access: ~p ~n~n", [Access]),
+            
     R={[{<<"_id">>, Id}]
         ++ to_json_rev(Start, RevIds)
         ++ to_json_body(Del, Body, Access)
@@ -134,7 +136,7 @@ doc_to_json_obj(#doc{id=Id,deleted=Del,body=Body,revs={Start, RevIds},
         ++ to_json_meta(Meta)
         ++ to_json_attachments(Doc#doc.atts, Options)
     },
-    couch_log:info("~n~n loading this from disk: Doc: ~p ~n~n", [R]),
+    couch_log:info("~n~n ___________________loaded this from disk: Doc: ~p ~n~n", [R]),
     R.
 
 from_json_obj_validate(EJson) ->
diff --git a/t.sh b/t.sh
index 89e1283..e9a7694 100755
--- a/t.sh
+++ b/t.sh
@@ -1,33 +1,32 @@
 #!/bin/sh -x
 DB=http://a:a@127.0.0.1:15984 #
-XDB=http://x:x@127.0.0.1:15984
+XDB=http://xxxx:x@127.0.0.1:15984
 YDB=http://y:y@127.0.0.1:15984
 
-curl -sX PUT $DB/_users/org.couchdb.user:x -d @user.json > /dev/null #
+curl -sX PUT $DB/_users/org.couchdb.user:xxxx -d @user.json > /dev/null #
 curl -sX PUT $DB/_users/org.couchdb.user:y -d @user2.json > /dev/null #
 
 curl -sX DELETE $DB/db
-
-
 curl -sX PUT $DB/db?q=1'&access=true'
 ##############
-
-
-
-curl -sX PUT $DB/db/a -d '{"a":1,"_access":["x"]}'
-curl -sX PUT $DB/db/b -d '{"b":2,"_access":["x"]}'
-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/a -d '{"a":1,"_access":["xxxx"]}'
+curl -s $DB/db/a
+curl -s $XDB/db/a
+curl -s $YDB/db/a
 #
-curl -sX PUT $DB/db/d -d '{"d":4,"_access":["y"]}'
+# curl -sX PUT $DB/db/b -d '{"b":2,"_access":["x"]}'
+# 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"
 #
-curl -sX DELETE $DB/db/a?rev="1-967a00dff5e02add41819138abb3284d"
-
-echo 
-echo "setup done"
-echo
-
+# echo
+# echo "setup done"
+# echo
 #
+# #
 # curl -s $DB/db/_all_docs?include_docs=true
 # curl -s $XDB/db/_all_docs?include_docs=true
 # curl -s $YDB/db/_all_docs?include_docs=true
@@ -35,16 +34,16 @@ echo
 # curl -s $DB/db/_changes?include_docs=true
 # curl -s $XDB/db/_changes?include_docs=true
 # curl -s $YDB/db/_changes?include_docs=true
-# #
+# # #
 # curl -s $DB/db/a
 # curl -s $DB/db/b
 # curl -s $DB/db/c
 # curl -s $DB/db/d
 #
-curl -s $XDB/db/a
-curl -s $XDB/db/b
-curl -s $XDB/db/c
-curl -s $XDB/db/d
+# curl -s $XDB/db/a
+# curl -s $XDB/db/b
+# curl -s $XDB/db/c
+# curl -s $XDB/db/d
 #
 # curl -s $YDB/db/a
 # curl -s $YDB/db/b
diff --git a/user.json b/user.json
index ad07a54..43e62c6 100644
--- a/user.json
+++ b/user.json
@@ -1,5 +1,5 @@
 {
-    "name":"x",
+    "name":"xxxx",
     "roles": [],
     "password":"x",
     "type": "user"


[couchdb] 02/02: wip: cleanup debug logs, start fixing tests

Posted by ja...@apache.org.
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

commit 535bbeb18274d70c91a91e526b4016488cb2b022
Author: Jan Lehnardt <ja...@apache.org>
AuthorDate: Fri Jul 19 17:56:46 2019 +0200

    wip: cleanup debug logs, start fixing tests
---
 src/chttpd/src/chttpd_db.erl                  |  2 -
 src/couch/src/couch_bt_engine.erl             | 17 ------
 src/couch/src/couch_db.erl                    | 13 ++--
 src/couch/src/couch_db_updater.erl            |  2 +-
 src/couch/src/couch_doc.erl                   |  9 +--
 src/couch/test/couchdb_access_tests.erl       | 88 +++++++++++++--------------
 src/couch_mrview/src/couch_mrview.erl         |  2 -
 src/couch_mrview/src/couch_mrview_updater.erl |  2 -
 8 files changed, 52 insertions(+), 83 deletions(-)

diff --git a/src/chttpd/src/chttpd_db.erl b/src/chttpd/src/chttpd_db.erl
index 48cef48..3da628c 100644
--- a/src/chttpd/src/chttpd_db.erl
+++ b/src/chttpd/src/chttpd_db.erl
@@ -1269,10 +1269,8 @@ couch_doc_open(Db, DocId, Rev, Options0) ->
     nil -> % open most recent rev
         case fabric:open_doc(Db, DocId, Options) of
         {ok, Doc} ->
-             couch_log:info("~n################ chttpd couch_doc_open: Doc: ~p", [Doc]),
              Doc;
          Error ->
-             couch_log:info("~n################ chttpd couch_doc_open ERROR: Error: ~p", [Error]),
              throw(Error)
          end;
     _ -> % open a specific rev (deletions come back as stubs)
diff --git a/src/couch/src/couch_bt_engine.erl b/src/couch/src/couch_bt_engine.erl
index 287c84e..1e7bc9c 100644
--- a/src/couch/src/couch_bt_engine.erl
+++ b/src/couch/src/couch_bt_engine.erl
@@ -409,7 +409,6 @@ write_doc_infos(#st{} = St, Pairs, LocalDocs) ->
     end, {[], [], []}, Pairs),
 
     {Add, RemIds, RemSeqs} = FinalAcc,
-    couch_log:info("~n > > > > > write path: ENGINE:write_doc_infos: FinalAcc:~p ~n", [FinalAcc]),
     {ok, IdTree2} = couch_btree:add_remove(IdTree, Add, RemIds),
     {ok, SeqTree2} = couch_btree:add_remove(SeqTree, Add, RemSeqs),
 
@@ -689,22 +688,6 @@ seq_tree_reduce(rereduce, Reds) ->
 join_access(Access) -> Access.
 split_access(Access) -> Access.
 
-% split_access([]) ->
-%     [];
-% split_access(Access) when is_list(Access) ->
-%     term_to_binary(Access);
-% split_access(Access) ->
-%     couch_log:info("~n~n &&&&&&&& split IN VAL ID ACC ESS: ~p~n~n", [Access]),
-%     throw(invalid_access_term_in_fdi).
-%
-% join_access([]) ->
-%     [];
-% join_access(Access) when is_binary(Access) ->
-%     binary_to_term(Access);
-% join_access(Access) ->
-%     couch_log:info("~n~n &&&&&&&& JOIN IN VAL ID ACC ESS: ~p~n~n", [Access]),
-%     throw(invalid_access_term_in_fdi).
-
 local_tree_split(#doc{revs = {0, [Rev]}} = Doc) when is_binary(Rev) ->
     #doc{
         id = Id,
diff --git a/src/couch/src/couch_db.erl b/src/couch/src/couch_db.erl
index 72a9d8f..0f26669 100644
--- a/src/couch/src/couch_db.erl
+++ b/src/couch/src/couch_db.erl
@@ -280,7 +280,6 @@ open_doc(Db, IdOrDocInfo) ->
     open_doc(Db, IdOrDocInfo, []).
 
 open_doc(Db, Id, Options) ->
-    couch_log:info("~n$$$$$$$$$$$$$$$$$$$$$: open_doc Id: ~p~n", [Id]),
     increment_stat(Db, [couchdb, database_reads]),
     case open_doc_int(Db, Id, Options) of
     {ok, #doc{deleted=true}=Doc} ->
@@ -291,7 +290,6 @@ open_doc(Db, Id, Options) ->
             {not_found, deleted}
         end;
     Else ->
-        couch_log:info("~n$$$$$$$$$$$$$$$$$$$$$: opened_doc Else : ~p~n", [Else ]),
         apply_open_options(Db, Else, Options)
     end.
 
@@ -734,7 +732,6 @@ validate_access1(_) -> throw({forbidden, <<"can't touch this">>}).
 
 
 check_access(Db, #doc{access=Access}=Doc) ->
-    couch_log:info("check_access: ~n~n~p ~p~n~n", [Db#db.name, Doc]),
     check_access(Db, Access);
 check_access(Db, Access) ->
     #user_ctx{
@@ -1735,7 +1732,7 @@ 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", []),
+%    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);
@@ -1743,22 +1740,22 @@ open_doc_int(Db, <<?LOCAL_DOC_PREFIX, _/binary>> = Id, Options) ->
         {not_found, missing}
     end;
 open_doc_int(Db, #doc_info{id=Id,revs=[RevInfo|_]}=DocInfo, Options) ->
-    couch_log:info(">>> open_doc_int 2", []),
+%    couch_log:info(">>> open_doc_int 2", []),
     #rev_info{deleted=IsDeleted,rev={Pos,RevId},body_sp=Bp} = RevInfo,
     Doc = make_doc(Db, Id, IsDeleted, Bp, {Pos,[RevId]}),
     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]),
+%    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]),
+%    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", []),
+%    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_db_updater.erl b/src/couch/src/couch_db_updater.erl
index f5ebc53..f671c82 100644
--- a/src/couch/src/couch_db_updater.erl
+++ b/src/couch/src/couch_db_updater.erl
@@ -255,7 +255,7 @@ code_change(_OldVsn, State, _Extra) ->
     {ok, State}.
 
 sort_and_tag_grouped_docs(Client, GroupedDocs) ->
-    couch_log:info("~nBERTBERTBERTBERTBERTBERTBERTBERTBERT: GroupedDocs: ~p", [GroupedDocs]),
+    % couch_log:info("~nBERTBERTBERTBERTBERTBERTBERTBERTBERT: GroupedDocs: ~p", [GroupedDocs]),
     % These groups should already be sorted but sometimes clients misbehave.
     % The merge_updates function will fail and the database can end up with
     % duplicate documents if the incoming groups are not sorted, so as a sanity
diff --git a/src/couch/src/couch_doc.erl b/src/couch/src/couch_doc.erl
index 0d9d0cb..8eb6845 100644
--- a/src/couch/src/couch_doc.erl
+++ b/src/couch/src/couch_doc.erl
@@ -127,17 +127,13 @@ to_json_obj(Doc, Options) ->
 
 doc_to_json_obj(#doc{id=Id,deleted=Del,body=Body,revs={Start, RevIds},
             meta=Meta,access=Access}=Doc,Options)->
-    couch_log:info("~n~n ___________________doc_to_json_obj Access: ~p ~n~n", [Access]),
-            
-    R={[{<<"_id">>, Id}]
+    {[{<<"_id">>, Id}]
         ++ to_json_rev(Start, RevIds)
         ++ to_json_body(Del, Body, Access)
         ++ to_json_revisions(Options, Start, RevIds)
         ++ to_json_meta(Meta)
         ++ to_json_attachments(Doc#doc.atts, Options)
-    },
-    couch_log:info("~n~n ___________________loaded this from disk: Doc: ~p ~n~n", [R]),
-    R.
+    }.
 
 from_json_obj_validate(EJson) ->
     from_json_obj_validate(EJson, undefined).
@@ -145,7 +141,6 @@ from_json_obj_validate(EJson) ->
 from_json_obj_validate(EJson, DbName) ->
     MaxSize = config:get_integer("couchdb", "max_document_size", 4294967296),
     Doc = from_json_obj(EJson, DbName),
-    couch_log:info("~n~n writing this to disk: Doc: ~p ~n~n", [Doc]),
     case couch_ejson_size:encoded_size(Doc#doc.body) =< MaxSize of
         true ->
              validate_attachment_sizes(Doc#doc.atts),
diff --git a/src/couch/test/couchdb_access_tests.erl b/src/couch/test/couchdb_access_tests.erl
index 4a27a25..4b83c28 100644
--- a/src/couch/test/couchdb_access_tests.erl
+++ b/src/couch/test/couchdb_access_tests.erl
@@ -14,27 +14,28 @@
 
 -include_lib("couch/include/couch_eunit.hrl").
 
-make_url(User, Addr, PortType) ->
-    lists:concat(["http://", User, ":", User, "@", Addr, ":", port(PortType)]).
+make_url(User, Addr) ->
+    lists:concat(["http://", User, ":", User, "@", Addr, ":", port()]).
 
-setup(PortType) ->
+setup(_) ->
     Hashed = couch_passwords:hash_admin_password("a"),
     ok = config:set("admins", "a", binary_to_list(Hashed), _Persist=false),
     Addr = config:get("httpd", "bind_address", "127.0.0.1"),
-    Url = lists:concat(["http://", Addr, ":", port(PortType)]),
-
-    AdminUrl = make_url("a", Addr, PortType),
-    XUrl = make_url("x", Addr, PortType),
-    YUrl = make_url("y", Addr, PortType),
+    Url = lists:concat(["http://", Addr, ":", port()]),
 
+    AdminUrl = make_url("a", Addr),
+    XUrl = make_url("x", Addr),
+    YUrl = make_url("y", Addr),
+    ?debugFmt("~nA: ~p, X:~p, Y:~p~n", [AdminUrl, XUrl, YUrl]),
     % cleanup and setup
-    {ok, _, _, _} = test_request:delete(AdminUrl ++ "/_users"),
-    {ok, _, _, _} = test_request:delete(AdminUrl ++ "/db?q=1"),
-    {ok, _, _, _} = test_request:put(AdminUrl ++ "/db?access=true", ""),
+    {ok, _, _, _} = test_request:delete(AdminUrl ++ "/db"),
+    {ok, _, _, _} = test_request:put(AdminUrl ++ "/db?q=1&n=1&access=true", ""),
 
     % create users
     UserDbUrl = AdminUrl ++ "/_users",
     {ok, 201, _, _} = test_request:put(UserDbUrl, ""),
+    timer:sleep(10000),
+    
 
     UserXUrl = AdminUrl ++ "/_users/x",
     UserXBody = "{ \"name\":\"x\", \"roles\": [], \"password\":\"x\", \"type\": \"user\" }",
@@ -43,28 +44,29 @@ setup(PortType) ->
     UserYUrl = AdminUrl ++ "/_users/y",
     UserYBody = "{ \"name\":\"y\", \"roles\": [], \"password\":\"y\", \"type\": \"user\" }",
     {ok, 201, _, _} = test_request:put(UserYUrl, UserYBody),
-
+    timer:sleep(10000),
     {AdminUrl, XUrl, YUrl}.
 
-teardown(_, _) ->
+teardown(_, {AdminUrl, _, _}) ->
+    {ok, _, _, _} = test_request:delete(AdminUrl ++ "/db"),
     ok.
 
 
 access_test_() ->
     Tests = [
-        fun should_let_admin_create_doc_with_access/2,
-        fun should_let_user_create_doc_for_themselves/2,
-        fun should_not_let_user_create_doc_for_someone_else/2,
-        fun should_let_admin_read_doc_with_access/2
-        fun user_with_access_can_read_doc/2,
-        fun user_without_access_can_not_read_doc/2,
-        fun should_let_admin_delete_doc_with_access/2,
-        fun should_let_user_delete_doc_for_themselves/2,
-        fun should_not_let_user_delete_doc_for_someone_else/2,
-        fun should_let_admin_fetch_all_docs/2,
-        fun should_let_user_fetch_their_own_all_docs/2,
-        fun should_let_admin_fetch_changes/2,
-        fun should_let_user_fetch_their_own_changes/2
+        % fun should_let_admin_create_doc_with_access/2,
+        fun should_let_user_create_doc_for_themselves/2
+        % fun should_not_let_user_create_doc_for_someone_else/2,
+       %  fun should_let_admin_read_doc_with_access/2,
+       %  fun user_with_access_can_read_doc/2,
+       %  fun user_without_access_can_not_read_doc/2,
+       %  fun should_let_admin_delete_doc_with_access/2,
+       %  fun should_let_user_delete_doc_for_themselves/2,
+       %  fun should_not_let_user_delete_doc_for_someone_else/2,
+       %  fun should_let_admin_fetch_all_docs/2,
+       %  fun should_let_user_fetch_their_own_all_docs/2,
+       %  fun should_let_admin_fetch_changes/2,
+       %  fun should_let_user_fetch_their_own_changes/2
     ],
     {
         "Access tests",
@@ -84,52 +86,52 @@ make_test_cases(Mod, Funs) ->
     }.
 
 % Doc creation
-should_let_admin_create_doc_with_access(_PortType, {AdminUrl, XUrl, YUrl}) ->
+should_let_admin_create_doc_with_access(_PortType, {AdminUrl, _XUrl, Y_Url}) ->
     {ok, Code, _, _} = test_request:put(AdminUrl ++ "/db/a", "{\"a\":1,\"_access\":[\"x\"]}"),
     ?_assertEqual(201, Code).
 
-should_let_user_create_doc_for_themselves(_PortType, {AdminUrl, XUrl, YUrl}) ->
-    {ok, Code, _, _} = test_request:put(XUrl ++ "/db/a", "{\"a\":1,\"_access\":[\"x\"]}"),
+should_let_user_create_doc_for_themselves(_PortType, {_AdminUrl, XUrl, _YUrl}) ->
+    {ok, Code, _, _} = test_request:put(XUrl ++ "/db/b", "{\"a\":1,\"_access\":[\"x\"]}"),
     ?_assertEqual(201, Code).
 
-should_not_let_user_create_doc_for_someone_else(_PortType, {AdminUrl, XUrl, YUrl}) ->
-    {ok, Code, _, _} = test_request:put(YUrl ++ "/db/a", "{\"a\":1,\"_access\":[\"x\"]}"),
+should_not_let_user_create_doc_for_someone_else(_PortType, {_AdminUrl, _XUrl, YUrl}) ->
+    {ok, Code, _, _} = test_request:put(YUrl ++ "/db/c", "{\"a\":1,\"_access\":[\"x\"]}"),
     ?_assertEqual(401, Code).
 
 % Doc reads
-should_let_admin_read_doc_with_access(_PortType, {AdminUrl, XUrl, YUrl}) ->
+should_let_admin_read_doc_with_access(_PortType, {AdminUrl, XUrl, _YUrl}) ->
     {ok, 201, _, _} = test_request:put(XUrl ++ "/db/a", "{\"a\":1,\"_access\":[\"x\"]}"),
     {ok, Code, _, _} = test_request:get(AdminUrl ++ "/db/a"),
     ?_assertEqual(200, Code).
 
-user_with_access_can_read_doc(_PortType, {AdminUrl, XUrl, YUrl}) ->
+user_with_access_can_read_doc(_PortType, {AdminUrl, XUrl, _YUrl}) ->
     {ok, 201, _, _} = test_request:put(AdminUrl ++ "/db/a", "{\"a\":1,\"_access\":[\"x\"]}"),
     {ok, Code, _, _} = test_request:get(XUrl ++ "/db/a"),
     ?_assertEqual(200, Code).
 
-user_without_access_can_not_read_doc(_PortType, {AdminUrl, XUrl, YUrl}) ->
+user_without_access_can_not_read_doc(_PortType, {AdminUrl, _XUrl, YUrl}) ->
     {ok, 201, _, _} = test_request:put(AdminUrl ++ "/db/a", "{\"a\":1,\"_access\":[\"x\"]}"),
     {ok, Code, _, _} = test_request:get(YUrl ++ "/db/a"),
     ?_assertEqual(401, Code).
 
 % Doc deletes
-should_let_admin_delete_doc_with_access(_PortType, {AdminUrl, XUrl, YUrl}) ->
+should_let_admin_delete_doc_with_access(_PortType, {AdminUrl, XUrl, _YUrl}) ->
     {ok, 201, _, _} = test_request:put(XUrl ++ "/db/a", "{\"a\":1,\"_access\":[\"x\"]}"),
     {ok, Code, _, _} = test_request:delete(AdminUrl ++ "/db/a?rev=1-967a00dff5e02add41819138abb3284d"),
     ?_assertEqual(200, Code).
 
-should_let_user_delete_doc_for_themselves(_PortType, {AdminUrl, XUrl, YUrl}) ->
+should_let_user_delete_doc_for_themselves(_PortType, {AdminUrl, XUrl, _YUrl}) ->
     {ok, 201, _, _} = test_request:put(XUrl ++ "/db/a", "{\"a\":1,\"_access\":[\"x\"]}"),
     {ok, Code, _, _} = test_request:delete(XUrl ++ "/db/a?rev=1-967a00dff5e02add41819138abb3284d"),
     ?_assertEqual(200, Code).
 
-should_not_let_user_delete_doc_for_someone_else(_PortType, {AdminUrl, XUrl, YUrl}) ->
+should_not_let_user_delete_doc_for_someone_else(_PortType, {_AdminUrl, XUrl, YUrl}) ->
     {ok, 201, _, _} = test_request:put(XUrl ++ "/db/a", "{\"a\":1,\"_access\":[\"x\"]}"),
     {ok, Code, _, _} = test_request:delete(YUrl ++ "/db/a?rev=1-967a00dff5e02add41819138abb3284d"),
     ?_assertEqual(401, Code).
 
 % _all_docs with include_docs
-should_let_admin_fetch_all_docs(_PortType, {AdminUrl, XUrl, YUrl}) ->
+should_let_admin_fetch_all_docs(_PortType, {AdminUrl, _XUrl, _YUrl}) ->
     Admin_Fetch_Docs_Body = <<"{\"total_rows\":4,\"offset\":0,\"rows\":[\r\n{\"id\":\"a\",\"key\":\"a\",\"value\":{\"rev\":\"1-967a00dff5e02add41819138abb3284d\"},\"doc\":{\"_id\":\"a\",\"_rev\":\"1-967a00dff5e02add41819138abb3284d\",\"_access\":{}}},\r\n{\"id\":\"b\",\"key\":\"b\",\"value\":{\"rev\":\"1-967a00dff5e02add41819138abb3284d\"},\"doc\":{\"_id\":\"b\",\"_rev\":\"1-967a00dff5e02add41819138abb3284d\",\"_access\":{}}},\r\n{\"id\":\"c\",\"key\":\"c\",\"value\":{\"rev\":\"1-967a00d [...]
     {ok, 201, _, _} = test_request:put(AdminUrl ++ "/db/a", "{\"a\":1,\"_access\":[\"x\"]}"),
     {ok, 201, _, _} = test_request:put(AdminUrl ++ "/db/b", "{\"b\":2,\"_access\":[\"x\"]}"),
@@ -147,7 +149,7 @@ should_let_user_fetch_their_own_all_docs(_PortType, {AdminUrl, XUrl, YUrl}) ->
     {ok, 200, _, Body} = test_request:get(XUrl ++ "/db/_all_docs?include_docs=true"),
     ?_assertEqual(Admin_Fetch_Docs_Body, Body).
 % _changes
-should_let_admin_fetch_changes(_PortType, {AdminUrl, XUrl, YUrl}) ->
+should_let_admin_fetch_changes(_PortType, {AdminUrl, _XUrl, _YUrl}) ->
     {ok, 201, _, _} = test_request:put(AdminUrl ++ "/db/a", "{\"a\":1,\"_access\":[\"x\"]}"),
     {ok, 201, _, _} = test_request:put(AdminUrl ++ "/db/b", "{\"b\":2,\"_access\":[\"x\"]}"),
     {ok, 201, _, _} = test_request:put(AdminUrl ++ "/db/c", "{\"c\":3,\"_access\":[\"y\"]}"),
@@ -157,7 +159,7 @@ should_let_admin_fetch_changes(_PortType, {AdminUrl, XUrl, YUrl}) ->
     AmountOfDocs = length(proplists:get_value(<<"results">>, Json)),
     ?_assertEqual(4, AmountOfDocs).
 
-should_let_user_fetch_their_own_changes(_PortType, {AdminUrl, XUrl, YUrl}) ->
+should_let_user_fetch_their_own_changes(_PortType, {AdminUrl, XUrl, _YUrl}) ->
     {ok, 201, _, _} = test_request:put(AdminUrl ++ "/db/a", "{\"a\":1,\"_access\":[\"x\"]}"),
     {ok, 201, _, _} = test_request:put(AdminUrl ++ "/db/b", "{\"b\":2,\"_access\":[\"x\"]}"),
     {ok, 201, _, _} = test_request:put(AdminUrl ++ "/db/c", "{\"c\":3,\"_access\":[\"y\"]}"),
@@ -171,7 +173,5 @@ should_let_user_fetch_their_own_changes(_PortType, {AdminUrl, XUrl, YUrl}) ->
 %% Internal Function Definitions
 %% ------------------------------------------------------------------
 
-port(clustered) ->
-    integer_to_list(mochiweb_socket_server:get(chttpd, port));
-port(backdoor) ->
-    integer_to_list(mochiweb_socket_server:get(couch_httpd, port)).
+port() ->
+    integer_to_list(mochiweb_socket_server:get(chttpd, port)).
diff --git a/src/couch_mrview/src/couch_mrview.erl b/src/couch_mrview/src/couch_mrview.erl
index c93778f..3fda8e0 100644
--- a/src/couch_mrview/src/couch_mrview.erl
+++ b/src/couch_mrview/src/couch_mrview.erl
@@ -256,7 +256,6 @@ query_changes_access(Db, StartSeq, Fun, Options, Acc) ->
          ({meta, _}, Acc0) ->
             {ok, Acc0}; % ignore for now
          ({row, Props}, Acc0) ->
-            couch_log:info("~n~n Props: ~p", [Props]),
             % turn row into FDI
             Value = couch_util:get_value(value, Props),
             [_Owner, Seq] = couch_util:get_value(key, Props),
@@ -598,7 +597,6 @@ map_fold(Db, View, Args, Callback, UAcc) ->
         _Else ->
             couch_mrview_util:get_row_count(View)
     end,
-    couch_log:info("~n~n Total: ~p~n", [Total]),
     Acc = #mracc{
         db=Db,
         total_rows=Total,
diff --git a/src/couch_mrview/src/couch_mrview_updater.erl b/src/couch_mrview/src/couch_mrview_updater.erl
index 63c0365..adb6678 100644
--- a/src/couch_mrview/src/couch_mrview_updater.erl
+++ b/src/couch_mrview/src/couch_mrview_updater.erl
@@ -204,7 +204,6 @@ map_docs(Parent, #mrst{db_name = DbName, idx_name = IdxName} = State0) ->
                     case IdxName of
                         <<"_design/_access">> ->
                             % splice in seq
-                            couch_log:info("~n~nRevvvv: ~p Body~p, Meta: ~p~n", [Rev, Body, Meta]),
                             {Start, Rev1} = Rev,
                             Doc = #doc{
                                 id = Id,
@@ -213,7 +212,6 @@ map_docs(Parent, #mrst{db_name = DbName, idx_name = IdxName} = State0) ->
                                 deleted = true
                             },
                             {ok, Res} = couch_query_servers:map_doc_raw(QServer, Doc),
-                            couch_log:info("~n~nRessss: ~p~n~n", [Res]),
                             {erlang:max(Seq, SeqAcc), [{Id, Seq, Rev, Res} | Results]};
                         _Else ->
                             {erlang:max(Seq, SeqAcc), [{Id, Seq, Rev, []} | Results]}