aboutsummaryrefslogtreecommitdiff
path: root/zenutil/cache/cacherequests.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2022-12-07 11:21:41 +0100
committerGitHub <[email protected]>2022-12-07 02:21:41 -0800
commit100c8f966b1c5b2fb190748f0177600562d1c5fe (patch)
treefc85e350dea47330149a1d42eb7a6c7ae0a06111 /zenutil/cache/cacherequests.cpp
parentCache request record/replay (#198) (diff)
downloadzen-100c8f966b1c5b2fb190748f0177600562d1c5fe.tar.xz
zen-100c8f966b1c5b2fb190748f0177600562d1c5fe.zip
optimizations (#200)
* Use direct file read and direct buffer allocation for small IoBuffer materalization * Reduce range of materialized data in CompositeBuffer reading CompressedBuffer header reading often only need a small part and not the whole file * reduce lock contention in IoBuffer::Materialize * Reduce parsing of compressed headers Validate header type at decompression * faster CreateDirectories - start from leaf going up and recurse back * optimized BufferHeader::IsValid * Add ValidateCompressedHeader to use when we don't need the actual compressed data Validate that we always get compressed data in CidStore::AddChunk * changelog
Diffstat (limited to 'zenutil/cache/cacherequests.cpp')
-rw-r--r--zenutil/cache/cacherequests.cpp77
1 files changed, 38 insertions, 39 deletions
diff --git a/zenutil/cache/cacherequests.cpp b/zenutil/cache/cacherequests.cpp
index 1ba2721b6..e6df4b4aa 100644
--- a/zenutil/cache/cacherequests.cpp
+++ b/zenutil/cache/cacherequests.cpp
@@ -227,7 +227,7 @@ namespace cacherequests {
PutCacheRecordRequestValue& Value = Request.Values[It->second];
ZEN_ASSERT(Value.RawHash == ValueHash);
Value.Body = Attachment->AsCompressedBinary();
- ZEN_ASSERT(IoHash::FromBLAKE3(Value.Body.GetRawHash()) == Value.RawHash);
+ ZEN_ASSERT_SLOW(IoHash::FromBLAKE3(Value.Body.DecodeRawHash()) == Value.RawHash);
}
}
});
@@ -268,10 +268,10 @@ namespace cacherequests {
const CompressedBuffer& Buffer = Value.Body;
if (Buffer)
{
- IoHash AttachmentHash = IoHash::FromBLAKE3(Buffer.GetRawHash());
+ IoHash AttachmentHash = IoHash::FromBLAKE3(Buffer.DecodeRawHash()); // TODO: Slow!
Writer.AddBinaryAttachment("RawHash", AttachmentHash);
OutPackage.AddAttachment(CbAttachment(Buffer, AttachmentHash));
- Writer.AddInteger("RawSize", Buffer.GetRawSize());
+ Writer.AddInteger("RawSize", Buffer.DecodeRawSize()); // TODO: Slow!
}
else
{
@@ -500,12 +500,12 @@ namespace cacherequests {
Writer.BeginArray("Values");
for (const GetCacheRecordResultValue& Value : RecordResult->Values)
{
- IoHash AttachmentHash = Value.Body ? IoHash::FromBLAKE3(Value.Body.GetRawHash()) : Value.RawHash;
+ IoHash AttachmentHash = Value.Body ? IoHash::FromBLAKE3(Value.Body.DecodeRawHash()) : Value.RawHash;
Writer.BeginObject();
{
Writer.AddObjectId("Id", Value.Id);
Writer.AddHash("RawHash", AttachmentHash);
- Writer.AddInteger("RawSize", Value.Body ? Value.Body.GetRawSize() : Value.RawSize);
+ Writer.AddInteger("RawSize", Value.Body ? Value.Body.DecodeRawSize() : Value.RawSize);
}
Writer.EndObject();
if (Value.Body)
@@ -591,12 +591,11 @@ namespace cacherequests {
WriteCacheRequestKey(Writer, ValueRequest.Key);
if (ValueRequest.Body)
{
- if (ValueRequest.RawHash != IoHash::Zero &&
- IoHash::FromBLAKE3(ValueRequest.Body.GetRawHash()) != ValueRequest.RawHash)
+ IoHash AttachmentHash = IoHash::FromBLAKE3(ValueRequest.Body.DecodeRawHash());
+ if (ValueRequest.RawHash != IoHash::Zero && AttachmentHash != ValueRequest.RawHash)
{
return false;
}
- IoHash AttachmentHash = IoHash::FromBLAKE3(ValueRequest.Body.GetRawHash());
Writer.AddBinaryAttachment("RawHash", AttachmentHash);
OutPackage.AddAttachment(CbAttachment(ValueRequest.Body, AttachmentHash));
}
@@ -776,7 +775,7 @@ namespace cacherequests {
ValueResult.Body = Attachment ? Attachment->AsCompressedBinary() : CompressedBuffer();
if (ValueResult.Body)
{
- ValueResult.RawSize = ValueResult.Body.GetRawSize();
+ ValueResult.RawSize = ValueResult.Body.DecodeRawSize();
}
else
{
@@ -1042,8 +1041,8 @@ namespace cacherequests {
static bool operator==(const PutCacheRecordRequestValue& Lhs, const PutCacheRecordRequestValue& Rhs)
{
- const IoHash LhsRawHash = Lhs.RawHash != IoHash::Zero ? Lhs.RawHash : IoHash::FromBLAKE3(Lhs.Body.GetRawHash());
- const IoHash RhsRawHash = Rhs.RawHash != IoHash::Zero ? Rhs.RawHash : IoHash::FromBLAKE3(Rhs.Body.GetRawHash());
+ const IoHash LhsRawHash = Lhs.RawHash != IoHash::Zero ? Lhs.RawHash : IoHash::FromBLAKE3(Lhs.Body.DecodeRawHash());
+ const IoHash RhsRawHash = Rhs.RawHash != IoHash::Zero ? Rhs.RawHash : IoHash::FromBLAKE3(Rhs.Body.DecodeRawHash());
return Lhs.Id == Rhs.Id && LhsRawHash == RhsRawHash &&
Lhs.Body.GetCompressed().Flatten().GetView().EqualBytes(Rhs.Body.GetCompressed().Flatten().GetView());
}
@@ -1112,7 +1111,7 @@ namespace cacherequests {
{
return false;
}
- if (bool(Lhs.Body) && Lhs.Body.GetRawHash() != Rhs.Body.GetRawHash())
+ if (bool(Lhs.Body) && Lhs.Body.DecodeRawHash() != Rhs.Body.DecodeRawHash())
{
return false;
}
@@ -1313,31 +1312,31 @@ namespace cacherequests {
GetCacheRecordsResult FullResult = {
{GetCacheRecordResult{.Key = FullPutRequestCopy.Requests[0].Key,
.Values = {{.Id = FullPutRequestCopy.Requests[0].Values[0].Id,
- .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[0].Values[0].Body.GetRawHash()),
- .RawSize = FullPutRequestCopy.Requests[0].Values[0].Body.GetRawSize(),
+ .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[0].Values[0].Body.DecodeRawHash()),
+ .RawSize = FullPutRequestCopy.Requests[0].Values[0].Body.DecodeRawSize(),
.Body = FullPutRequestCopy.Requests[0].Values[0].Body},
{.Id = FullPutRequestCopy.Requests[0].Values[1].Id,
- .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[0].Values[1].Body.GetRawHash()),
- .RawSize = FullPutRequestCopy.Requests[0].Values[1].Body.GetRawSize(),
+ .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[0].Values[1].Body.DecodeRawHash()),
+ .RawSize = FullPutRequestCopy.Requests[0].Values[1].Body.DecodeRawSize(),
.Body = FullPutRequestCopy.Requests[0].Values[1].Body},
{.Id = FullPutRequestCopy.Requests[0].Values[2].Id,
- .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[0].Values[2].Body.GetRawHash()),
- .RawSize = FullPutRequestCopy.Requests[0].Values[2].Body.GetRawSize(),
+ .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[0].Values[2].Body.DecodeRawHash()),
+ .RawSize = FullPutRequestCopy.Requests[0].Values[2].Body.DecodeRawSize(),
.Body = FullPutRequestCopy.Requests[0].Values[2].Body}}},
{}, // Simulate not have!
GetCacheRecordResult{.Key = FullPutRequestCopy.Requests[2].Key,
.Values = {{.Id = FullPutRequestCopy.Requests[2].Values[0].Id,
- .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[2].Values[0].Body.GetRawHash()),
- .RawSize = FullPutRequestCopy.Requests[2].Values[0].Body.GetRawSize(),
+ .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[2].Values[0].Body.DecodeRawHash()),
+ .RawSize = FullPutRequestCopy.Requests[2].Values[0].Body.DecodeRawSize(),
.Body = FullPutRequestCopy.Requests[2].Values[0].Body},
{.Id = FullPutRequestCopy.Requests[2].Values[1].Id,
- .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[2].Values[1].Body.GetRawHash()),
- .RawSize = FullPutRequestCopy.Requests[2].Values[1].Body.GetRawSize(),
+ .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[2].Values[1].Body.DecodeRawHash()),
+ .RawSize = FullPutRequestCopy.Requests[2].Values[1].Body.DecodeRawSize(),
.Body = {}}, // Simulate not have
{.Id = FullPutRequestCopy.Requests[2].Values[2].Id,
- .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[2].Values[2].Body.GetRawHash()),
- .RawSize = FullPutRequestCopy.Requests[2].Values[2].Body.GetRawSize(),
+ .RawHash = IoHash::FromBLAKE3(FullPutRequestCopy.Requests[2].Values[2].Body.DecodeRawHash()),
+ .RawSize = FullPutRequestCopy.Requests[2].Values[2].Body.DecodeRawSize(),
.Body = FullPutRequestCopy.Requests[2].Values[2].Body}}}}};
CbPackage FullResponsePackage;
CHECK(FullResult.Format(FullResponsePackage));
@@ -1369,15 +1368,15 @@ namespace cacherequests {
.DefaultPolicy = CachePolicy::StoreLocal,
.Namespace = "other_namespace",
.Requests = {{.Key = {.Bucket = "finebucket", .Hash = IoHash::FromHexString("d1df59fcab06793a5f2c372d795bb907a15cab15")},
- .RawHash = IoHash::FromBLAKE3(Buffers[0].GetRawHash()),
+ .RawHash = IoHash::FromBLAKE3(Buffers[0].DecodeRawHash()),
.Body = Buffers[0],
.Policy = CachePolicy::Local},
{.Key = {.Bucket = "badbucket", .Hash = IoHash::FromHexString("177030568fdd461bf4fe5ddbf4d463e514e8178e")},
- .RawHash = IoHash::FromBLAKE3(Buffers[1].GetRawHash()),
+ .RawHash = IoHash::FromBLAKE3(Buffers[1].DecodeRawHash()),
.Body = Buffers[1],
.Policy = CachePolicy::Remote},
{.Key = {.Bucket = "badbucket", .Hash = IoHash::FromHexString("e1ce9e1ac8a6f5953dc14c1fa9512b804ed689df")},
- .RawHash = IoHash::FromBLAKE3(Buffers[2].GetRawHash())}}};
+ .RawHash = IoHash::FromBLAKE3(Buffers[2].DecodeRawHash())}}};
CbPackage FullRequestPackage;
CHECK(FullRequest.Format(FullRequestPackage));
@@ -1441,12 +1440,12 @@ namespace cacherequests {
{MakeCompressedBuffer(5123), MakeCompressedBuffer(2321), MakeCompressedBuffer(2333)}};
CacheValuesResult FullResult = {
.Results = {
- CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][0].GetRawHash()), .Body = Buffers[0][0]},
- CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][1].GetRawHash()), .Body = Buffers[0][1]},
- CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][2].GetRawHash()), .Body = Buffers[0][2]},
- CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[2][0].GetRawHash()), .Body = Buffers[2][0]},
- CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[2][1].GetRawHash()), .Body = Buffers[2][1]},
- CacheValueResult{.RawSize = Buffers[2][2].GetRawSize(), .RawHash = IoHash::FromBLAKE3(Buffers[2][2].GetRawHash())}}};
+ CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][0].DecodeRawHash()), .Body = Buffers[0][0]},
+ CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][1].DecodeRawHash()), .Body = Buffers[0][1]},
+ CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][2].DecodeRawHash()), .Body = Buffers[0][2]},
+ CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[2][0].DecodeRawHash()), .Body = Buffers[2][0]},
+ CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[2][1].DecodeRawHash()), .Body = Buffers[2][1]},
+ CacheValueResult{.RawSize = Buffers[2][2].DecodeRawSize(), .RawHash = IoHash::FromBLAKE3(Buffers[2][2].DecodeRawHash())}}};
CbPackage FullResponsePackage;
CHECK(FullResult.Format(FullResponsePackage));
CacheValuesResult FullResultCopy;
@@ -1511,12 +1510,12 @@ namespace cacherequests {
{MakeCompressedBuffer(5123), MakeCompressedBuffer(2321), MakeCompressedBuffer(2333)}};
GetCacheChunksResult FullResult = {
.Results = {
- CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][0].GetRawHash()), .Body = Buffers[0][0]},
- CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][1].GetRawHash()), .Body = Buffers[0][1]},
- CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][2].GetRawHash()), .Body = Buffers[0][2]},
- CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[2][0].GetRawHash()), .Body = Buffers[2][0]},
- CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[2][1].GetRawHash()), .Body = Buffers[2][1]},
- CacheValueResult{.RawSize = Buffers[2][2].GetRawSize(), .RawHash = IoHash::FromBLAKE3(Buffers[2][2].GetRawHash())}}};
+ CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][0].DecodeRawHash()), .Body = Buffers[0][0]},
+ CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][1].DecodeRawHash()), .Body = Buffers[0][1]},
+ CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[0][2].DecodeRawHash()), .Body = Buffers[0][2]},
+ CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[2][0].DecodeRawHash()), .Body = Buffers[2][0]},
+ CacheValueResult{.RawSize = 0, .RawHash = IoHash::FromBLAKE3(Buffers[2][1].DecodeRawHash()), .Body = Buffers[2][1]},
+ CacheValueResult{.RawSize = Buffers[2][2].DecodeRawSize(), .RawHash = IoHash::FromBLAKE3(Buffers[2][2].DecodeRawHash())}}};
CbPackage FullResponsePackage;
CHECK(FullResult.Format(FullResponsePackage));
GetCacheChunksResult FullResultCopy;