aboutsummaryrefslogtreecommitdiff
path: root/zenserver/projectstore.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2022-09-30 15:13:45 +0200
committerGitHub <[email protected]>2022-09-30 06:13:45 -0700
commitbcc85c7e5cbcf0737f5180e3d601e63b480e8949 (patch)
tree134d702e98ec63ff06e6d08345a4d021812d33b3 /zenserver/projectstore.cpp
parentUse bucket/key to get inline value in upstream for chunks without a chunkid (... (diff)
downloadzen-bcc85c7e5cbcf0737f5180e3d601e63b480e8949.tar.xz
zen-bcc85c7e5cbcf0737f5180e3d601e63b480e8949.zip
De/reduce buffer creation in parsepackedmessage (#175)
* Don't create call CreateBuffer for attachement data that we only read and not keep * changelog * don't read oplog attachments into memory just to do a redundant store of them
Diffstat (limited to 'zenserver/projectstore.cpp')
-rw-r--r--zenserver/projectstore.cpp14
1 files changed, 7 insertions, 7 deletions
diff --git a/zenserver/projectstore.cpp b/zenserver/projectstore.cpp
index 93276f029..19978c3e9 100644
--- a/zenserver/projectstore.cpp
+++ b/zenserver/projectstore.cpp
@@ -1544,8 +1544,13 @@ HttpProjectService::HttpProjectService(CidStore& Store, ProjectStore* Projects)
std::vector<IoHash> MissingChunks;
CbPackage::AttachmentResolver Resolver = [&](const IoHash& Hash) -> SharedBuffer {
- IoHash AttachmentId;
+ if (m_CidStore.ContainsChunk(Hash))
+ {
+ // Return null attachment as we already have it, no point in reading it and storing it again
+ return {};
+ }
+ IoHash AttachmentId;
if (IsUsingSalt)
{
IoHash AttachmentSpec[]{SaltHash, Hash};
@@ -1557,12 +1562,7 @@ HttpProjectService::HttpProjectService(CidStore& Store, ProjectStore* Projects)
}
std::filesystem::path AttachmentPath = Oplog.TempPath() / AttachmentId.ToHexString();
-
- if (IoBuffer CompressedData = m_CidStore.FindChunkByCid(Hash))
- {
- return SharedBuffer(std::move(CompressedData));
- }
- else if (IoBuffer Data = IoBufferBuilder::MakeFromTemporaryFile(AttachmentPath))
+ if (IoBuffer Data = IoBufferBuilder::MakeFromTemporaryFile(AttachmentPath))
{
return SharedBuffer(std::move(Data));
}