nickva closed pull request #1393: Switch away from passing funs between nodes
when uploading attachments
URL: https://github.com/apache/couchdb/pull/1393
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git a/src/fabric/src/fabric.erl b/src/fabric/src/fabric.erl
index 4a0727131b..3f2866f824 100644
--- a/src/fabric/src/fabric.erl
+++ b/src/fabric/src/fabric.erl
@@ -277,7 +277,7 @@ purge_docs(_DbName, _IdsRevs) ->
{unknown_transfer_encoding, any()}) ->
function() | binary().
att_receiver(Req, Length) ->
- fabric_doc_attachments:receiver(Req, Length).
+ fabric_doc_attachments2:receiver_tuple(Req, Length).
%% @equiv all_docs(DbName, [], Callback, Acc0, QueryArgs)
all_docs(DbName, Callback, Acc, QueryArgs) ->
diff --git a/src/fabric/src/fabric_doc_attachments.erl
b/src/fabric/src/fabric_doc_attachments.erl
index 7c6ba66106..5afcc891a8 100644
--- a/src/fabric/src/fabric_doc_attachments.erl
+++ b/src/fabric/src/fabric_doc_attachments.erl
@@ -15,23 +15,34 @@
-include_lib("fabric/include/fabric.hrl").
-include_lib("couch/include/couch_db.hrl").
-%% couch api calls
--export([receiver/2]).
+-export([
+ receiver_tuple/2,
+ receiver_callback/2
+]).
-receiver(_Req, undefined) ->
+
+receiver_tuple(_Req, undefined) ->
<<"">>;
-receiver(_Req, {unknown_transfer_encoding, Unknown}) ->
+receiver_tuple(_Req, {unknown_transfer_encoding, Unknown}) ->
exit({unknown_transfer_encoding, Unknown});
-receiver(Req, chunked) ->
+receiver_tuple(Req, chunked) ->
MiddleMan = spawn(fun() -> middleman(Req, chunked) end),
- fun(4096, ChunkFun, State) ->
- write_chunks(MiddleMan, ChunkFun, State)
- end;
-receiver(_Req, 0) ->
+ {fabric_attachment_receiver, MiddleMan, chunked};
+receiver_tuple(_Req, 0) ->
<<"">>;
-receiver(Req, Length) when is_integer(Length) ->
+receiver_tuple(Req, Length) when is_integer(Length) ->
maybe_send_continue(Req),
Middleman = spawn(fun() -> middleman(Req, Length) end),
+ {fabric_attachment_receiver, Middleman, Length};
+receiver_tuple(_Req, Length) ->
+ exit({length_not_integer, Length}).
+
+
+receiver_callback(Middleman, chunked) ->
+ fun(4096, ChunkFun, State) ->
+ write_chunks(Middleman, ChunkFun, State)
+ end;
+receiver_callback(Middleman, Length) when is_integer(Length) ->
fun() ->
Middleman ! {self(), gimme_data},
Timeout = fabric_util:attachments_timeout(),
@@ -42,9 +53,8 @@ receiver(Req, Length) when is_integer(Length) ->
after Timeout ->
exit(timeout)
end
- end;
-receiver(_Req, Length) ->
- exit({length_not_integer, Length}).
+ end.
+
%%
%% internal
diff --git a/src/fabric/src/fabric_rpc.erl b/src/fabric/src/fabric_rpc.erl
index 913aafe0e2..418c750697 100644
--- a/src/fabric/src/fabric_rpc.erl
+++ b/src/fabric/src/fabric_rpc.erl
@@ -440,6 +440,8 @@ make_att_reader({follows, Parser, Ref}) ->
throw({mp_parser_died, Reason})
end
end;
+make_att_reader({fabric_attachment_receiver, Middleman, Length}) ->
+ fabric_doc_attachments2:receiver_callback(Middleman, Length);
make_att_reader(Else) ->
Else.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services