diff options
| author | Zousar Shaker <[email protected]> | 2025-12-19 09:07:15 -0700 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-12-19 09:07:15 -0700 |
| commit | 7e4c79846cf380078f3b92a5aa79c79e4cfe578e (patch) | |
| tree | 2dae1f55c00cf6778c7b16e100e84b24e44d0795 /src/zenstore | |
| parent | optimize scavenge (#697) (diff) | |
| parent | Merge branch 'main' into zs/limit-overwrite-default (diff) | |
| download | zen-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.cpp | 17 | ||||
| -rw-r--r-- | src/zenstore/cache/structuredcachestore.cpp | 4 | ||||
| -rw-r--r-- | src/zenstore/include/zenstore/cache/cachedisklayer.h | 2 | ||||
| -rw-r--r-- | src/zenstore/include/zenstore/cache/upstreamcacheclient.h | 1 |
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 |