diff options
| author | Dan Engelbrecht <[email protected]> | 2025-12-04 16:20:58 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-12-04 16:20:58 +0100 |
| commit | ec69a0d3d8febf15aa5df347e514c5071c19ff71 (patch) | |
| tree | 51a38b7394243281d1378f803a75a277c098edf9 /src/zenstore/include | |
| parent | add checks to protect against access violation due to failed disk read (#675) (diff) | |
| download | zen-ec69a0d3d8febf15aa5df347e514c5071c19ff71.tar.xz zen-ec69a0d3d8febf15aa5df347e514c5071c19ff71.zip | |
batch op not in destructor (#676)
* use fixed vectors for batch requests
* refactor cache batch value put/get to not execute code that can throw execeptions in destructor
* extend test with multi-bucket requests
Diffstat (limited to 'src/zenstore/include')
| -rw-r--r-- | src/zenstore/include/zenstore/cache/cachedisklayer.h | 21 | ||||
| -rw-r--r-- | src/zenstore/include/zenstore/cache/structuredcachestore.h | 20 |
2 files changed, 26 insertions, 15 deletions
diff --git a/src/zenstore/include/zenstore/cache/cachedisklayer.h b/src/zenstore/include/zenstore/cache/cachedisklayer.h index 1b501e9ae..ef2781c1a 100644 --- a/src/zenstore/include/zenstore/cache/cachedisklayer.h +++ b/src/zenstore/include/zenstore/cache/cachedisklayer.h @@ -183,19 +183,22 @@ public: zen::PutStatus Status; CbObject Details; }; + typedef eastl::fixed_vector<PutResult, 32> ZenCachePutResultVec_t; explicit ZenCacheDiskLayer(GcManager& Gc, JobQueue& JobQueue, const std::filesystem::path& RootDir, const Configuration& Config); ~ZenCacheDiskLayer(); struct GetBatchHandle; - GetBatchHandle* BeginGetBatch(ZenCacheValueVec_t& OutResult); - void EndGetBatch(GetBatchHandle* Batch) noexcept; + GetBatchHandle* CreateGetBatch(ZenCacheValueVec_t& OutResult); + void CommitGetBatch(GetBatchHandle* Batch); + void DeleteGetBatch(GetBatchHandle* Batch) noexcept; bool Get(std::string_view Bucket, const IoHash& HashKey, ZenCacheValue& OutValue); void Get(std::string_view Bucket, const IoHash& HashKey, GetBatchHandle& BatchHandle); struct PutBatchHandle; - PutBatchHandle* BeginPutBatch(std::vector<PutResult>& OutResult); - void EndPutBatch(PutBatchHandle* Batch) noexcept; + PutBatchHandle* CreatePutBatch(ZenCachePutResultVec_t& OutResult); + void CommitPutBatch(PutBatchHandle* Batch); + void DeletePutBatch(PutBatchHandle* Batch) noexcept; PutResult Put(std::string_view Bucket, const IoHash& HashKey, @@ -245,14 +248,16 @@ public: bool OpenOrCreate(std::filesystem::path BucketDir, bool AllowCreate = true); struct GetBatchHandle; - GetBatchHandle* BeginGetBatch(ZenCacheValueVec_t& OutResult); - void EndGetBatch(GetBatchHandle* Batch) noexcept; + GetBatchHandle* CreateGetBatch(ZenCacheValueVec_t& OutResult); + void CommitGetBatch(GetBatchHandle* Batch); + void DeleteGetBatch(GetBatchHandle* Batch) noexcept; bool Get(const IoHash& HashKey, ZenCacheValue& OutValue); void Get(const IoHash& HashKey, GetBatchHandle& BatchHandle); struct PutBatchHandle; - PutBatchHandle* BeginPutBatch(std::vector<ZenCacheDiskLayer::PutResult>& OutResult); - void EndPutBatch(PutBatchHandle* Batch) noexcept; + PutBatchHandle* CreatePutBatch(ZenCachePutResultVec_t& OutResult); + void CommitPutBatch(PutBatchHandle* Batch); + void DeletePutBatch(PutBatchHandle* Batch) noexcept; PutResult Put(const IoHash& HashKey, const ZenCacheValue& Value, std::span<IoHash> References, diff --git a/src/zenstore/include/zenstore/cache/structuredcachestore.h b/src/zenstore/include/zenstore/cache/structuredcachestore.h index 75692cfcd..5a0a8b069 100644 --- a/src/zenstore/include/zenstore/cache/structuredcachestore.h +++ b/src/zenstore/include/zenstore/cache/structuredcachestore.h @@ -78,18 +78,21 @@ public: ZenCacheDiskLayer::DiskStats DiskStats; }; - using PutResult = ZenCacheDiskLayer::PutResult; + using PutResult = ZenCacheDiskLayer::PutResult; + using ZenCachePutResultVec_t = ZenCacheDiskLayer::ZenCachePutResultVec_t; ZenCacheNamespace(GcManager& Gc, JobQueue& JobQueue, const std::filesystem::path& RootDir, const Configuration& Config); ~ZenCacheNamespace(); struct PutBatchHandle; - PutBatchHandle* BeginPutBatch(std::vector<PutResult>& OutResults); - void EndPutBatch(PutBatchHandle* Batch) noexcept; + PutBatchHandle* CreatePutBatch(ZenCachePutResultVec_t& OutResults); + void CommitPutBatch(PutBatchHandle* Batch); + void DeletePutBatch(PutBatchHandle* Batch) noexcept; struct GetBatchHandle; - GetBatchHandle* BeginGetBatch(ZenCacheValueVec_t& OutResults); - void EndGetBatch(GetBatchHandle* Batch) noexcept; + GetBatchHandle* CreateGetBatch(ZenCacheValueVec_t& OutResults); + void CommitGetBatch(GetBatchHandle* Batch); + void DeleteGetBatch(GetBatchHandle* Batch) noexcept; bool Get(std::string_view Bucket, const IoHash& HashKey, ZenCacheValue& OutValue); void Get(std::string_view Bucket, const IoHash& HashKey, GetBatchHandle& OptionalBatchHandle); @@ -196,7 +199,8 @@ public: std::vector<NamedNamespaceStats> NamespaceStats; }; - using PutResult = ZenCacheNamespace::PutResult; + using PutResult = ZenCacheNamespace::PutResult; + using ZenCachePutResultVec_t = ZenCacheDiskLayer::ZenCachePutResultVec_t; ZenCacheStore(GcManager& Gc, JobQueue& JobQueue, @@ -208,7 +212,8 @@ public: class PutBatch { public: - PutBatch(ZenCacheStore& CacheStore, std::string_view Namespace, std::vector<PutResult>& OutResult); + PutBatch(ZenCacheStore& CacheStore, std::string_view Namespace, ZenCachePutResultVec_t& OutResult); + void Commit(); ~PutBatch(); private: @@ -223,6 +228,7 @@ public: { public: GetBatch(ZenCacheStore& CacheStore, std::string_view Namespace, ZenCacheValueVec_t& OutResult); + void Commit(); ~GetBatch(); private: |