diff options
Diffstat (limited to 'src/couch_replicator/src/couch_replicator_worker.erl')
-rw-r--r-- | src/couch_replicator/src/couch_replicator_worker.erl | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/couch_replicator/src/couch_replicator_worker.erl b/src/couch_replicator/src/couch_replicator_worker.erl index 3d80f5883..eb8beaaa9 100644 --- a/src/couch_replicator/src/couch_replicator_worker.erl +++ b/src/couch_replicator/src/couch_replicator_worker.erl @@ -169,6 +169,15 @@ handle_info({'EXIT', Pid, normal}, #state{writer = nil} = State) -> handle_info({'EXIT', _Pid, max_backoff}, State) -> {stop, {shutdown, max_backoff}, State}; +handle_info({'EXIT', _Pid, {bulk_docs_failed, _, _} = Err}, State) -> + {stop, {shutdown, Err}, State}; + +handle_info({'EXIT', _Pid, {revs_diff_failed, _, _} = Err}, State) -> + {stop, {shutdown, Err}, State}; + +handle_info({'EXIT', _Pid, {http_request_failed, _, _, _} = Err}, State) -> + {stop, {shutdown, Err}, State}; + handle_info({'EXIT', Pid, Reason}, State) -> {stop, {process_died, Pid, Reason}, State}. @@ -372,8 +381,9 @@ handle_flush_docs_result({error, request_body_too_large}, Target, DocList) -> " request body is too large. Splitting batch into 2 separate batches of" " sizes ~p and ~p", [Len, couch_replicator_api_wrap:db_uri(Target), length(DocList1), length(DocList2)]), - flush_docs(Target, DocList1), - flush_docs(Target, DocList2); + Stats1 = flush_docs(Target, DocList1), + Stats2 = flush_docs(Target, DocList2), + couch_replicator_stats:sum_stats(Stats1, Stats2); handle_flush_docs_result({ok, Errors}, Target, DocList) -> DbUri = couch_replicator_api_wrap:db_uri(Target), lists:foreach( @@ -386,7 +396,9 @@ handle_flush_docs_result({ok, Errors}, Target, DocList) -> couch_replicator_stats:new([ {docs_written, length(DocList) - length(Errors)}, {doc_write_failures, length(Errors)} - ]). + ]); +handle_flush_docs_result({error, {bulk_docs_failed, _, _} = Err}, _, _) -> + exit(Err). flush_doc(Target, #doc{id = Id, revs = {Pos, [RevId | _]}} = Doc) -> @@ -425,7 +437,10 @@ find_missing(DocInfos, Target) -> end, {[], 0}, DocInfos), - {ok, Missing} = couch_replicator_api_wrap:get_missing_revs(Target, IdRevs), + Missing = case couch_replicator_api_wrap:get_missing_revs(Target, IdRevs) of + {ok, Result} -> Result; + {error, Error} -> exit(Error) + end, MissingRevsCount = lists:foldl( fun({_Id, MissingRevs, _PAs}, Acc) -> Acc + length(MissingRevs) end, 0, Missing), |