diff options
| author | Stefan Boberg <[email protected]> | 2021-08-23 19:12:14 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-08-23 19:12:14 +0200 |
| commit | 9497ba8cba4347112e4335ca02d143aec8a45f24 (patch) | |
| tree | 7c625a69063fc6aecbc4eb6384d5a561ce94e3ad /zenstore/include | |
| parent | Improved ZenCacheStore::DropBucket logic and added logging (diff) | |
| download | zen-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.h | 14 |
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: |