diff options
Diffstat (limited to 'zenstore/compactcas.cpp')
| -rw-r--r-- | zenstore/compactcas.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/zenstore/compactcas.cpp b/zenstore/compactcas.cpp index b658425e7..4407d8b08 100644 --- a/zenstore/compactcas.cpp +++ b/zenstore/compactcas.cpp @@ -116,6 +116,39 @@ CasContainerStrategy::FindChunk(const IoHash& ChunkHash) return IoBuffer(); } +bool +CasContainerStrategy::HaveChunk(const IoHash& ChunkHash) +{ + RwLock::SharedLockScope _(m_LocationMapLock); + auto KeyIt = m_LocationMap.find(ChunkHash); + + if (KeyIt != m_LocationMap.end()) + { + return true; + } + + return false; +} + +void +CasContainerStrategy::FilterChunks(CasChunkSet& InOutChunks) +{ + std::unordered_set<IoHash> HaveSet; + + for (const IoHash& Hash : InOutChunks.GetChunkSet()) + { + if (HaveChunk(Hash)) + { + HaveSet.insert(Hash); + } + } + + for (const IoHash& Hash : HaveSet) + { + InOutChunks.RemoveIfPresent(Hash); + } +} + void CasContainerStrategy::Flush() { |