Merge pull request #9016 from humbletim/script-retry-improvements

Prevent Script retries when HTTP errors are irrecoverable
This commit is contained in:
Andrew Meadows 2016-11-07 09:34:38 -08:00 committed by GitHub
commit 5c6ab5d0c3
2 changed files with 35 additions and 1 deletions

View file

@ -14,6 +14,7 @@
#include <QFile>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QMetaEnum>
#include <SharedUtil.h>
@ -78,10 +79,36 @@ void HTTPResourceRequest::onRequestFinished() {
_loadedFromCache = _reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool();
_result = Success;
break;
case QNetworkReply::TimeoutError:
_result = Timeout;
break;
case QNetworkReply::ContentNotFoundError: // Script.include('https://httpbin.org/status/404')
_result = NotFound;
break;
case QNetworkReply::ProtocolInvalidOperationError: // Script.include('https://httpbin.org/status/400')
_result = InvalidURL;
break;
case QNetworkReply::UnknownContentError: // Script.include('QUrl("https://httpbin.org/status/402")')
case QNetworkReply::ContentOperationNotPermittedError: //Script.include('https://httpbin.org/status/403')
case QNetworkReply::AuthenticationRequiredError: // Script.include('https://httpbin.org/basic-auth/user/passwd')
_result = AccessDenied;
break;
case QNetworkReply::RemoteHostClosedError: // Script.include('http://127.0.0.1:22')
case QNetworkReply::ConnectionRefusedError: // Script.include(http://127.0.0.1:1')
case QNetworkReply::HostNotFoundError: // Script.include('http://foo.bar.highfidelity.io')
case QNetworkReply::ServiceUnavailableError: // Script.include('QUrl("https://httpbin.org/status/503")')
_result = ServerUnavailable;
break;
case QNetworkReply::UnknownServerError: // Script.include('QUrl("https://httpbin.org/status/504")')
case QNetworkReply::InternalServerError: // Script.include('QUrl("https://httpbin.org/status/500")')
default:
qDebug() << "HTTPResourceRequest error:" << QMetaEnum::fromType<QNetworkReply::NetworkError>().valueToKey(_reply->error());
_result = Error;
break;
}

View file

@ -202,7 +202,14 @@ void ScriptCache::scriptContentAvailable() {
finished = true;
qCDebug(scriptengine) << "Done downloading script at:" << url.toString();
} else {
if (scriptRequest.numRetries < MAX_RETRIES) {
auto result = req->getResult();
bool irrecoverable =
result == ResourceRequest::AccessDenied ||
result == ResourceRequest::InvalidURL ||
result == ResourceRequest::NotFound ||
scriptRequest.numRetries >= MAX_RETRIES;
if (!irrecoverable) {
++scriptRequest.numRetries;
qDebug() << "Script request failed: " << url;