Subject: | Allow retry requests and better detection of errors |
Hello.
According to source code, seems the API return success and failure, for any call.
However there should be another state: "request should be retried".
Or you should implement request retry by yourself.
Some facts:
1. Amazon can return HTTP 500 any time. This mean request should be retried. Proof https://forums.aws.amazon.com/thread.jspa?messageID=387762񞪲
2. Sometimes upload/download with huge files fail, it's not possible to download huge files sometimes (with any clients, from any locations including Amazon EC2). proof - https://forums.aws.amazon.com/thread.jspa?threadID=125571&tstart=0
My testing shows that for pretty often Amazon drop connection for smaller files, it's by design.
3. There are special error codes and exception codes
http://docs.aws.amazon.com/amazonglacier/latest/dev/api-error-responses.html
HTTP 408 - timeout
and
HTTP 400, code ThrottlingException
which mean request should be retried.
Also errors from LWP::UserAgent should be better handled.
A. When Amazon server break connection (example is (2)) (and this is valid and only possible behaviour to abort request after headers send), LWP::UserAgent does not detect it
I don't have proof but I reported bug with proof-of-concept code https://rt.cpan.org/Public/Bug/Display.html?id=85759 and I saw this in the wild (yes, with Amazon servers)
B. When socket timeout happen, LWP::UserAgent reports X-Died header but does not change HTTP status code, so response HTTP 200 (ans is_success == TRUE) with X-Died can actually mean networking issue.