aboutsummaryrefslogtreecommitdiff
path: root/zenserver/upstream/upstreamcache.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2022-09-08 08:55:38 +0200
committerGitHub <[email protected]>2022-09-07 23:55:38 -0700
commitc96d28abc6c2c526295ec8ef9b7959b0ff862d23 (patch)
tree7b1e116a3184bb38a47621660f11871c1cd254ff /zenserver/upstream/upstreamcache.cpp
parentImplement proper GetCacheValues upstream (#155) (diff)
downloadzen-c96d28abc6c2c526295ec8ef9b7959b0ff862d23.tar.xz
zen-c96d28abc6c2c526295ec8ef9b7959b0ff862d23.zip
Added CloudCacheSession::GetInlineBlob to properly get CacheValues (#159)
* Added CloudCacheSession::GetInlineBlob to properly get CacheValues from Horde Issue #UE-162151 * validate uncompressed binary from Horde "application/x-jupiter-inline" response
Diffstat (limited to 'zenserver/upstream/upstreamcache.cpp')
-rw-r--r--zenserver/upstream/upstreamcache.cpp28
1 files changed, 24 insertions, 4 deletions
diff --git a/zenserver/upstream/upstreamcache.cpp b/zenserver/upstream/upstreamcache.cpp
index 7f5759e47..e92dde815 100644
--- a/zenserver/upstream/upstreamcache.cpp
+++ b/zenserver/upstream/upstreamcache.cpp
@@ -442,15 +442,35 @@ namespace detail {
if (!Result.Error)
{
std::string_view BlobStoreNamespace = GetActualBlobStoreNamespace(Session, Namespace);
- const CloudCacheResult BlobResult = Session.GetCompressedBlob(BlobStoreNamespace, IoHash::Zero);
- Payload = BlobResult.Response;
+ IoHash PayloadHash;
+ const CloudCacheResult BlobResult =
+ Session.GetInlineBlob(BlobStoreNamespace, Request.Key.Bucket, Request.Key.Hash, PayloadHash);
+ Payload = BlobResult.Response;
AppendResult(BlobResult, Result);
m_Status.SetFromErrorCode(BlobResult.ErrorCode, BlobResult.Reason);
- if (Payload && IsCompressedBinary(Payload.GetContentType()))
+ if (Payload)
{
- Compressed = CompressedBuffer::FromCompressed(SharedBuffer(Payload));
+ if (IsCompressedBinary(Payload.GetContentType()))
+ {
+ Compressed = CompressedBuffer::FromCompressed(SharedBuffer(Payload));
+ }
+ else
+ {
+ Compressed = CompressedBuffer::Compress(SharedBuffer(Payload));
+ IoHash RawHash = IoHash::FromBLAKE3(Compressed.GetRawHash());
+ if (RawHash != PayloadHash)
+ {
+ ZEN_WARN("Horde request for inline payload of {}/{}/{} has hash {}, expected hash {} from header",
+ Namespace,
+ Request.Key.Bucket,
+ Request.Key.Hash.ToHexString(),
+ RawHash.ToHexString(),
+ PayloadHash.ToHexString());
+ Compressed.Reset();
+ }
+ }
}
}