summaryrefslogtreecommitdiff
path: root/src/couch_replicator/src/couch_replicator_worker.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/couch_replicator/src/couch_replicator_worker.erl')
-rw-r--r--src/couch_replicator/src/couch_replicator_worker.erl17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/couch_replicator/src/couch_replicator_worker.erl b/src/couch_replicator/src/couch_replicator_worker.erl
index 94e3e028b..4df5d1c7c 100644
--- a/src/couch_replicator/src/couch_replicator_worker.erl
+++ b/src/couch_replicator/src/couch_replicator_worker.erl
@@ -68,23 +68,27 @@
parent,
cp,
changes_manager,
+ use_bulk_get,
bulk_get_stats
}).
-start_link(Cp, #httpdb{} = Source, Target, ChangesManager, MaxConns) ->
+start_link(Cp, #httpdb{} = Source, Target, ChangesManager, [_ | _] = Options) ->
gen_server:start_link(
- ?MODULE, {Cp, Source, Target, ChangesManager, MaxConns}, []
+ ?MODULE, {Cp, Source, Target, ChangesManager, Options}, []
).
-init({Cp, Source, Target, ChangesManager, MaxConns}) ->
+init({Cp, Source, Target, ChangesManager, Options}) ->
process_flag(trap_exit, true),
NowSec = erlang:monotonic_time(second),
+ MaxConns = couch_util:get_value(http_connections, Options),
+ UseBulkGet = couch_util:get_value(use_bulk_get, Options),
FetchSt = #fetch_st{
cp = Cp,
source = Source,
target = Target,
parent = self(),
changes_manager = ChangesManager,
+ use_bulk_get = UseBulkGet,
bulk_get_stats = #bulk_get_stats{ratio = 0, tsec = NowSec}
},
State = #state{
@@ -256,6 +260,7 @@ queue_fetch_loop(#fetch_st{} = St) ->
target = Target,
parent = Parent,
changes_manager = ChangesManager,
+ use_bulk_get = UseBulkGet,
bulk_get_stats = BgSt
} = St,
ChangesManager ! {get_changes, self()},
@@ -268,7 +273,7 @@ queue_fetch_loop(#fetch_st{} = St) ->
{changes, ChangesManager, Changes, ReportSeq} ->
% Find missing revisions (POST to _revs_diff)
IdRevs = find_missing(Changes, Target, Parent),
- {Docs, BgSt1} = bulk_get(Source, IdRevs, Parent, BgSt),
+ {Docs, BgSt1} = bulk_get(UseBulkGet, Source, IdRevs, Parent, BgSt),
% Documents without attachments can be uploaded right away
BatchFun = fun({_, #doc{} = Doc}) ->
ok = gen_server:call(Parent, {batch_doc, Doc}, infinity)
@@ -292,7 +297,9 @@ queue_fetch_loop(#fetch_st{} = St) ->
% _bulk_get. After a few successful attempts that should lower the failure rate
% enough to start allow using _bulk_get again.
%
-bulk_get(Source, IdRevs, Parent, #bulk_get_stats{} = St) ->
+bulk_get(false, _Source, _IdRevs, _Parent, #bulk_get_stats{} = St) ->
+ {#{}, St};
+bulk_get(true, Source, IdRevs, Parent, #bulk_get_stats{} = St) ->
NowSec = erlang:monotonic_time(second),
case attempt_bulk_get(St, NowSec) of
true ->