Update ResourceCache to retry an asset request when the node is unavailable

This commit is contained in:
Ryan Huffman 2015-08-28 10:59:38 -07:00
parent 9575b47e4e
commit c6d98f3c67
3 changed files with 18 additions and 0 deletions

View file

@ -13,6 +13,7 @@
#include "AssetClient.h"
#include "AssetRequest.h"
#include "AssetUtils.h"
void AssetResourceRequest::doSend() {
// Make request to atp
@ -21,9 +22,23 @@ void AssetResourceRequest::doSend() {
auto hash = parts[0];
auto extension = parts.length() > 1 ? parts[1] : "";
if (hash.length() != SHA256_HASH_HEX_LENGTH) {
_result = InvalidURL;
_state = Finished;
emit finished();
return;
}
auto request = assetClient->createRequest(hash, extension);
if (!request) {
_result = ServerUnavailable;
_state = Finished;
emit finished();
return;
}

View file

@ -396,6 +396,7 @@ void Resource::handleReplyFinished() {
bool retry = false;
switch (result) {
case ResourceRequest::Result::Timeout:
case ResourceRequest::Result::ServerUnavailable:
case ResourceRequest::Result::Error: {
// retry with increasing delays
const int MAX_ATTEMPTS = 8;

View file

@ -30,7 +30,9 @@ public:
Success,
Error,
Timeout,
ServerUnavailable,
AccessDenied,
InvalidURL,
NotFound
};