aboutsummaryrefslogtreecommitdiff
path: root/src/zenstore
diff options
context:
space:
mode:
authorZousar Shaker <[email protected]>2025-12-19 09:07:15 -0700
committerGitHub Enterprise <[email protected]>2025-12-19 09:07:15 -0700
commit7e4c79846cf380078f3b92a5aa79c79e4cfe578e (patch)
tree2dae1f55c00cf6778c7b16e100e84b24e44d0795 /src/zenstore
parentoptimize scavenge (#697) (diff)
parentMerge branch 'main' into zs/limit-overwrite-default (diff)
downloadzen-7e4c79846cf380078f3b92a5aa79c79e4cfe578e.tar.xz
zen-7e4c79846cf380078f3b92a5aa79c79e4cfe578e.zip
Merge pull request #696 from ue-foundation/zs/limit-overwrite-default
Zs/limit overwrite default
Diffstat (limited to 'src/zenstore')
-rw-r--r--src/zenstore/cache/cacherpc.cpp17
-rw-r--r--src/zenstore/cache/structuredcachestore.cpp4
-rw-r--r--src/zenstore/include/zenstore/cache/cachedisklayer.h2
-rw-r--r--src/zenstore/include/zenstore/cache/upstreamcacheclient.h1
4 files changed, 16 insertions, 8 deletions
diff --git a/src/zenstore/cache/cacherpc.cpp b/src/zenstore/cache/cacherpc.cpp
index 6469d6c31..660c66b9a 100644
--- a/src/zenstore/cache/cacherpc.cpp
+++ b/src/zenstore/cache/cacherpc.cpp
@@ -494,7 +494,8 @@ CacheRpcHandler::PutCacheRecord(PutRequestData& Request, const CbPackage* Packag
m_UpstreamCache.EnqueueUpstream({.Type = ZenContentType::kCbPackage,
.Namespace = Request.Namespace,
.Key = Request.Key,
- .ValueContentIds = std::move(ValidAttachments)});
+ .ValueContentIds = std::move(ValidAttachments),
+ .Overwrite = Overwrite});
}
return PutResult;
}
@@ -998,6 +999,7 @@ CacheRpcHandler::HandleRpcPutCacheValues(const CacheRequestContext& Context, con
eastl::fixed_vector<size_t, 32> BatchResultIndexes;
eastl::fixed_vector<ZenCacheStore::PutResult, 32> Results;
eastl::fixed_vector<CacheKey, 32> UpstreamCacheKeys;
+ eastl::fixed_vector<bool, 32> Overwrites;
uint64_t RequestCount = RequestsArray.Num();
{
@@ -1008,6 +1010,7 @@ CacheRpcHandler::HandleRpcPutCacheValues(const CacheRequestContext& Context, con
Batch = std::make_unique<ZenCacheStore::PutBatch>(m_CacheStore, *Namespace, BatchResults);
BatchResults.reserve(RequestCount);
BatchResultIndexes.reserve(RequestCount);
+ Overwrites.reserve(RequestCount);
}
for (CbFieldView RequestField : RequestsArray)
{
@@ -1032,6 +1035,7 @@ CacheRpcHandler::HandleRpcPutCacheValues(const CacheRequestContext& Context, con
uint64_t RawSize = RequestObject["RawSize"sv].AsUInt64();
bool Valid = false;
uint64_t TransferredSize = 0;
+ bool Overwrite = false;
if (const CbAttachment* Attachment = BatchRequest.FindAttachment(RawHash))
{
@@ -1047,8 +1051,8 @@ CacheRpcHandler::HandleRpcPutCacheValues(const CacheRequestContext& Context, con
if (EnumHasAllFlags(Policy, CachePolicy::StoreLocal))
{
- bool Overwrite = !EnumHasAllFlags(Policy, CachePolicy::QueryLocal);
- IoBuffer Value = Chunk.GetCompressed().Flatten().AsIoBuffer();
+ Overwrite = !EnumHasAllFlags(Policy, CachePolicy::QueryLocal);
+ IoBuffer Value = Chunk.GetCompressed().Flatten().AsIoBuffer();
Value.SetContentType(ZenContentType::kCompressedBinary);
if (RawSize == 0)
{
@@ -1116,6 +1120,7 @@ CacheRpcHandler::HandleRpcPutCacheValues(const CacheRequestContext& Context, con
{
UpstreamCacheKeys.push_back(CacheKey::Empty);
}
+ Overwrites.push_back(Overwrite);
ZEN_DEBUG("PUTCACHEVALUES - '{}/{}/{}' {}, '{}' in {}",
*Namespace,
@@ -1150,8 +1155,10 @@ CacheRpcHandler::HandleRpcPutCacheValues(const CacheRequestContext& Context, con
{
if ((Results[Index].Status == zen::PutStatus::Success) && UpstreamCacheKeys[Index] != CacheKey::Empty)
{
- m_UpstreamCache.EnqueueUpstream(
- {.Type = ZenContentType::kCompressedBinary, .Namespace = *Namespace, .Key = UpstreamCacheKeys[Index]});
+ m_UpstreamCache.EnqueueUpstream({.Type = ZenContentType::kCompressedBinary,
+ .Namespace = *Namespace,
+ .Key = UpstreamCacheKeys[Index],
+ .Overwrite = Overwrites[Index]});
}
}
{
diff --git a/src/zenstore/cache/structuredcachestore.cpp b/src/zenstore/cache/structuredcachestore.cpp
index 54c9674de..52b494e45 100644
--- a/src/zenstore/cache/structuredcachestore.cpp
+++ b/src/zenstore/cache/structuredcachestore.cpp
@@ -2036,7 +2036,7 @@ TEST_CASE("cachestore.blocked.disklayer.put")
size_t Key = Buffer.Size();
IoHash HashKey = IoHash::HashBuffer(&Key, sizeof(uint32_t));
- Zcs.Put("test_bucket", HashKey, {.Value = Buffer}, {}, false);
+ Zcs.Put("test_bucket", HashKey, {.Value = Buffer}, {}, /*Overwrite*/ false);
ZenCacheValue BufferGet;
CHECK(Zcs.Get("test_bucket", HashKey, BufferGet));
@@ -2046,7 +2046,7 @@ TEST_CASE("cachestore.blocked.disklayer.put")
Buffer2.SetContentType(ZenContentType::kCbObject);
// We should be able to overwrite even if the file is open for read
- Zcs.Put("test_bucket", HashKey, {.Value = Buffer2}, {}, false);
+ Zcs.Put("test_bucket", HashKey, {.Value = Buffer2}, {}, /*Overwrite*/ true);
MemoryView OldView = BufferGet.Value.GetView();
diff --git a/src/zenstore/include/zenstore/cache/cachedisklayer.h b/src/zenstore/include/zenstore/cache/cachedisklayer.h
index ef2781c1a..3d684587d 100644
--- a/src/zenstore/include/zenstore/cache/cachedisklayer.h
+++ b/src/zenstore/include/zenstore/cache/cachedisklayer.h
@@ -122,7 +122,7 @@ public:
uint32_t PayloadAlignment = 1u << 4;
uint64_t MemCacheSizeThreshold = 1 * 1024;
uint64_t LargeObjectThreshold = 128 * 1024;
- bool LimitOverwrites = false;
+ bool LimitOverwrites = true;
};
struct Configuration
diff --git a/src/zenstore/include/zenstore/cache/upstreamcacheclient.h b/src/zenstore/include/zenstore/cache/upstreamcacheclient.h
index ff4a8c3f7..f5a861e2b 100644
--- a/src/zenstore/include/zenstore/cache/upstreamcacheclient.h
+++ b/src/zenstore/include/zenstore/cache/upstreamcacheclient.h
@@ -27,6 +27,7 @@ struct UpstreamCacheRecord
CacheKey Key;
std::vector<IoHash> ValueContentIds;
CacheRequestContext Context;
+ bool Overwrite = false;
};
struct UpstreamError