diff options
| author | Dan Engelbrecht <[email protected]> | 2023-06-15 15:52:39 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-06-15 16:52:39 +0200 |
| commit | 4e8b5262158bc245ddb6a4862f42ed064003baa5 (patch) | |
| tree | c5eaf2405aef014283f1f9a5c51ee2c62986159a /src/zenserver/upstream/jupiter.cpp | |
| parent | v0.2.13 (diff) | |
| download | zen-4e8b5262158bc245ddb6a4862f42ed064003baa5.tar.xz zen-4e8b5262158bc245ddb6a4862f42ed064003baa5.zip | |
Improve resonse messages from jupiter upstream (#333)
* Improve resonse messages from jupiter upstream
changelog
* simplify response parsing in jupiter upstream
* changelog
Diffstat (limited to 'src/zenserver/upstream/jupiter.cpp')
| -rw-r--r-- | src/zenserver/upstream/jupiter.cpp | 290 |
1 files changed, 81 insertions, 209 deletions
diff --git a/src/zenserver/upstream/jupiter.cpp b/src/zenserver/upstream/jupiter.cpp index bd075a436..eb90f60e7 100644 --- a/src/zenserver/upstream/jupiter.cpp +++ b/src/zenserver/upstream/jupiter.cpp @@ -62,6 +62,29 @@ namespace detail { cpr::Session m_Session; }; + CloudCacheResult ConvertResponse(const cpr::Response& Response) + { + if (Response.error) + { + return {.ElapsedSeconds = Response.elapsed, + .ErrorCode = static_cast<int32_t>(Response.error.code), + .Reason = Response.error.message, + .Success = false}; + } + if (!IsHttpSuccessCode(Response.status_code)) + { + return {.ElapsedSeconds = Response.elapsed, + .ErrorCode = static_cast<int32_t>(Response.status_code), + .Reason = Response.reason, + .Success = false}; + } + return {.Bytes = Response.downloaded_bytes, + .ElapsedSeconds = Response.elapsed, + .ErrorCode = gsl::narrow<int32_t>(Response.status_code), + .Reason = Response.reason, + .Success = true}; + } + } // namespace detail CloudCacheSession::CloudCacheSession(CloudCacheClient* CacheClient) : m_Log(CacheClient->Logger()), m_CacheClient(CacheClient) @@ -101,19 +124,12 @@ CloudCacheSession::GetRef(std::string_view Namespace, std::string_view BucketId, cpr::Response Response = Session.Get(); ZEN_DEBUG("GET {}", Response); - if (Response.error) - { - return {.ErrorCode = static_cast<int32_t>(Response.error.code), .Reason = Response.error.message}; - } - else if (!VerifyAccessToken(Response.status_code)) + CloudCacheResult Result = detail::ConvertResponse(Response); + if (Result.Success) { - return {.ErrorCode = 401, .Reason = std::string("Invalid access token")}; + Result.Response = IoBufferBuilder::MakeCloneFromMemory(Response.text.data(), Response.text.size()); } - - const bool Success = Response.status_code == 200; - const IoBuffer Buffer = Success ? IoBufferBuilder::MakeCloneFromMemory(Response.text.data(), Response.text.size()) : IoBuffer(); - - return {.Response = Buffer, .Bytes = Response.downloaded_bytes, .ElapsedSeconds = Response.elapsed, .Success = Success}; + return Result; } CloudCacheResult @@ -132,20 +148,12 @@ CloudCacheSession::GetBlob(std::string_view Namespace, const IoHash& Key) cpr::Response Response = Session.Get(); ZEN_DEBUG("GET {}", Response); - if (Response.error) - { - return {.ErrorCode = static_cast<int32_t>(Response.error.code), .Reason = Response.error.message}; - } - else if (!VerifyAccessToken(Response.status_code)) + CloudCacheResult Result = detail::ConvertResponse(Response); + if (Result.Success) { - return {.ErrorCode = 401, .Reason = std::string("Invalid access token")}; + Result.Response = IoBufferBuilder::MakeCloneFromMemory(Response.text.data(), Response.text.size()); } - - const bool Success = Response.status_code == 200; - const IoBuffer Buffer = - Success && Response.text.size() > 0 ? IoBufferBuilder::MakeCloneFromMemory(Response.text.data(), Response.text.size()) : IoBuffer(); - - return {.Response = Buffer, .Bytes = Response.downloaded_bytes, .ElapsedSeconds = Response.elapsed, .Success = Success}; + return Result; } CloudCacheResult @@ -166,19 +174,12 @@ CloudCacheSession::GetCompressedBlob(std::string_view Namespace, const IoHash& K cpr::Response Response = Session.Get(); ZEN_DEBUG("GET {}", Response); - if (Response.error) - { - return {.ErrorCode = static_cast<int32_t>(Response.error.code), .Reason = Response.error.message}; - } - else if (!VerifyAccessToken(Response.status_code)) + CloudCacheResult Result = detail::ConvertResponse(Response); + if (Result.Success) { - return {.ErrorCode = 401, .Reason = std::string("Invalid access token")}; + Result.Response = IoBufferBuilder::MakeCloneFromMemory(Response.text.data(), Response.text.size()); } - - const bool Success = Response.status_code == 200; - const IoBuffer Buffer = Success ? IoBufferBuilder::MakeCloneFromMemory(Response.text.data(), Response.text.size()) : IoBuffer(); - - return {.Response = Buffer, .Bytes = Response.downloaded_bytes, .ElapsedSeconds = Response.elapsed, .Success = Success}; + return Result; } CloudCacheResult @@ -199,17 +200,12 @@ CloudCacheSession::GetInlineBlob(std::string_view Namespace, std::string_view Bu cpr::Response Response = Session.Get(); ZEN_DEBUG("GET {}", Response); - if (Response.error) - { - return {.ErrorCode = static_cast<int32_t>(Response.error.code), .Reason = Response.error.message}; - } - else if (!VerifyAccessToken(Response.status_code)) + CloudCacheResult Result = detail::ConvertResponse(Response); + if (Result.Success) { - return {.ErrorCode = 401, .Reason = std::string("Invalid access token")}; + Result.Response = IoBufferBuilder::MakeCloneFromMemory(Response.text.data(), Response.text.size()); } - const bool Success = Response.status_code == 200; - const IoBuffer Buffer = Success ? IoBufferBuilder::MakeCloneFromMemory(Response.text.data(), Response.text.size()) : IoBuffer(); if (auto It = Response.header.find("X-Jupiter-InlinePayloadHash"); It != Response.header.end()) { const std::string& PayloadHashHeader = It->second; @@ -219,7 +215,7 @@ CloudCacheSession::GetInlineBlob(std::string_view Namespace, std::string_view Bu } } - return {.Response = Buffer, .Bytes = Response.downloaded_bytes, .ElapsedSeconds = Response.elapsed, .Success = Success}; + return Result; } CloudCacheResult @@ -240,19 +236,13 @@ CloudCacheSession::GetObject(std::string_view Namespace, const IoHash& Key) cpr::Response Response = Session.Get(); ZEN_DEBUG("GET {}", Response); - if (Response.error) - { - return {.ErrorCode = static_cast<int32_t>(Response.error.code), .Reason = Response.error.message}; - } - else if (!VerifyAccessToken(Response.status_code)) + CloudCacheResult Result = detail::ConvertResponse(Response); + if (Result.Success) { - return {.ErrorCode = 401, .Reason = std::string("Invalid access token")}; + Result.Response = IoBufferBuilder::MakeCloneFromMemory(Response.text.data(), Response.text.size()); } - const bool Success = Response.status_code == 200; - const IoBuffer Buffer = Success ? IoBufferBuilder::MakeCloneFromMemory(Response.text.data(), Response.text.size()) : IoBuffer(); - - return {.Response = Buffer, .Bytes = Response.downloaded_bytes, .ElapsedSeconds = Response.elapsed, .Success = Success}; + return Result; } PutRefResult @@ -278,26 +268,7 @@ CloudCacheSession::PutRef(std::string_view Namespace, std::string_view BucketId, cpr::Response Response = Session.Put(); ZEN_DEBUG("PUT {}", Response); - if (Response.error) - { - PutRefResult Result; - Result.ErrorCode = static_cast<int32_t>(Response.error.code); - Result.Reason = std::move(Response.error.message); - return Result; - } - else if (!VerifyAccessToken(Response.status_code)) - { - PutRefResult Result; - Result.ErrorCode = 401; - Result.Reason = "Invalid access token"sv; - return Result; - } - - PutRefResult Result; - Result.Success = (Response.status_code == 200 || Response.status_code == 201); - Result.Bytes = Response.uploaded_bytes; - Result.ElapsedSeconds = Response.elapsed; - + PutRefResult Result = {detail::ConvertResponse(Response)}; if (Result.Success) { std::string JsonError; @@ -311,6 +282,11 @@ CloudCacheSession::PutRef(std::string_view Namespace, std::string_view BucketId, } } } + else + { + Result.ErrorCode = Response.status_code; + Result.Reason = Response.reason; + } return Result; } @@ -336,25 +312,7 @@ CloudCacheSession::FinalizeRef(std::string_view Namespace, std::string_view Buck cpr::Response Response = Session.Post(); ZEN_DEBUG("POST {}", Response); - if (Response.error) - { - FinalizeRefResult Result; - Result.ErrorCode = static_cast<int32_t>(Response.error.code); - Result.Reason = std::move(Response.error.message); - return Result; - } - else if (!VerifyAccessToken(Response.status_code)) - { - FinalizeRefResult Result; - Result.ErrorCode = 401; - Result.Reason = "Invalid access token"sv; - return Result; - } - - FinalizeRefResult Result; - Result.Success = (Response.status_code == 200 || Response.status_code == 201); - Result.Bytes = Response.uploaded_bytes; - Result.ElapsedSeconds = Response.elapsed; + FinalizeRefResult Result = {detail::ConvertResponse(Response)}; if (Result.Success) { @@ -369,6 +327,11 @@ CloudCacheSession::FinalizeRef(std::string_view Namespace, std::string_view Buck } } } + else + { + Result.ErrorCode = Response.status_code; + Result.Reason = Response.reason; + } return Result; } @@ -391,18 +354,8 @@ CloudCacheSession::PutBlob(std::string_view Namespace, const IoHash& Key, IoBuff cpr::Response Response = Session.Put(); ZEN_DEBUG("PUT {}", Response); - if (Response.error) - { - return {.ErrorCode = static_cast<int32_t>(Response.error.code), .Reason = Response.error.message}; - } - else if (!VerifyAccessToken(Response.status_code)) - { - return {.ErrorCode = 401, .Reason = std::string("Invalid access token")}; - } - - return {.Bytes = Response.uploaded_bytes, - .ElapsedSeconds = Response.elapsed, - .Success = (Response.status_code == 200 || Response.status_code == 201)}; + CloudCacheResult Result = detail::ConvertResponse(Response); + return Result; } CloudCacheResult @@ -423,18 +376,8 @@ CloudCacheSession::PutCompressedBlob(std::string_view Namespace, const IoHash& K cpr::Response Response = Session.Put(); ZEN_DEBUG("PUT {}", Response); - if (Response.error) - { - return {.ErrorCode = static_cast<int32_t>(Response.error.code), .Reason = Response.error.message}; - } - else if (!VerifyAccessToken(Response.status_code)) - { - return {.ErrorCode = 401, .Reason = std::string("Invalid access token")}; - } - - return {.Bytes = Response.uploaded_bytes, - .ElapsedSeconds = Response.elapsed, - .Success = (Response.status_code == 200 || Response.status_code == 201)}; + CloudCacheResult Result = detail::ConvertResponse(Response); + return Result; } CloudCacheResult @@ -464,18 +407,8 @@ CloudCacheSession::PutCompressedBlob(std::string_view Namespace, const IoHash& K cpr::Response Response = Session.Put(); ZEN_DEBUG("PUT {}", Response); - if (Response.error) - { - return {.ErrorCode = static_cast<int32_t>(Response.error.code), .Reason = Response.error.message}; - } - else if (!VerifyAccessToken(Response.status_code)) - { - return {.ErrorCode = 401, .Reason = std::string("Invalid access token")}; - } - - return {.Bytes = Response.uploaded_bytes, - .ElapsedSeconds = Response.elapsed, - .Success = (Response.status_code == 200 || Response.status_code == 201)}; + CloudCacheResult Result = detail::ConvertResponse(Response); + return Result; } CloudCacheResult @@ -496,18 +429,8 @@ CloudCacheSession::PutObject(std::string_view Namespace, const IoHash& Key, IoBu cpr::Response Response = Session.Put(); ZEN_DEBUG("PUT {}", Response); - if (Response.error) - { - return {.ErrorCode = static_cast<int32_t>(Response.error.code), .Reason = Response.error.message}; - } - else if (!VerifyAccessToken(Response.status_code)) - { - return {.ErrorCode = 401, .Reason = std::string("Invalid access token")}; - } - - return {.Bytes = Response.uploaded_bytes, - .ElapsedSeconds = Response.elapsed, - .Success = (Response.status_code == 200 || Response.status_code == 201)}; + CloudCacheResult Result = detail::ConvertResponse(Response); + return Result; } CloudCacheResult @@ -528,16 +451,8 @@ CloudCacheSession::RefExists(std::string_view Namespace, std::string_view Bucket cpr::Response Response = Session.Head(); ZEN_DEBUG("HEAD {}", Response); - if (Response.error) - { - return {.ErrorCode = static_cast<int32_t>(Response.error.code), .Reason = Response.error.message}; - } - else if (!VerifyAccessToken(Response.status_code)) - { - return {.ErrorCode = 401, .Reason = std::string("Invalid access token")}; - } - - return {.ElapsedSeconds = Response.elapsed, .Success = Response.status_code == 200}; + CloudCacheResult Result = detail::ConvertResponse(Response); + return Result; } GetObjectReferencesResult @@ -558,17 +473,7 @@ CloudCacheSession::GetObjectReferences(std::string_view Namespace, const IoHash& cpr::Response Response = Session.Get(); ZEN_DEBUG("GET {}", Response); - if (Response.error) - { - return {CloudCacheResult{.ErrorCode = static_cast<int32_t>(Response.error.code), .Reason = Response.error.message}}; - } - else if (!VerifyAccessToken(Response.status_code)) - { - return {CloudCacheResult{.ErrorCode = 401, .Reason = std::string("Invalid access token")}}; - } - - GetObjectReferencesResult Result{ - CloudCacheResult{.Bytes = Response.downloaded_bytes, .ElapsedSeconds = Response.elapsed, .Success = Response.status_code == 200}}; + GetObjectReferencesResult Result = {detail::ConvertResponse(Response)}; if (Result.Success) { @@ -579,6 +484,11 @@ CloudCacheSession::GetObjectReferences(std::string_view Namespace, const IoHash& Result.References.insert(Item.AsHash()); } } + else + { + Result.ErrorCode = gsl::narrow<int32_t>(Response.status_code); + Result.Reason = Response.reason; + } return Result; } @@ -637,16 +547,8 @@ CloudCacheSession::PostComputeTasks(IoBuffer TasksData) cpr::Response Response = Session.Post(); ZEN_DEBUG("POST {}", Response); - if (Response.error) - { - return {.ErrorCode = static_cast<int32_t>(Response.error.code), .Reason = Response.error.message}; - } - else if (!VerifyAccessToken(Response.status_code)) - { - return {.ErrorCode = 401, .Reason = std::string("Invalid access token")}; - } - - return {.Bytes = Response.uploaded_bytes, .ElapsedSeconds = Response.elapsed, .Success = Response.status_code == 200}; + CloudCacheResult Result = detail::ConvertResponse(Response); + return Result; } CloudCacheResult @@ -668,19 +570,14 @@ CloudCacheSession::GetComputeUpdates(std::string_view ChannelId, const uint32_t cpr::Response Response = Session.Post(); ZEN_DEBUG("POST {}", Response); - if (Response.error) - { - return {.ErrorCode = static_cast<int32_t>(Response.error.code), .Reason = Response.error.message}; - } - else if (!VerifyAccessToken(Response.status_code)) + CloudCacheResult Result = detail::ConvertResponse(Response); + + if (Result.Success) { - return {.ErrorCode = 401, .Reason = std::string("Invalid access token")}; + Result.Response = IoBufferBuilder::MakeCloneFromMemory(Response.text.data(), Response.text.size()); } - const bool Success = Response.status_code == 200; - const IoBuffer Buffer = Success ? IoBufferBuilder::MakeCloneFromMemory(Response.text.data(), Response.text.size()) : IoBuffer(); - - return {.Response = Buffer, .Bytes = Response.downloaded_bytes, .ElapsedSeconds = Response.elapsed, .Success = Success}; + return Result; } std::vector<IoHash> @@ -707,12 +604,6 @@ CloudCacheSession::GetAccessToken(bool RefreshToken) return m_SessionState->GetAccessToken(RefreshToken); } -bool -CloudCacheSession::VerifyAccessToken(long StatusCode) -{ - return StatusCode != 401; -} - CloudCacheResult CloudCacheSession::CacheTypeExists(std::string_view Namespace, std::string_view TypeId, const IoHash& Key) { @@ -731,16 +622,8 @@ CloudCacheSession::CacheTypeExists(std::string_view Namespace, std::string_view cpr::Response Response = Session.Head(); ZEN_DEBUG("HEAD {}", Response); - if (Response.error) - { - return {.ErrorCode = static_cast<int32_t>(Response.error.code), .Reason = Response.error.message}; - } - else if (!VerifyAccessToken(Response.status_code)) - { - return {.ErrorCode = 401, .Reason = std::string("Invalid access token")}; - } - - return {.ElapsedSeconds = Response.elapsed, .Success = Response.status_code == 200}; + CloudCacheResult Result = detail::ConvertResponse(Response); + return Result; } CloudCacheExistsResult @@ -769,18 +652,7 @@ CloudCacheSession::CacheTypeExists(std::string_view Namespace, std::string_view cpr::Response Response = Session.Post(); ZEN_DEBUG("POST {}", Response); - - if (Response.error) - { - return {CloudCacheResult{.ErrorCode = static_cast<int32_t>(Response.error.code), .Reason = Response.error.message}}; - } - else if (!VerifyAccessToken(Response.status_code)) - { - return {CloudCacheResult{.ErrorCode = 401, .Reason = std::string("Invalid access token")}}; - } - - CloudCacheExistsResult Result{ - CloudCacheResult{.Bytes = Response.downloaded_bytes, .ElapsedSeconds = Response.elapsed, .Success = Response.status_code == 200}}; + CloudCacheExistsResult Result = {detail::ConvertResponse(Response)}; if (Result.Success) { |