You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2014/08/01 16:34:31 UTC

[10/49] fabric commit: updated refs/heads/windsor-merge to b1c0030

Make all timeouts configurable

BugzID: 24302


Project: http://git-wip-us.apache.org/repos/asf/couchdb-fabric/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-fabric/commit/ec26cbab
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-fabric/tree/ec26cbab
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-fabric/diff/ec26cbab

Branch: refs/heads/windsor-merge
Commit: ec26cbabe767f95f1e67a5c0eb7ab11c7ce18206
Parents: a505676
Author: Robert Newson <ro...@cloudant.com>
Authored: Mon Oct 21 18:05:11 2013 +0100
Committer: Robert Newson <rn...@apache.org>
Committed: Fri Aug 1 15:33:41 2014 +0100

----------------------------------------------------------------------
 src/fabric_doc_attachments.erl |  6 ++++--
 src/fabric_util.erl            | 13 +++++++++++--
 src/fabric_view_all_docs.erl   |  6 ++++--
 3 files changed, 19 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-fabric/blob/ec26cbab/src/fabric_doc_attachments.erl
----------------------------------------------------------------------
diff --git a/src/fabric_doc_attachments.erl b/src/fabric_doc_attachments.erl
index af56137..a703db9 100644
--- a/src/fabric_doc_attachments.erl
+++ b/src/fabric_doc_attachments.erl
@@ -34,11 +34,12 @@ receiver(Req, Length) when is_integer(Length) ->
     Middleman = spawn(fun() -> middleman(Req, Length) end),
     fun() ->
         Middleman ! {self(), gimme_data},
+        Timeout = fabric_util:attachments_timeout(),
         receive
             {Middleman, Data} ->
                 rexi:reply(attachment_chunk_received),
                 iolist_to_binary(Data)
-        after 600000 ->
+        after Timeout ->
             exit(timeout)
         end
     end;
@@ -64,6 +65,7 @@ maybe_send_continue(#httpd{mochi_req = MochiReq} = Req) ->
 
 write_chunks(MiddleMan, ChunkFun) ->
     MiddleMan ! {self(), gimme_data},
+    Timeout = fabric_util:attachments_timeout(),
     receive
     {MiddleMan, ChunkRecordList} ->
         rexi:reply(attachment_chunk_received),
@@ -71,7 +73,7 @@ write_chunks(MiddleMan, ChunkFun) ->
         continue -> write_chunks(MiddleMan, ChunkFun);
         done -> ok
         end
-    after 600000 ->
+    after Timeout ->
         exit(timeout)
     end.
 

http://git-wip-us.apache.org/repos/asf/couchdb-fabric/blob/ec26cbab/src/fabric_util.erl
----------------------------------------------------------------------
diff --git a/src/fabric_util.erl b/src/fabric_util.erl
index fb6cd8b..344ead7 100644
--- a/src/fabric_util.erl
+++ b/src/fabric_util.erl
@@ -15,7 +15,7 @@
 -export([submit_jobs/3, submit_jobs/4, cleanup/1, recv/4, get_db/1, get_db/2, error_info/1,
         update_counter/3, remove_ancestors/2, create_monitors/1, kv/2,
         remove_down_workers/2]).
--export([request_timeout/0]).
+-export([request_timeout/0, attachments_timeout/0, all_docs_timeout/0]).
 -export([stream_start/2, stream_start/4]).
 
 -include_lib("fabric/include/fabric.hrl").
@@ -138,7 +138,16 @@ recv(Workers, Keypos, Fun, Acc0) ->
     rexi_utils:recv(Workers, Keypos, Fun, Acc0, request_timeout(), infinity).
 
 request_timeout() ->
-    case config:get("fabric", "request_timeout", "60000") of
+    timeout("request", "60000").
+
+all_docs_timeout() ->
+    timeout("all_docs", "10000").
+
+attachments_timeout() ->
+    timeout("attachments", "600000").
+
+timeout(Type, Default) ->
+    case config:get("fabric", Type ++ "_timeout", Default) of
         "infinity" -> infinity;
         N -> list_to_integer(N)
     end.

http://git-wip-us.apache.org/repos/asf/couchdb-fabric/blob/ec26cbab/src/fabric_view_all_docs.erl
----------------------------------------------------------------------
diff --git a/src/fabric_view_all_docs.erl b/src/fabric_view_all_docs.erl
index 8dc9173..28a1f91 100644
--- a/src/fabric_view_all_docs.erl
+++ b/src/fabric_view_all_docs.erl
@@ -68,13 +68,14 @@ go(DbName, Options, QueryArgs, Callback, Acc0) ->
         true -> lists:sublist(Keys2, Limit);
         false -> Keys2
     end,
+    Timeout = fabric_util:all_docs_timeout(),
     receive {'DOWN', Ref0, _, _, {ok, TotalRows}} ->
         {ok, Acc1} = Callback({meta, [{total, TotalRows}]}, Acc0),
         {ok, Acc2} = doc_receive_loop(
             Keys3, queue:new(), SpawnFun, MaxJobs, Callback, Acc1
         ),
         Callback(complete, Acc2)
-    after 10000 ->
+    after Timeout ->
         Callback(timeout, Acc0)
     end.
 
@@ -176,6 +177,7 @@ doc_receive_loop(Keys, Pids, SpawnFun, MaxJobs, Callback, AccIn) ->
         doc_receive_loop(RKeys, Pids1, SpawnFun, MaxJobs, Callback, AccIn);
     _ ->
         {{value, {Pid, Ref}}, RestPids} = queue:out(Pids),
+        Timeout = fabric_util:all_docs_timeout(),
         receive {'DOWN', Ref, process, Pid, #view_row{} = Row} ->
             case Callback(fabric_view:transform_row(Row), AccIn) of
             {ok, Acc} ->
@@ -186,7 +188,7 @@ doc_receive_loop(Keys, Pids, SpawnFun, MaxJobs, Callback, AccIn) ->
                 cancel_read_pids(RestPids),
                 {ok, Acc}
             end
-        after 10000 ->
+        after Timeout ->
             timeout
         end
     end.