diff options
| author | Dan Engelbrecht <[email protected]> | 2022-11-18 12:02:41 +0100 |
|---|---|---|
| committer | Dan Engelbrecht <[email protected]> | 2022-11-25 10:17:34 +0100 |
| commit | 5041f3521c2b3074032c06ed04a391ed90a06c7e (patch) | |
| tree | fbe6c18c79de5abff79394b69d65e38004d9e39e /zenserver/upstream | |
| parent | 0.1.9 (diff) | |
| download | zen-5041f3521c2b3074032c06ed04a391ed90a06c7e.tar.xz zen-5041f3521c2b3074032c06ed04a391ed90a06c7e.zip | |
reduce parsing of compressed headers
Diffstat (limited to 'zenserver/upstream')
| -rw-r--r-- | zenserver/upstream/hordecompute.cpp | 8 | ||||
| -rw-r--r-- | zenserver/upstream/upstreamcache.cpp | 62 |
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(); } |