diff options
| author | Dan Engelbrecht <[email protected]> | 2025-05-30 18:28:18 +0200 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-05-30 18:28:18 +0200 |
| commit | 6a958656168bdab4a02a34f9697e713fb34a8047 (patch) | |
| tree | c00c19bd46c49fea01b30036926d498dca7b50a3 /src/zenstore/buildstore | |
| parent | faster oplog validate (#408) (diff) | |
| download | zen-6a958656168bdab4a02a34f9697e713fb34a8047.tar.xz zen-6a958656168bdab4a02a34f9697e713fb34a8047.zip | |
add missing flush inblockstore compact (#411)
- Bugfix: Flush the last block before closing the last new block written to during blockstore compact. UE-291196
- Feature: Drop unreachable CAS data during GC pass. UE-291196
Diffstat (limited to 'src/zenstore/buildstore')
| -rw-r--r-- | src/zenstore/buildstore/buildstore.cpp | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/zenstore/buildstore/buildstore.cpp b/src/zenstore/buildstore/buildstore.cpp index 6eb01dfc4..41c747e08 100644 --- a/src/zenstore/buildstore/buildstore.cpp +++ b/src/zenstore/buildstore/buildstore.cpp @@ -1237,7 +1237,9 @@ public: m_Store.m_MetadataBlockStore.CompactBlocks( BlockCompactState, m_Store.m_Config.MetadataBlockStoreAlignement, - [&](const BlockStore::MovedChunksArray& MovedArray, uint64_t FreedDiskSpace) { + [&](const BlockStore::MovedChunksArray& MovedArray, + const BlockStore::ChunkIndexArray& ScrubbedArray, + uint64_t FreedDiskSpace) { std::vector<MetadataDiskEntry> MovedEntries; MovedEntries.reserve(MovedArray.size()); RwLock::ExclusiveLockScope _(m_Store.m_Lock); @@ -1264,7 +1266,27 @@ public: } } } + + for (size_t Scrubbed : ScrubbedArray) + { + const IoHash& Key = BlockCompactStateKeys[Scrubbed]; + if (auto It = m_Store.m_BlobLookup.find(Key); It != m_Store.m_BlobLookup.end()) + { + const BlobIndex Index = It->second; + + if (MetadataIndex Meta = m_Store.m_BlobEntries[Index].Metadata; Meta) + { + MovedEntries.push_back( + MetadataDiskEntry{.Entry = m_Store.m_MetadataEntries[Meta], .BlobHash = Key}); + MovedEntries.back().Entry.Flags |= MetadataEntry::kTombStone; + m_Store.m_MetadataEntries[Meta] = {}; + m_Store.m_BlobEntries[Index].Metadata = {}; + } + } + } + m_Store.m_MetadatalogFile.Append(MovedEntries); + Stats.RemovedDisk += FreedDiskSpace; if (Ctx.IsCancelledFlag.load()) { |