From ddb84cb54f7cf6777d2ccaed4338fff56b75922c Mon Sep 17 00:00:00 2001 From: Per Larsson Date: Wed, 22 Sep 2021 21:21:15 +0200 Subject: Made upstream endpoints more resilient to failures by checking health/reconnecting at regular intervals. --- zenserver/upstream/jupiter.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'zenserver/upstream/jupiter.cpp') diff --git a/zenserver/upstream/jupiter.cpp b/zenserver/upstream/jupiter.cpp index 2e74602db..14da8cbcc 100644 --- a/zenserver/upstream/jupiter.cpp +++ b/zenserver/upstream/jupiter.cpp @@ -90,6 +90,11 @@ CloudCacheSession::GetDerivedData(std::string_view BucketId, std::string_view Ke cpr::Response Response = Session.Get(); ZEN_DEBUG("GET {}", Response); + if (Response.error) + { + return {.ErrorCode = static_cast(Response.error.code), .Reason = Response.error.message}; + } + const bool Success = Response.status_code == 200; const IoBuffer Buffer = Success ? IoBufferBuilder::MakeCloneFromMemory(Response.text.data(), Response.text.size()) : IoBuffer(); @@ -121,6 +126,11 @@ CloudCacheSession::GetRef(std::string_view BucketId, const IoHash& Key, ZenConte cpr::Response Response = Session.Get(); ZEN_DEBUG("GET {}", Response); + if (Response.error) + { + return {.ErrorCode = static_cast(Response.error.code), .Reason = Response.error.message}; + } + const bool Success = Response.status_code == 200; const IoBuffer Buffer = Success ? IoBufferBuilder::MakeCloneFromMemory(Response.text.data(), Response.text.size()) : IoBuffer(); @@ -144,6 +154,11 @@ CloudCacheSession::GetCompressedBlob(const IoHash& Key) cpr::Response Response = Session.Get(); ZEN_DEBUG("GET {}", Response); + if (Response.error) + { + return {.ErrorCode = static_cast(Response.error.code), .Reason = Response.error.message}; + } + const bool Success = Response.status_code == 200; const IoBuffer Buffer = Success ? IoBufferBuilder::MakeCloneFromMemory(Response.text.data(), Response.text.size()) : IoBuffer(); @@ -171,6 +186,11 @@ CloudCacheSession::PutDerivedData(std::string_view BucketId, std::string_view Ke cpr::Response Response = Session.Put(); ZEN_DEBUG("PUT {}", Response); + if (Response.error) + { + return {.ErrorCode = static_cast(Response.error.code), .Reason = Response.error.message}; + } + return {.Bytes = Response.uploaded_bytes, .ElapsedSeconds = Response.elapsed, .Success = (Response.status_code == 200 || Response.status_code == 201)}; @@ -204,6 +224,11 @@ CloudCacheSession::PutRef(std::string_view BucketId, const IoHash& Key, IoBuffer cpr::Response Response = Session.Put(); ZEN_DEBUG("PUT {}", Response); + if (Response.error) + { + return {.ErrorCode = static_cast(Response.error.code), .Reason = Response.error.message}; + } + return {.Bytes = Response.uploaded_bytes, .ElapsedSeconds = Response.elapsed, .Success = (Response.status_code == 200 || Response.status_code == 201)}; @@ -227,6 +252,11 @@ CloudCacheSession::PutCompressedBlob(const IoHash& Key, IoBuffer Blob) cpr::Response Response = Session.Put(); ZEN_DEBUG("PUT {}", Response); + if (Response.error) + { + return {.ErrorCode = static_cast(Response.error.code), .Reason = Response.error.message}; + } + return {.Bytes = Response.uploaded_bytes, .ElapsedSeconds = Response.elapsed, .Success = (Response.status_code == 200 || Response.status_code == 201)}; -- cgit v1.2.3