nickva opened a new pull request #1177: Avoid unconditional retries in 
replicator's http client
URL: https://github.com/apache/couchdb/pull/1177
 
 
   In some cases the higher level code from `couch_replicator_api_wrap` needs to
   handle retries explicitly and cannot cope with retries happening in the lower
   level http client. In such cases it sets `retries = 0`.
   
   For example:
   
   
https://github.com/apache/couchdb/blob/master/src/couch_replicator/src/couch_replicator_api_wrap.erl#L271-L275
   
   The http client then should avoid unconditional retries and instead consult
   `retries` value. If `retries = 0`, it shouldn't retry and instead bubble the
   exception up to the caller.
   
   This bug was discovered when attachments were replicated to a target cluster
   and the target cluster's resources were constrainted. Since attachment `PUT`
   requests were made from the context of an open_revs `GET` request, `PUT`
   request timed out, and they would retry. However, because the retry didn't
   bubble up to the `open_revs` code, the second `PUT` request would die with a
   `noproc` error, since the old parser had exited by then. See issue #745 for
   more.
   
   ## Testing recommendations
   
   See issue #745 comments on how to set up testing. The code was tested 
locally with a Vagrant VM running Debian 8, Erlang 17.5. Hardware resources 
were 1 CPU, throttled to about 30%, disk throughput also throttled to about 
10Mb/s. `stress` running in the background as `stress --timeout 900m --cpu 1 
--io 4`.
   
   

----------------------------------------------------------------
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:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to