aboutsummaryrefslogtreecommitdiff
path: root/zenstore/include
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/include
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/include')
-rw-r--r--zenstore/include/zenstore/CAS.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/zenstore/include/zenstore/CAS.h b/zenstore/include/zenstore/CAS.h
index f01b562cb..ec594af8b 100644
--- a/zenstore/include/zenstore/CAS.h
+++ b/zenstore/include/zenstore/CAS.h
@@ -12,6 +12,7 @@
#include <filesystem>
#include <memory>
#include <string>
+#include <unordered_set>
namespace zen {
@@ -27,6 +28,18 @@ struct CasStoreConfiguration
uint64_t HugeValueThreshold = 1024 * 1024;
};
+class CasChunkSet
+{
+public:
+ void AddChunk(const IoHash& HashToAdd) { m_ChunkSet.insert(HashToAdd); }
+ bool RemoveIfPresent(const IoHash& HashToRemove) { return 0 != m_ChunkSet.erase(HashToRemove); }
+ const std::unordered_set<IoHash>& GetChunkSet() const { return m_ChunkSet; }
+ bool IsEmpty() const { return m_ChunkSet.empty(); }
+
+private:
+ std::unordered_set<IoHash> m_ChunkSet;
+};
+
class CasStore
{
public:
@@ -52,6 +65,7 @@ public:
virtual void Initialize(const CasStoreConfiguration& Config) = 0;
virtual InsertResult InsertChunk(IoBuffer Data, const IoHash& ChunkHash) = 0;
virtual IoBuffer FindChunk(const IoHash& ChunkHash) = 0;
+ virtual void FilterChunks(CasChunkSet& InOutChunks) = 0;
virtual void Flush() = 0;
protected: