aboutsummaryrefslogtreecommitdiff
path: root/src/zenutil/filebuildstorage.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2025-03-01 10:10:53 +0100
committerGitHub Enterprise <[email protected]>2025-03-01 10:10:53 +0100
commit19b3c492dcc0fc3f8879ecb60124ca64dea9b7ef (patch)
treec0aa4e89d4a4eaf9d202898a37a3303182907c22 /src/zenutil/filebuildstorage.cpp
parentimprove error handling (#289) (diff)
downloadzen-19b3c492dcc0fc3f8879ecb60124ca64dea9b7ef.tar.xz
zen-19b3c492dcc0fc3f8879ecb60124ca64dea9b7ef.zip
builds download incremental (#290)
* incremental download * merge rebuild state and output state building * fix writing when > 1 zero size file
Diffstat (limited to 'src/zenutil/filebuildstorage.cpp')
-rw-r--r--src/zenutil/filebuildstorage.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/zenutil/filebuildstorage.cpp b/src/zenutil/filebuildstorage.cpp
index 78ebcdd55..a4bb759e7 100644
--- a/src/zenutil/filebuildstorage.cpp
+++ b/src/zenutil/filebuildstorage.cpp
@@ -336,7 +336,8 @@ public:
const std::filesystem::path BlockPath = GetBlobPayloadPath(RawHash);
if (std::filesystem::is_regular_file(BlockPath))
{
- IoBuffer Payload = ReadFile(BlockPath).Flatten();
+ BasicFile File(BlockPath, BasicFile::Mode::kRead);
+ IoBuffer Payload = File.ReadAll();
ZEN_ASSERT_SLOW(ValidateCompressedBuffer(RawHash, CompositeBuffer(SharedBuffer(Payload))));
m_Stats.TotalBytesRead += Payload.GetSize();
Payload.SetContentType(ZenContentType::kCompressedBinary);
@@ -365,13 +366,13 @@ public:
struct WorkloadData
{
std::atomic<uint64_t> BytesRemaining;
- IoBuffer BlobFile;
+ BasicFile BlobFile;
std::function<void(uint64_t Offset, const IoBuffer& Chunk, uint64_t BytesRemaining)> Receiver;
};
std::shared_ptr<WorkloadData> Workload(std::make_shared<WorkloadData>());
- Workload->BlobFile = IoBufferBuilder::MakeFromFile(BlockPath);
- const uint64_t BlobSize = Workload->BlobFile.GetSize();
+ Workload->BlobFile.Open(BlockPath, BasicFile::Mode::kRead);
+ const uint64_t BlobSize = Workload->BlobFile.FileSize();
Workload->Receiver = std::move(Receiver);
Workload->BytesRemaining = BlobSize;
@@ -383,7 +384,8 @@ public:
uint64_t Size = Min(ChunkSize, BlobSize - Offset);
WorkItems.push_back([this, BlockPath, Workload, Offset, Size]() {
SimulateLatency(0, 0);
- IoBuffer PartPayload(Workload->BlobFile, Offset, Size);
+ IoBuffer PartPayload(Size);
+ Workload->BlobFile.Read(PartPayload.GetMutableView().GetData(), Size, Offset);
m_Stats.TotalBytesRead += PartPayload.GetSize();
uint64_t ByteRemaning = Workload->BytesRemaining.fetch_sub(Size);
Workload->Receiver(Offset, PartPayload, ByteRemaning);