diff options
author | Robert Newson <rnewson@apache.org> | 2020-12-20 14:46:46 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-20 14:46:46 +0000 |
commit | df2fb672565dfc8873aa1b102b572d9be16b6e14 (patch) | |
tree | 7ebce28213f1a6d5d0a6c43196841cd63b2152c8 | |
parent | be87c409fa0109241d9c5796e087f0952bb317ad (diff) | |
download | couchdb-df2fb672565dfc8873aa1b102b572d9be16b6e14.tar.gz |
treat 408 as a retryable error condition (#3303)
-rw-r--r-- | src/couch_replicator/src/couch_replicator_httpc.erl | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/src/couch_replicator/src/couch_replicator_httpc.erl b/src/couch_replicator/src/couch_replicator_httpc.erl index cffeb8685..52baa3915 100644 --- a/src/couch_replicator/src/couch_replicator_httpc.erl +++ b/src/couch_replicator/src/couch_replicator_httpc.erl @@ -155,9 +155,15 @@ process_response({ibrowse_req_id, ReqId}, Worker, HttpDb, Params, Callback) -> process_response({ok, Code, Headers, Body}, Worker, HttpDb, Params, Callback) -> case list_to_integer(Code) of + R when R =:= 301 ; R =:= 302 ; R =:= 303 -> + backoff_success(HttpDb, Params), + do_redirect(Worker, R, Headers, HttpDb, Params, Callback); 429 -> backoff(HttpDb, Params); - Ok when (Ok >= 200 andalso Ok < 300) ; (Ok >= 400 andalso Ok < 500) -> + Error when Error =:= 408 ; Error >= 500 -> + couch_stats:increment_counter([couch_replicator, responses, failure]), + maybe_retry({code, Error}, Worker, HttpDb, Params); + Ok when Ok >= 200 , Ok < 500 -> backoff_success(HttpDb, Params), couch_stats:increment_counter([couch_replicator, responses, success]), EJson = case Body of @@ -168,13 +174,7 @@ process_response({ok, Code, Headers, Body}, Worker, HttpDb, Params, Callback) -> end, process_auth_response(HttpDb, Ok, Headers, Params), if Ok =:= 413 -> put(?STOP_HTTP_WORKER, stop); true -> ok end, - Callback(Ok, Headers, EJson); - R when R =:= 301 ; R =:= 302 ; R =:= 303 -> - backoff_success(HttpDb, Params), - do_redirect(Worker, R, Headers, HttpDb, Params, Callback); - Error -> - couch_stats:increment_counter([couch_replicator, responses, failure]), - maybe_retry({code, Error}, Worker, HttpDb, Params) + Callback(Ok, Headers, EJson) end; process_response(Error, Worker, HttpDb, Params, _Callback) -> @@ -185,10 +185,18 @@ process_stream_response(ReqId, Worker, HttpDb, Params, Callback) -> receive {ibrowse_async_headers, ReqId, Code, Headers} -> case list_to_integer(Code) of + R when R =:= 301 ; R =:= 302 ; R =:= 303 -> + backoff_success(HttpDb, Params), + do_redirect(Worker, R, Headers, HttpDb, Params, Callback); 429 -> Timeout = couch_replicator_rate_limiter:max_interval(), backoff(HttpDb#httpdb{timeout = Timeout}, Params); - Ok when (Ok >= 200 andalso Ok < 300) ; (Ok >= 400 andalso Ok < 500) -> + Error when Error =:= 408 ; Error >= 500 -> + couch_stats:increment_counter( + [couch_replicator, stream_responses, failure] + ), + report_error(Worker, HttpDb, Params, {code, Error}); + Ok when Ok >= 200 , Ok < 500 -> backoff_success(HttpDb, Params), HttpDb1 = process_auth_response(HttpDb, Ok, Headers, Params), StreamDataFun = fun() -> @@ -206,15 +214,7 @@ process_stream_response(ReqId, Worker, HttpDb, Params, Callback) -> Worker, HttpDb1, Params); throw:{maybe_retry_req, Err} -> maybe_retry(Err, Worker, HttpDb1, Params) - end; - R when R =:= 301 ; R =:= 302 ; R =:= 303 -> - backoff_success(HttpDb, Params), - do_redirect(Worker, R, Headers, HttpDb, Params, Callback); - Error -> - couch_stats:increment_counter( - [couch_replicator, stream_responses, failure] - ), - report_error(Worker, HttpDb, Params, {code, Error}) + end end; {ibrowse_async_response, ReqId, {error, _} = Error} -> couch_stats:increment_counter( |