aboutsummaryrefslogtreecommitdiff
path: root/zenserver/upstream
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2022-11-18 12:02:41 +0100
committerDan Engelbrecht <[email protected]>2022-11-25 10:17:34 +0100
commit5041f3521c2b3074032c06ed04a391ed90a06c7e (patch)
treefbe6c18c79de5abff79394b69d65e38004d9e39e /zenserver/upstream
parent0.1.9 (diff)
downloadzen-5041f3521c2b3074032c06ed04a391ed90a06c7e.tar.xz
zen-5041f3521c2b3074032c06ed04a391ed90a06c7e.zip
reduce parsing of compressed headers
Diffstat (limited to 'zenserver/upstream')
-rw-r--r--zenserver/upstream/hordecompute.cpp8
-rw-r--r--zenserver/upstream/upstreamcache.cpp62
2 files changed, 44 insertions, 26 deletions
diff --git a/zenserver/upstream/hordecompute.cpp b/zenserver/upstream/hordecompute.cpp
index 988386726..64d9fff72 100644
--- a/zenserver/upstream/hordecompute.cpp
+++ b/zenserver/upstream/hordecompute.cpp
@@ -983,10 +983,12 @@ namespace detail {
return;
}
+ IoHash RawHash;
+ uint64_t RawSize;
CompressedBuffer AttachmentBuffer =
- CompressedBuffer::FromCompressed(SharedBuffer(BinaryData[CompressedId]));
+ CompressedBuffer::FromCompressed(SharedBuffer(BinaryData[CompressedId]), RawHash, RawSize);
- if (!AttachmentBuffer)
+ if (!AttachmentBuffer || RawHash != DecompressedId)
{
Log().warn(
"Invalid output encountered (not valid CompressedBuffer format) {} compressed {} uncompressed",
@@ -997,7 +999,7 @@ namespace detail {
}
ApplyResult.TotalAttachmentBytes += AttachmentBuffer.GetCompressedSize();
- ApplyResult.TotalRawAttachmentBytes += AttachmentBuffer.GetRawSize();
+ ApplyResult.TotalRawAttachmentBytes += RawSize;
CbAttachment Attachment(AttachmentBuffer, DecompressedId);
OutputPackage.AddAttachment(Attachment);
diff --git a/zenserver/upstream/upstreamcache.cpp b/zenserver/upstream/upstreamcache.cpp
index bc06653b9..92dac12de 100644
--- a/zenserver/upstream/upstreamcache.cpp
+++ b/zenserver/upstream/upstreamcache.cpp
@@ -214,7 +214,10 @@ namespace detail {
Result.ElapsedSeconds += AttachmentResult.ElapsedSeconds;
Result.ErrorCode = AttachmentResult.ErrorCode;
- if (CompressedBuffer Chunk = CompressedBuffer::FromCompressed(SharedBuffer(AttachmentResult.Response)))
+ IoHash RawHash;
+ uint64_t RawSize;
+ if (CompressedBuffer Chunk =
+ CompressedBuffer::FromCompressed(SharedBuffer(AttachmentResult.Response), RawHash, RawSize))
{
Result.Response = AttachmentResult.Response;
++NumAttachments;
@@ -251,7 +254,10 @@ namespace detail {
Result.ElapsedSeconds += AttachmentResult.ElapsedSeconds;
Result.ErrorCode = AttachmentResult.ErrorCode;
- if (CompressedBuffer Chunk = CompressedBuffer::FromCompressed(SharedBuffer(AttachmentResult.Response)))
+ IoHash RawHash;
+ uint64_t RawSize;
+ if (CompressedBuffer Chunk =
+ CompressedBuffer::FromCompressed(SharedBuffer(AttachmentResult.Response), RawHash, RawSize))
{
Package.AddAttachment(CbAttachment(Chunk, AttachmentHash.AsHash()));
}
@@ -335,7 +341,10 @@ namespace detail {
if (BlobResult.ErrorCode == 0)
{
- if (CompressedBuffer Chunk = CompressedBuffer::FromCompressed(SharedBuffer(BlobResult.Response)))
+ IoHash RawHash;
+ uint64_t RawSize;
+ if (CompressedBuffer Chunk =
+ CompressedBuffer::FromCompressed(SharedBuffer(BlobResult.Response), RawHash, RawSize))
{
Package.AddAttachment(CbAttachment(Chunk, AttachmentHash.AsHash()));
}
@@ -398,6 +407,8 @@ namespace detail {
{
CacheChunkRequest& Request = *RequestPtr;
IoBuffer Payload;
+ IoHash RawHash = IoHash::Zero;
+ uint64_t RawSize = 0;
double ElapsedSeconds = 0.0;
CompressedBuffer Compressed;
@@ -416,15 +427,15 @@ namespace detail {
m_Status.SetFromErrorCode(BlobResult.ErrorCode, BlobResult.Reason);
if (Payload && IsCompressedBinary(Payload.GetContentType()))
{
- Compressed = CompressedBuffer::FromCompressed(SharedBuffer(Payload));
+ Compressed = CompressedBuffer::FromCompressed(SharedBuffer(Payload), RawHash, RawSize);
}
}
if (Compressed)
{
OnComplete({.Request = Request,
- .RawHash = IoHash::FromBLAKE3(Compressed.GetRawHash()),
- .RawSize = Compressed.GetRawSize(),
+ .RawHash = RawHash,
+ .RawSize = RawSize,
.Value = Payload,
.ElapsedSeconds = ElapsedSeconds,
.Source = &m_Info});
@@ -451,6 +462,8 @@ namespace detail {
{
CacheValueRequest& Request = *RequestPtr;
IoBuffer Payload;
+ IoHash RawHash = IoHash::Zero;
+ uint64_t RawSize = 0;
double ElapsedSeconds = 0.0;
CompressedBuffer Compressed;
@@ -470,12 +483,12 @@ namespace detail {
{
if (IsCompressedBinary(Payload.GetContentType()))
{
- Compressed = CompressedBuffer::FromCompressed(SharedBuffer(Payload));
+ Compressed = CompressedBuffer::FromCompressed(SharedBuffer(Payload), RawHash, RawSize);
}
else
{
- Compressed = CompressedBuffer::Compress(SharedBuffer(Payload));
- IoHash RawHash = IoHash::FromBLAKE3(Compressed.GetRawHash());
+ Compressed = CompressedBuffer::Compress(SharedBuffer(Payload));
+ RawHash = IoHash::FromBLAKE3(Compressed.DecodeRawHash());
if (RawHash != PayloadHash)
{
ZEN_WARN("Horde request for inline payload of {}/{}/{} has hash {}, expected hash {} from header",
@@ -493,8 +506,8 @@ namespace detail {
if (Compressed)
{
OnComplete({.Request = Request,
- .RawHash = IoHash::FromBLAKE3(Compressed.GetRawHash()),
- .RawSize = Compressed.GetRawSize(),
+ .RawHash = RawHash,
+ .RawSize = RawSize,
.Value = Payload,
.ElapsedSeconds = ElapsedSeconds,
.Source = &m_Info});
@@ -543,17 +556,17 @@ namespace detail {
}
else if (CacheRecord.Type == ZenContentType::kCompressedBinary)
{
- CompressedBuffer Compressed = CompressedBuffer::FromCompressed(SharedBuffer(RecordValue));
+ IoHash RawHash;
+ uint64_t RawSize;
+ CompressedBuffer Compressed = CompressedBuffer::FromCompressed(SharedBuffer(RecordValue), RawHash, RawSize);
if (!Compressed)
{
return {.Reason = std::string("Invalid compressed value buffer"), .Success = false};
}
- IoHash RawHash = IoHash::FromBLAKE3(Compressed.GetRawHash());
-
CbObjectWriter ReferencingObject;
ReferencingObject.AddBinaryAttachment("RawHash", RawHash);
- ReferencingObject.AddInteger("RawSize", Compressed.GetRawSize());
+ ReferencingObject.AddInteger("RawSize", RawSize);
return PerformStructuredPut(
Session,
@@ -1053,7 +1066,7 @@ namespace detail {
{
Payload = Compressed.GetCompressed().Flatten().AsIoBuffer();
Payload.SetContentType(ZenContentType::kCompressedBinary);
- RawSize = Compressed.GetRawSize();
+ RawSize = Compressed.DecodeRawSize();
Success = true;
}
}
@@ -1189,7 +1202,7 @@ namespace detail {
{
Payload = Compressed.GetCompressed().Flatten().AsIoBuffer();
Payload.SetContentType(ZenContentType::kCompressedBinary);
- RawSize = Compressed.GetRawSize();
+ RawSize = Compressed.DecodeRawSize();
Success = true;
}
}
@@ -1252,9 +1265,11 @@ namespace detail {
for (const IoBuffer& Value : Values)
{
- if (CompressedBuffer AttachmentBuffer = CompressedBuffer::FromCompressed(SharedBuffer(Value)))
+ IoHash RawHash;
+ uint64_t RawSize;
+ if (CompressedBuffer AttachmentBuffer = CompressedBuffer::FromCompressed(SharedBuffer(Value), RawHash, RawSize))
{
- Package.AddAttachment(CbAttachment(AttachmentBuffer, IoHash::FromBLAKE3(AttachmentBuffer.GetRawHash())));
+ Package.AddAttachment(CbAttachment(AttachmentBuffer, RawHash));
}
else
{
@@ -1282,7 +1297,9 @@ namespace detail {
}
else if (CacheRecord.Type == ZenContentType::kCompressedBinary)
{
- CompressedBuffer Compressed = CompressedBuffer::FromCompressed(SharedBuffer(RecordValue));
+ IoHash RawHash;
+ uint64_t RawSize;
+ CompressedBuffer Compressed = CompressedBuffer::FromCompressed(SharedBuffer(RecordValue), RawHash, RawSize);
if (!Compressed)
{
return {.Reason = std::string("Invalid value compressed buffer"), .Success = false};
@@ -1312,9 +1329,8 @@ namespace detail {
}
BatchWriter.EndObject();
// Policy unspecified and expected to be Default
- IoHash Hash = IoHash::FromBLAKE3(Compressed.GetRawHash());
- BatchWriter.AddBinaryAttachment("RawHash"sv, Hash);
- BatchPackage.AddAttachment(CbAttachment(Compressed, Hash));
+ BatchWriter.AddBinaryAttachment("RawHash"sv, RawHash);
+ BatchPackage.AddAttachment(CbAttachment(Compressed, RawHash));
}
BatchWriter.EndObject();
}