aboutsummaryrefslogtreecommitdiff
path: root/src/zenstore/include
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2024-05-02 10:53:15 +0200
committerGitHub Enterprise <[email protected]>2024-05-02 10:53:15 +0200
commit1bafcb32cb48b2256a9d72995388b7df72058039 (patch)
tree2385ec3de36c4f45018832eb36bcab6ac2d3670f /src/zenstore/include
parentfix get project files loop (#68) (diff)
downloadzen-1bafcb32cb48b2256a9d72995388b7df72058039.tar.xz
zen-1bafcb32cb48b2256a9d72995388b7df72058039.zip
batch cache put (#67)
- Improvement: Batch scope for put of cache values
Diffstat (limited to 'src/zenstore/include')
-rw-r--r--src/zenstore/include/zenstore/cache/cachedisklayer.h23
-rw-r--r--src/zenstore/include/zenstore/cache/structuredcachestore.h29
2 files changed, 46 insertions, 6 deletions
diff --git a/src/zenstore/include/zenstore/cache/cachedisklayer.h b/src/zenstore/include/zenstore/cache/cachedisklayer.h
index 471cc5dcd..427c338d6 100644
--- a/src/zenstore/include/zenstore/cache/cachedisklayer.h
+++ b/src/zenstore/include/zenstore/cache/cachedisklayer.h
@@ -164,8 +164,16 @@ public:
explicit ZenCacheDiskLayer(GcManager& Gc, JobQueue& JobQueue, const std::filesystem::path& RootDir, const Configuration& Config);
~ZenCacheDiskLayer();
+ struct BatchHandle;
+ BatchHandle* BeginPutBatch(std::vector<bool>& OutResult);
+ void EndPutBatch(BatchHandle* Batch) noexcept;
+
bool Get(std::string_view Bucket, const IoHash& HashKey, ZenCacheValue& OutValue);
- void Put(std::string_view Bucket, const IoHash& HashKey, const ZenCacheValue& Value, std::span<IoHash> References);
+ void Put(std::string_view Bucket,
+ const IoHash& HashKey,
+ const ZenCacheValue& Value,
+ std::span<IoHash> References,
+ BatchHandle* OptionalBatchHandle);
bool Drop();
bool DropBucket(std::string_view Bucket);
void Flush();
@@ -196,9 +204,13 @@ public:
CacheBucket(GcManager& Gc, std::atomic_uint64_t& OuterCacheMemoryUsage, std::string BucketName, const BucketConfiguration& Config);
~CacheBucket();
- bool OpenOrCreate(std::filesystem::path BucketDir, bool AllowCreate = true);
+ bool OpenOrCreate(std::filesystem::path BucketDir, bool AllowCreate = true);
+ struct BatchHandle;
+ BatchHandle* BeginPutBatch(std::vector<bool>& OutResult);
+ void EndPutBatch(BatchHandle* Batch) noexcept;
+
bool Get(const IoHash& HashKey, ZenCacheValue& OutValue);
- void Put(const IoHash& HashKey, const ZenCacheValue& Value, std::span<IoHash> References);
+ void Put(const IoHash& HashKey, const ZenCacheValue& Value, std::span<IoHash> References, BatchHandle* OptionalBatchHandle);
uint64_t MemCacheTrim(GcClock::TimePoint ExpireTime);
bool Drop();
void Flush();
@@ -327,7 +339,10 @@ public:
void BuildPath(PathBuilderBase& Path, const IoHash& HashKey) const;
void PutStandaloneCacheValue(const IoHash& HashKey, const ZenCacheValue& Value, std::span<IoHash> References);
IoBuffer GetStandaloneCacheValue(const DiskLocation& Loc, const IoHash& HashKey) const;
- void PutInlineCacheValue(const IoHash& HashKey, const ZenCacheValue& Value, std::span<IoHash> References);
+ void PutInlineCacheValue(const IoHash& HashKey,
+ const ZenCacheValue& Value,
+ std::span<IoHash> References,
+ BatchHandle* OptionalBatchHandle = nullptr);
IoBuffer GetInlineCacheValue(const DiskLocation& Loc) const;
CacheValueDetails::ValueDetails GetValueDetails(RwLock::SharedLockScope&, const IoHash& Key, PayloadIndex Index) const;
diff --git a/src/zenstore/include/zenstore/cache/structuredcachestore.h b/src/zenstore/include/zenstore/cache/structuredcachestore.h
index 3bed93d70..02bbeed77 100644
--- a/src/zenstore/include/zenstore/cache/structuredcachestore.h
+++ b/src/zenstore/include/zenstore/cache/structuredcachestore.h
@@ -80,8 +80,16 @@ public:
ZenCacheNamespace(GcManager& Gc, JobQueue& JobQueue, const std::filesystem::path& RootDir, const Configuration& Config);
~ZenCacheNamespace();
+ struct BatchHandle;
+ BatchHandle* BeginPutBatch(std::vector<bool>& OutResults);
+ void EndPutBatch(BatchHandle* Batch) noexcept;
+
bool Get(std::string_view Bucket, const IoHash& HashKey, ZenCacheValue& OutValue);
- void Put(std::string_view Bucket, const IoHash& HashKey, const ZenCacheValue& Value, std::span<IoHash> References);
+ void Put(std::string_view Bucket,
+ const IoHash& HashKey,
+ const ZenCacheValue& Value,
+ std::span<IoHash> References,
+ BatchHandle* OptionalBatchHandle = nullptr);
bool DropBucket(std::string_view Bucket);
void EnumerateBucketContents(std::string_view Bucket,
@@ -184,17 +192,34 @@ public:
const DiskWriteBlocker* InDiskWriteBlocker);
~ZenCacheStore();
+ class PutBatch
+ {
+ public:
+ PutBatch(ZenCacheStore& CacheStore, std::string_view Namespace, std::vector<bool>& OutResult);
+ ~PutBatch();
+
+ private:
+ ZenCacheStore& m_CacheStore;
+ ZenCacheNamespace* m_Store = nullptr;
+ ZenCacheNamespace::BatchHandle* m_NamespaceBatchHandle = nullptr;
+
+ friend class ZenCacheStore;
+ };
+
bool Get(const CacheRequestContext& Context,
std::string_view Namespace,
std::string_view Bucket,
const IoHash& HashKey,
ZenCacheValue& OutValue);
+
void Put(const CacheRequestContext& Context,
std::string_view Namespace,
std::string_view Bucket,
const IoHash& HashKey,
const ZenCacheValue& Value,
- std::span<IoHash> References);
+ std::span<IoHash> References,
+ PutBatch* OptionalBatchHandle = nullptr);
+
bool DropBucket(std::string_view Namespace, std::string_view Bucket);
bool DropNamespace(std::string_view Namespace);
void Flush();