You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by bb...@apache.org on 2017/03/16 17:19:27 UTC
[1/3] couch-mrview commit: updated refs/heads/master to f897fdc
Repository: couchdb-couch-mrview
Updated Branches:
refs/heads/master 49533ef9d -> f897fdc2c
Fix undef error on empty list function response
Prior to this commit, if a list function did not return any data or
returned an error, it would return a #lacc{} record from list_cb/2
rather than a valid #mochiweb_response{} record. This would cause chttpd
to crash. This commit fixes this bug by always returning a valid
record.
Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/commit/56616fad
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/tree/56616fad
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/diff/56616fad
Branch: refs/heads/master
Commit: 56616fad9b0621b6606e4b521a2ec4b8342877aa
Parents: e1d13a9
Author: Benjamin Bastian <be...@gmail.com>
Authored: Thu Mar 9 18:20:25 2017 -0800
Committer: Benjamin Bastian <be...@gmail.com>
Committed: Thu Mar 9 18:20:25 2017 -0800
----------------------------------------------------------------------
src/couch_mrview_show.erl | 26 ++++++++++++--------------
1 file changed, 12 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/blob/56616fad/src/couch_mrview_show.erl
----------------------------------------------------------------------
diff --git a/src/couch_mrview_show.erl b/src/couch_mrview_show.erl
index 52e07a7..f79ad62 100644
--- a/src/couch_mrview_show.erl
+++ b/src/couch_mrview_show.erl
@@ -284,26 +284,24 @@ send_list_row(Row, #lacc{qserver = {Proc, _}, req = Req, resp = Resp} = Acc) ->
Acc2 = send_non_empty_chunk(Acc, Chunk),
{ok, Acc2};
[<<"end">>, Chunk, Headers] ->
- Acc2 = send_non_empty_chunk(fixup_headers(Headers, Acc), Chunk),
- #lacc{resp = Resp2} = Acc2,
- last_chunk(Req, Resp2),
- {stop, Acc2};
+ #lacc{resp = Resp2} = send_non_empty_chunk(fixup_headers(Headers, Acc), Chunk),
+ {ok, Resp3} = last_chunk(Req, Resp2),
+ {stop, Resp3};
[<<"end">>, Chunk] ->
- Acc2 = send_non_empty_chunk(Acc, Chunk),
- #lacc{resp = Resp2} = Acc2,
- last_chunk(Req, Resp2),
- {stop, Acc2}
+ #lacc{resp = Resp2} = send_non_empty_chunk(Acc, Chunk),
+ {ok, Resp3} = last_chunk(Req, Resp2),
+ {stop, Resp3}
catch Error ->
- case Resp of
+ {ok, Resp2} = case Resp of
undefined ->
{Code, _, _} = chttpd:error_info(Error),
#lacc{req=Req, headers=Headers} = Acc,
- {ok, Resp2} = chttpd:start_chunked_response(Req, Code, Headers),
- Acc2 = Acc#lacc{resp=Resp2, code=Code};
- _ -> Resp2 = Resp, Acc2 = Acc
+ chttpd:start_chunked_response(Req, Code, Headers);
+ _ ->
+ {ok, Resp}
end,
- chttpd:send_chunked_error(Resp2, Error),
- {stop, Acc2}
+ {ok, Resp3} = chttpd:send_chunked_error(Resp2, Error),
+ {stop, Resp3}
end.
send_non_empty_chunk(Acc, []) ->
[3/3] couch-mrview commit: updated refs/heads/master to f897fdc
Posted by bb...@apache.org.
Merge remote-tracking branch 'cloudant/undef-lacc-list-function'
Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/commit/f897fdc2
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/tree/f897fdc2
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/diff/f897fdc2
Branch: refs/heads/master
Commit: f897fdc2cab02ac5ed7950cb25c36f2cafb86b38
Parents: 49533ef c01d4c0
Author: Benjamin Bastian <be...@gmail.com>
Authored: Thu Mar 16 10:18:03 2017 -0700
Committer: Benjamin Bastian <be...@gmail.com>
Committed: Thu Mar 16 10:18:03 2017 -0700
----------------------------------------------------------------------
src/couch_mrview_show.erl | 64 +++++++++++++++++++++++++++++++++---------
1 file changed, 50 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/blob/f897fdc2/src/couch_mrview_show.erl
----------------------------------------------------------------------
[2/3] couch-mrview commit: updated refs/heads/master to f897fdc
Posted by bb...@apache.org.
Add send_list_row test suite
Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/commit/c01d4c08
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/tree/c01d4c08
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/diff/c01d4c08
Branch: refs/heads/master
Commit: c01d4c088e1073c669e900cc14d0404a00ea36ff
Parents: 56616fa
Author: Jay Doane <ja...@gmail.com>
Authored: Wed Mar 15 23:01:28 2017 -0700
Committer: Jay Doane <ja...@gmail.com>
Committed: Wed Mar 15 23:01:28 2017 -0700
----------------------------------------------------------------------
src/couch_mrview_show.erl | 38 ++++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/blob/c01d4c08/src/couch_mrview_show.erl
----------------------------------------------------------------------
diff --git a/src/couch_mrview_show.erl b/src/couch_mrview_show.erl
index f79ad62..4f59acc 100644
--- a/src/couch_mrview_show.erl
+++ b/src/couch_mrview_show.erl
@@ -424,4 +424,42 @@ should_apply_headers_with_merge_overwrite() ->
?assertEqual({NewHeaders}, JsonHeaders)
end).
+
+send_list_row_test_() ->
+ Cases = couch_tests_combinatorics:product([
+ [
+ {"[<<\"end\">>, [], []]", fun(_, _) -> [<<"end">>, [], []] end},
+ {"[<<\"end\">>, []]", fun(_, _) -> [<<"end">>, []] end},
+ {"throw(timeout)", fun(_, _) -> throw(timeout) end}
+ ],
+ [
+ req,
+ undefined
+ ]]),
+ {"Ensure send_list_row returns a valid response on end or error",
+ {setup, fun setup/0, fun(_) -> meck:unload() end, [
+ {
+ lists:flatten(io_lib:format("~s -- ~p", [N, R])),
+ should_return_valid_response(F, R)
+ } || [{N, F}, R] <- Cases
+ ]}
+ }.
+
+setup() ->
+ ok = meck:expect(chttpd, send_chunk,
+ fun(Resp, _) -> {ok, Resp} end),
+ ok = meck:expect(chttpd, send_chunked_error,
+ fun(Resp, _) -> {ok, Resp} end),
+ ok = meck:expect(chttpd, start_chunked_response,
+ fun(_, _, _) -> {ok, resp} end),
+ ok = meck:expect(chttpd_external, parse_external_response, 1,
+ #extern_resp_args{headers = []}).
+
+should_return_valid_response(Spec, Req) ->
+ ?_test(begin
+ ok = meck:expect(couch_query_servers, proc_prompt, Spec),
+ Acc = #lacc{qserver = {proc, undefined}, req = Req, resp = resp},
+ ?assertEqual({stop, resp}, send_list_row([], Acc))
+ end).
+
-endif.