aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2024-04-30 10:11:25 +0200
committerGitHub Enterprise <[email protected]>2024-04-30 10:11:25 +0200
commitc7a0ddf9f26fdd647574e4031a66362234298e7a (patch)
tree5e3eba1856dc160ca0beb2bc5edaf1ea490a0a6f /src/zenserver
parentmiscellaneous minor bugfixes (#66) (diff)
downloadzen-c7a0ddf9f26fdd647574e4031a66362234298e7a.tar.xz
zen-c7a0ddf9f26fdd647574e4031a66362234298e7a.zip
fix get project files loop (#68)
- Bugfix: Remove extra loop causing GetProjectFiles for project store to find all chunks once for each chunk found - Bugfix: Don't capture ChunkIndex variable in CasImpl::IterateChunks by reference as it causes crash - Improvement: Make FileCasStrategy::IterateChunks (optionally) multithreaded (improves GetProjectFiles performance)
Diffstat (limited to 'src/zenserver')
-rw-r--r--src/zenserver/projectstore/projectstore.cpp43
1 files changed, 20 insertions, 23 deletions
diff --git a/src/zenserver/projectstore/projectstore.cpp b/src/zenserver/projectstore/projectstore.cpp
index 1e53dfd94..afb2c100c 100644
--- a/src/zenserver/projectstore/projectstore.cpp
+++ b/src/zenserver/projectstore/projectstore.cpp
@@ -938,7 +938,7 @@ ProjectStore::Oplog::IterateChunks(std::span<Oid> ChunkIds,
{
break;
}
- OptionalWorkerPool->ScheduleWork([&]() {
+ OptionalWorkerPool->ScheduleWork([&WorkLatch, ChunkIndex, &FileChunkIndexes, &FileChunkPaths, &AsyncCallback, &Result]() {
auto _ = MakeGuard([&WorkLatch]() { WorkLatch.CountDown(); });
if (Result.load() == false)
{
@@ -2730,30 +2730,27 @@ ProjectStore::GetProjectFiles(const std::string_view ProjectId,
RawSizes.resize(Ids.size(), 0u);
}
- for (size_t Index = 0; Index < Ids.size(); Index++)
- {
- FoundLog->IterateChunks(
- Ids,
- [&](size_t Index, const IoBuffer& Payload) {
- uint64_t Size = Payload.GetSize();
- if (WantsRawSizeField)
- {
- uint64_t RawSize = Size;
- if (Payload.GetContentType() == ZenContentType::kCompressedBinary)
- {
- IoHash __;
- (void)CompressedBuffer::FromCompressed(SharedBuffer(Payload), __, RawSize);
- }
- RawSizes[Index] = RawSize;
- }
- if (WantsSizeField)
+ FoundLog->IterateChunks(
+ Ids,
+ [&](size_t Index, const IoBuffer& Payload) {
+ uint64_t Size = Payload.GetSize();
+ if (WantsRawSizeField)
+ {
+ uint64_t RawSize = Size;
+ if (Payload.GetContentType() == ZenContentType::kCompressedBinary)
{
- Sizes[Index] = Size;
+ IoHash __;
+ (void)CompressedBuffer::FromCompressed(SharedBuffer(Payload), __, RawSize);
}
- return true;
- },
- &GetSmallWorkerPool());
- }
+ RawSizes[Index] = RawSize;
+ }
+ if (WantsSizeField)
+ {
+ Sizes[Index] = Size;
+ }
+ return true;
+ },
+ &GetSmallWorkerPool());
}
CbObjectWriter Response;