From ec69a0d3d8febf15aa5df347e514c5071c19ff71 Mon Sep 17 00:00:00 2001 From: Dan Engelbrecht Date: Thu, 4 Dec 2025 16:20:58 +0100 Subject: 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 --- src/zenstore/cache/cacherpc.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src/zenstore/cache/cacherpc.cpp') diff --git a/src/zenstore/cache/cacherpc.cpp b/src/zenstore/cache/cacherpc.cpp index 9e57b41c3..6469d6c31 100644 --- a/src/zenstore/cache/cacherpc.cpp +++ b/src/zenstore/cache/cacherpc.cpp @@ -820,6 +820,7 @@ CacheRpcHandler::HandleRpcGetCacheRecords(const CacheRequestContext& Context, Cb } Request.Complete = true; + for (ValueRequestData& Value : Request.Values) { if (Value.Exists) @@ -993,7 +994,7 @@ CacheRpcHandler::HandleRpcPutCacheValues(const CacheRequestContext& Context, con const bool HasUpstream = m_UpstreamCache.IsActive(); CbArrayView RequestsArray = Params["Requests"sv].AsArrayView(); - std::vector BatchResults; + ZenCacheStore::ZenCachePutResultVec_t BatchResults; eastl::fixed_vector BatchResultIndexes; eastl::fixed_vector Results; eastl::fixed_vector UpstreamCacheKeys; @@ -1124,6 +1125,11 @@ CacheRpcHandler::HandleRpcPutCacheValues(const CacheRequestContext& Context, con Valid ? "Added"sv : "Invalid", NiceLatencyNs(Timer.GetElapsedTimeUs() * 1000)); } + if (Batch) + { + Batch->Commit(); + Batch.reset(); + } } if (Results.empty()) { @@ -1268,7 +1274,11 @@ CacheRpcHandler::HandleRpcGetCacheValues(const CacheRequestContext& Context, CbO CacheValues.push_back({}); } } - Batch.reset(); + if (Batch) + { + Batch->Commit(); + Batch.reset(); + } ZEN_ASSERT(CacheValues.size() == RequestsArray.Num()); } for (size_t RequestIndex = 0; RequestIndex < CacheValues.size(); RequestIndex++) @@ -1818,6 +1828,11 @@ CacheRpcHandler::GetLocalCacheValues(const CacheRequestContext& Context, } Request->ElapsedTimeUs += Timer.GetElapsedTimeUs(); } + if (Batch) + { + Batch->Commit(); + Batch.reset(); + } } for (size_t RequestIndex = 0; RequestIndex < ValueRequests.size(); RequestIndex++) { -- cgit v1.2.3