aboutsummaryrefslogtreecommitdiff
path: root/zenstore/compactcas.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-08-23 19:12:14 +0200
committerStefan Boberg <[email protected]>2021-08-23 19:12:14 +0200
commit9497ba8cba4347112e4335ca02d143aec8a45f24 (patch)
tree7c625a69063fc6aecbc4eb6384d5a561ce94e3ad /zenstore/compactcas.cpp
parentImproved ZenCacheStore::DropBucket logic and added logging (diff)
downloadzen-9497ba8cba4347112e4335ca02d143aec8a45f24.tar.xz
zen-9497ba8cba4347112e4335ca02d143aec8a45f24.zip
Implemented more formalised CAS chunk filtering (with plenty of room for optimization)
Diffstat (limited to 'zenstore/compactcas.cpp')
-rw-r--r--zenstore/compactcas.cpp33
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()
{