aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/upstream/jupiter.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2023-06-15 15:52:39 +0100
committerGitHub <[email protected]>2023-06-15 16:52:39 +0200
commit4e8b5262158bc245ddb6a4862f42ed064003baa5 (patch)
treec5eaf2405aef014283f1f9a5c51ee2c62986159a /src/zenserver/upstream/jupiter.cpp
parentv0.2.13 (diff)
downloadzen-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.cpp290
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)
{