diff options
author | Jan Lehnardt <jan@apache.org> | 2019-07-19 17:56:46 +0200 |
---|---|---|
committer | Jan Lehnardt <jan@apache.org> | 2019-07-19 17:56:46 +0200 |
commit | 535bbeb18274d70c91a91e526b4016488cb2b022 (patch) | |
tree | 7a9f8b78cfc12dbba5fc76beb1fea924a19f2277 | |
parent | 8d593d1cc7d879cea9c432de35879f9d2367b9c6 (diff) | |
download | couchdb-535bbeb18274d70c91a91e526b4016488cb2b022.tar.gz |
wip: cleanup debug logs, start fixing tests
-rw-r--r-- | src/chttpd/src/chttpd_db.erl | 2 | ||||
-rw-r--r-- | src/couch/src/couch_bt_engine.erl | 17 | ||||
-rw-r--r-- | src/couch/src/couch_db.erl | 13 | ||||
-rw-r--r-- | src/couch/src/couch_db_updater.erl | 2 | ||||
-rw-r--r-- | src/couch/src/couch_doc.erl | 9 | ||||
-rw-r--r-- | src/couch/test/couchdb_access_tests.erl | 88 | ||||
-rw-r--r-- | src/couch_mrview/src/couch_mrview.erl | 2 | ||||
-rw-r--r-- | 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 48cef48bf..3da628c3d 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 287c84e45..1e7bc9c55 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 72a9d8f20..0f2666985 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 f5ebc5370..f671c8290 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 0d9d0cbc5..8eb684524 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 4a27a25ed..4b83c28aa 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-967a00dff5e02add41819138abb3284d\"},\"doc\":{\"_id\":\"c\",\"_rev\":\"1-967a00dff5e02add41819138abb3284d\",\"_access\":{}}},\r\n{\"id\":\"d\",\"key\":\"d\",\"value\":{\"rev\":\"1-967a00dff5e02add41819138abb3284d\"},\"doc\":{\"_id\":\"d\",\"_rev\":\"1-967a00dff5e02add41819138abb3284d\",\"_access\":{}}}\r\n]}\n">>, {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 c93778fdd..3fda8e002 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 63c036583..adb667809 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]} |