aboutsummaryrefslogtreecommitdiff
path: root/src/zenstore/cache/cacherpc.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2024-09-10 10:05:14 +0200
committerDan Engelbrecht <[email protected]>2024-09-10 10:05:14 +0200
commit40a5b59e5f8efe57bee93527c1c61ad821b5e4ba (patch)
treec363420f5530305c13d159675e406f4e5665de08 /src/zenstore/cache/cacherpc.cpp
parent5.5.7-pre0 (diff)
downloadzen-40a5b59e5f8efe57bee93527c1c61ad821b5e4ba.tar.xz
zen-40a5b59e5f8efe57bee93527c1c61ad821b5e4ba.zip
don't add batch overhead if we are only going to put one cache value
Diffstat (limited to 'src/zenstore/cache/cacherpc.cpp')
-rw-r--r--src/zenstore/cache/cacherpc.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/zenstore/cache/cacherpc.cpp b/src/zenstore/cache/cacherpc.cpp
index b7f456d5c..6cdfeabd0 100644
--- a/src/zenstore/cache/cacherpc.cpp
+++ b/src/zenstore/cache/cacherpc.cpp
@@ -808,9 +808,16 @@ CacheRpcHandler::HandleRpcPutCacheValues(const CacheRequestContext& Context, con
std::vector<size_t> BatchResultIndexes;
std::vector<bool> Results;
std::vector<CacheKey> UpstreamCacheKeys;
+ uint64_t RequestCount = RequestsArray.Num();
{
- Results.reserve(RequestsArray.Num());
- ZenCacheStore::PutBatch Batch(m_CacheStore, *Namespace, BatchResults);
+ Results.reserve(RequestCount);
+ std::unique_ptr<ZenCacheStore::PutBatch> Batch;
+ if (RequestCount > 1)
+ {
+ Batch = std::make_unique<ZenCacheStore::PutBatch>(m_CacheStore, *Namespace, BatchResults);
+ BatchResults.reserve(RequestCount);
+ BatchResultIndexes.reserve(RequestCount);
+ }
for (CbFieldView RequestField : RequestsArray)
{
ZEN_TRACE_CPU("Z$::RpcPutCacheValues::Request");
@@ -861,11 +868,18 @@ CacheRpcHandler::HandleRpcPutCacheValues(const CacheRequestContext& Context, con
Key.Hash,
{.Value = Value, .RawSize = RawSize, .RawHash = RawHash},
{},
- &Batch);
+ Batch.get());
m_CacheStats.WriteCount++;
+ if (Batch)
+ {
+ BatchResultIndexes.push_back(Results.size());
+ Results.push_back(false);
+ }
+ else
+ {
+ Results.push_back(true);
+ }
TransferredSize = Chunk.GetCompressedSize();
- BatchResultIndexes.push_back(Results.size());
- Results.push_back(false);
}
else
{