From 7df585a13cd8d445396bbfbc10ad127dce89b272 Mon Sep 17 00:00:00 2001 From: Dan Engelbrecht Date: Tue, 10 Oct 2023 13:12:02 +0200 Subject: cache reference tracking (#455) - Feature: Add caching of referenced CId content for structured cache records, this avoid disk thrashing when gathering references for GC - disabled by default, enable with `--cache-reference-cache-enabled` - Improvement: Faster collection of referenced CId content in project store --- src/zenserver/projectstore/projectstore.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'src/zenserver/projectstore/projectstore.cpp') diff --git a/src/zenserver/projectstore/projectstore.cpp b/src/zenserver/projectstore/projectstore.cpp index e000976ea..02760f6dd 100644 --- a/src/zenserver/projectstore/projectstore.cpp +++ b/src/zenserver/projectstore/projectstore.cpp @@ -507,14 +507,17 @@ ProjectStore::Oplog::GatherReferences(GcContext& GcCtx) return; } - tsl::robin_set AttachmentHashes; + std::vector Cids; + Cids.reserve(1024); IterateOplog([&](CbObject Op) { - Op.IterateAttachments([&](CbFieldView Visitor) { - IoHash Attachment = Visitor.AsAttachment(); - AttachmentHashes.insert(Attachment); - }); + Op.IterateAttachments([&](CbFieldView Visitor) { Cids.emplace_back(Visitor.AsAttachment()); }); + if (Cids.size() >= 1024) + { + GcCtx.AddRetainedCids(Cids); + Cids.clear(); + } }); - GcCtx.AddRetainedCids(std::vector(AttachmentHashes.begin(), AttachmentHashes.end())); + GcCtx.AddRetainedCids(Cids); } uint64_t -- cgit v1.2.3