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/projectstore.cpp | |
| parent | 0.1.9 (diff) | |
| download | zen-5041f3521c2b3074032c06ed04a391ed90a06c7e.tar.xz zen-5041f3521c2b3074032c06ed04a391ed90a06c7e.zip | |
reduce parsing of compressed headers
Diffstat (limited to 'zenserver/projectstore.cpp')
| -rw-r--r-- | zenserver/projectstore.cpp | 48 |
1 files changed, 30 insertions, 18 deletions
diff --git a/zenserver/projectstore.cpp b/zenserver/projectstore.cpp index 87118991e..5f804bd77 100644 --- a/zenserver/projectstore.cpp +++ b/zenserver/projectstore.cpp @@ -638,8 +638,8 @@ ProjectStore::Oplog::AppendNewOplogEntry(CbPackage OpPackage) ZEN_ASSERT(Attach.IsCompressedBinary()); CompressedBuffer AttachmentData = Attach.AsCompressedBinary(); - const uint64_t AttachmentSize = AttachmentData.GetRawSize(); - CidStore::InsertResult InsertResult = m_CidStore.AddChunk(AttachmentData); + const uint64_t AttachmentSize = AttachmentData.DecodeRawSize(); + CidStore::InsertResult InsertResult = m_CidStore.AddChunk(AttachmentData.GetCompressed().Flatten().AsIoBuffer(), Attach.GetHash()); if (InsertResult.New) { @@ -1407,9 +1407,11 @@ ProjectStore::GetChunkInfo(const std::string_view ProjectId, uint64_t ChunkSize = Chunk.GetSize(); if (Chunk.GetContentType() == HttpContentType::kCompressedBinary) { - CompressedBuffer Compressed = CompressedBuffer::FromCompressed(SharedBuffer(Chunk)); + IoHash RawHash; + uint64_t RawSize; + CompressedBuffer Compressed = CompressedBuffer::FromCompressed(SharedBuffer(Chunk), RawHash, RawSize); ZEN_ASSERT(!Compressed.IsNull()); - ChunkSize = Compressed.GetRawSize(); + ChunkSize = RawSize; } CbObjectWriter Response; @@ -1464,12 +1466,13 @@ ProjectStore::GetChunk(const std::string_view ProjectId, if (Chunk.GetContentType() == HttpContentType::kCompressedBinary) { - CompressedBuffer Compressed = CompressedBuffer::FromCompressed(SharedBuffer(Chunk)); + IoHash RawHash; + uint64_t RawSize; + CompressedBuffer Compressed = CompressedBuffer::FromCompressed(SharedBuffer(Chunk), RawHash, RawSize); ZEN_ASSERT(!Compressed.IsNull()); if (IsOffset) { - uint64_t RawSize = Compressed.GetRawSize(); if ((Offset + Size) > RawSize) { Size = RawSize - Offset; @@ -1539,7 +1542,7 @@ ProjectStore::GetChunk(const std::string_view Cid, ZenContentType AcceptType, Io if (AcceptType == HttpContentType::kBinary) { - CompressedBuffer Compressed = CompressedBuffer::FromCompressed(SharedBuffer(OutChunk)); + CompressedBuffer Compressed = CompressedBuffer::FromCompressedNoValidate(std::move(OutChunk)); OutChunk = Compressed.Decompress().AsIoBuffer(); OutChunk.SetContentType(HttpContentType::kBinary); } @@ -1821,7 +1824,7 @@ HttpProjectService::HttpProjectService(CidStore& Store, ProjectStore* Projects) if (AcceptType == HttpContentType::kBinary) { - CompressedBuffer Compressed = CompressedBuffer::FromCompressed(SharedBuffer(Value)); + CompressedBuffer Compressed = CompressedBuffer::FromCompressedNoValidate(std::move(Value)); Value = Compressed.Decompress().AsIoBuffer(); ContentType = HttpContentType::kBinary; } @@ -2066,7 +2069,7 @@ HttpProjectService::HttpProjectService(CidStore& Store, ProjectStore* Projects) break; case ZenContentType::kCompressedBinary: - if (CompressedBuffer Compressed = CompressedBuffer::FromCompressed(SharedBuffer(Payload))) + if (CompressedBuffer Compressed = CompressedBuffer::FromCompressedNoValidate(std::move(Payload))) { Package.AddAttachment(CbAttachment(Compressed, AttachmentHash)); } @@ -2199,7 +2202,8 @@ HttpProjectService::HttpProjectService(CidStore& Store, ProjectStore* Projects) { ZEN_INFO("Importing oplog '{}/{}'", ProjectId, OplogId); IoBuffer CompressedPayload = HttpReq.ReadPayload(); - IoBuffer Payload = CompressedBuffer::FromCompressed(SharedBuffer(CompressedPayload)).Decompress().AsIoBuffer(); + IoBuffer Payload = + CompressedBuffer::FromCompressedNoValidate(std::move(CompressedPayload)).Decompress().AsIoBuffer(); CbPackage RequestPackage = ParsePackageMessage(Payload); CbObject Request = RequestPackage.GetObject(); @@ -2252,7 +2256,9 @@ HttpProjectService::HttpProjectService(CidStore& Store, ProjectStore* Projects) JobCount.fetch_add(1); WorkerPool.ScheduleWork([this, &Attachment, &JobCount]() { CompressedBuffer AttachmentBody = Attachment.AsCompressedBinary(); - m_CidStore.AddChunk(AttachmentBody, CidStore::InsertMode::kCopyOnly); + m_CidStore.AddChunk(AttachmentBody.GetCompressed().Flatten().AsIoBuffer(), + Attachment.GetHash(), + CidStore::InsertMode::kCopyOnly); JobCount.fetch_add(-1); }); } @@ -2558,7 +2564,7 @@ namespace testutils { Object.BeginArray("bulkdata"); for (const auto& Attachment : Attachments) { - CbAttachment Attach(Attachment.second, IoHash::FromBLAKE3(Attachment.second.GetRawHash())); + CbAttachment Attach(Attachment.second, IoHash::FromBLAKE3(Attachment.second.DecodeRawHash())); Object.BeginObject(); Object << "id"sv << Attachment.first; Object << "type"sv @@ -2814,11 +2820,13 @@ TEST_CASE("project.store.partial.read") } { IoBuffer Chunk; - CHECK(ProjectStore.GetChunk(IoHash::FromBLAKE3(Attachments[OpIds[1]][0].second.GetRawHash()).ToHexString(), + CHECK(ProjectStore.GetChunk(IoHash::FromBLAKE3(Attachments[OpIds[1]][0].second.DecodeRawHash()).ToHexString(), HttpContentType::kCompressedBinary, Chunk) == HttpResponseCode::OK); - CompressedBuffer Attachment = CompressedBuffer::FromCompressed(SharedBuffer(Chunk)); - CHECK(Attachment.GetRawSize() == Attachments[OpIds[1]][0].second.GetRawSize()); + IoHash RawHash; + uint64_t RawSize; + CompressedBuffer Attachment = CompressedBuffer::FromCompressed(SharedBuffer(Chunk), RawHash, RawSize); + CHECK(RawSize == Attachments[OpIds[1]][0].second.DecodeRawSize()); } IoBuffer ChunkResult; @@ -2830,7 +2838,8 @@ TEST_CASE("project.store.partial.read") HttpContentType::kCompressedBinary, ChunkResult) == HttpResponseCode::OK); CHECK(ChunkResult); - CHECK(CompressedBuffer::FromCompressed(SharedBuffer(ChunkResult)).GetRawSize() == Attachments[OpIds[2]][1].second.GetRawSize()); + CHECK(CompressedBuffer::FromCompressedNoValidate(std::move(ChunkResult)).DecodeRawSize() == + Attachments[OpIds[2]][1].second.DecodeRawSize()); IoBuffer PartialChunkResult; CHECK(ProjectStore.GetChunk("proj1"sv, @@ -2841,8 +2850,11 @@ TEST_CASE("project.store.partial.read") HttpContentType::kCompressedBinary, PartialChunkResult) == HttpResponseCode::OK); CHECK(PartialChunkResult); - CompressedBuffer PartialCompressedResult = CompressedBuffer::FromCompressed(SharedBuffer(PartialChunkResult)); - CHECK(PartialCompressedResult.GetRawSize() >= 1773); + IoHash PartialRawHash; + uint64_t PartialRawSize; + CompressedBuffer PartialCompressedResult = + CompressedBuffer::FromCompressed(SharedBuffer(PartialChunkResult), PartialRawHash, PartialRawSize); + CHECK(PartialRawSize >= 1773); uint64_t RawOffsetInPartialCompressed = GetCompressedOffset(PartialCompressedResult, 5); SharedBuffer PartialDecompressed = PartialCompressedResult.Decompress(RawOffsetInPartialCompressed); |