diff options
| author | Dan Engelbrecht <[email protected]> | 2025-08-12 17:36:41 +0200 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-08-12 17:36:41 +0200 |
| commit | 39e750f78b0944157f0179266b7593b2e492453f (patch) | |
| tree | 658fb9723889e857a118e01c5934c85df55aa45e /src | |
| parent | 5.6.16-pre0 (diff) | |
| download | zen-39e750f78b0944157f0179266b7593b2e492453f.tar.xz zen-39e750f78b0944157f0179266b7593b2e492453f.zip | |
add limitoverwrites option per bucket (#466)
- Feature: Added global zenserver option `--cache-bucket-limit-overwrites` controlling Whether to require policy flag pattern before allowing overwrites or not. Default `false` = overwrites always allowed
- Feature: Add per bucket cache configuration option `limitoverwrites` (Lua options file only)
cache = {
bucket = { -- This is the default for all namespaces
limitoverwrites = true
},
buckets = { -- Here you can add matching per bucket name (matches accross namespaces)
iostorecompression = {
limitoverwrites = false
},
},
}
Diffstat (limited to 'src')
| -rw-r--r-- | src/zenserver-test/zenserver-test.cpp | 11 | ||||
| -rw-r--r-- | src/zenserver/config.cpp | 21 | ||||
| -rw-r--r-- | src/zenserver/config.h | 2 | ||||
| -rw-r--r-- | src/zenserver/zenserver.cpp | 5 |
4 files changed, 22 insertions, 17 deletions
diff --git a/src/zenserver-test/zenserver-test.cpp b/src/zenserver-test/zenserver-test.cpp index 9ccdf3b5e..f913c108c 100644 --- a/src/zenserver-test/zenserver-test.cpp +++ b/src/zenserver-test/zenserver-test.cpp @@ -1587,7 +1587,7 @@ TEST_CASE("zcache.rpc") ZenServerInstance UpstreamServer(TestEnv); SpawnServer(UpstreamServer, UpstreamCfg); - ZenConfig LocalCfg = ZenConfig::NewWithUpstream(TestEnv.GetNewPortNumber(), UpstreamCfg.Port, "--cache-limit-overwrites"); + ZenConfig LocalCfg = ZenConfig::NewWithUpstream(TestEnv.GetNewPortNumber(), UpstreamCfg.Port, "--cache-bucket-limit-overwrites"); ZenServerInstance LocalServer(TestEnv); SpawnServer(LocalServer, LocalCfg); @@ -1654,7 +1654,7 @@ TEST_CASE("zcache.rpc") ZenServerInstance UpstreamServer(TestEnv); SpawnServer(UpstreamServer, UpstreamCfg); - ZenConfig LocalCfg = ZenConfig::NewWithUpstream(TestEnv.GetNewPortNumber(), UpstreamCfg.Port, "--cache-limit-overwrites"); + ZenConfig LocalCfg = ZenConfig::NewWithUpstream(TestEnv.GetNewPortNumber(), UpstreamCfg.Port, "--cache-bucket-limit-overwrites"); ZenServerInstance LocalServer(TestEnv); SpawnServer(LocalServer, LocalCfg); @@ -1721,7 +1721,7 @@ TEST_CASE("zcache.rpc") ZenServerInstance UpstreamServer(TestEnv); SpawnServer(UpstreamServer, UpstreamCfg); - ZenConfig LocalCfg = ZenConfig::NewWithUpstream(TestEnv.GetNewPortNumber(), UpstreamCfg.Port, "--cache-limit-overwrites"); + ZenConfig LocalCfg = ZenConfig::NewWithUpstream(TestEnv.GetNewPortNumber(), UpstreamCfg.Port, "--cache-bucket-limit-overwrites"); ZenServerInstance LocalServer(TestEnv); SpawnServer(LocalServer, LocalCfg); @@ -1786,9 +1786,8 @@ TEST_CASE("zcache.rpc") // ZenServerInstance UpstreamServer(TestEnv); // SpawnServer(UpstreamServer, UpstreamCfg); - // ZenConfig LocalCfg = ZenConfig::NewWithUpstream(TestEnv.GetNewPortNumber(), UpstreamCfg.Port, "--cache-limit-overwrites"); - // ZenServerInstance LocalServer(TestEnv); - // SpawnServer(LocalServer, LocalCfg); + // ZenConfig LocalCfg = ZenConfig::NewWithUpstream(TestEnv.GetNewPortNumber(), UpstreamCfg.Port, + // "--cache-bucket-limit-overwrites"); ZenServerInstance LocalServer(TestEnv); SpawnServer(LocalServer, LocalCfg); // size_t PayloadSize = 1024; // std::string_view Namespace("ue4.ddc"sv); diff --git a/src/zenserver/config.cpp b/src/zenserver/config.cpp index d53bedad0..23bb3ad78 100644 --- a/src/zenserver/config.cpp +++ b/src/zenserver/config.cpp @@ -342,6 +342,7 @@ public: Writer.WriteValue("payloadalignment", fmt::format("{}", BucketConfig.PayloadAlignment)); Writer.WriteValue("largeobjectthreshold", fmt::format("{}", BucketConfig.PayloadAlignment)); + Writer.WriteValue("limitoverwrites", fmt::format("{}", BucketConfig.LimitOverwrites)); } Writer.EndContainer(); } @@ -397,6 +398,8 @@ public: } BucketConfig.LargeObjectThreshold = LargeObjectThreshold; + BucketConfig.LimitOverwrites = Bucket.value().get_or("limitoverwrites", BucketConfig.LimitOverwrites); + Value.push_back(std::make_pair(std::move(Name), BucketConfig)); } } @@ -518,7 +521,6 @@ ParseConfigFile(const std::filesystem::path& Path, LuaOptions.AddOption("cache.enable"sv, ServerOptions.StructuredCacheConfig.Enabled); LuaOptions.AddOption("cache.writelog"sv, ServerOptions.StructuredCacheConfig.WriteLogEnabled, "cache-write-log"sv); LuaOptions.AddOption("cache.accesslog"sv, ServerOptions.StructuredCacheConfig.AccessLogEnabled, "cache-access-log"sv); - LuaOptions.AddOption("cache.limitoverwrites"sv, ServerOptions.StructuredCacheConfig.LimitOverwrites, "cache-limit-overwrites"sv); LuaOptions.AddOption("cache.memlayer.sizethreshold"sv, ServerOptions.StructuredCacheConfig.BucketConfig.MemCacheSizeThreshold, @@ -543,6 +545,9 @@ ParseConfigFile(const std::filesystem::path& Path, LuaOptions.AddOption("cache.bucket.largeobjectthreshold"sv, ServerOptions.StructuredCacheConfig.BucketConfig.LargeObjectThreshold, "cache-bucket-largeobjectthreshold"sv); + LuaOptions.AddOption("cache.bucket.limitoverwrites"sv, + ServerOptions.StructuredCacheConfig.BucketConfig.LimitOverwrites, + "cache-bucket-limit-overwrites"sv); ////// cache.upstream LuaOptions.AddOption("cache.upstream.policy"sv, ServerOptions.UpstreamCacheConfig.CachePolicy, "upstream-cache-policy"sv); @@ -1061,13 +1066,6 @@ ParseCliOptions(int argc, char* argv[], ZenServerOptions& ServerOptions) cxxopts::value<bool>(ServerOptions.StructuredCacheConfig.AccessLogEnabled)->default_value("false"), ""); - options.add_option("cache", - "", - "cache-limit-overwrites", - "Whether to require policy flag pattern before allowing overwrites", - cxxopts::value<bool>(ServerOptions.StructuredCacheConfig.LimitOverwrites)->default_value("false"), - ""); - options.add_option( "cache", "", @@ -1128,6 +1126,13 @@ ParseCliOptions(int argc, char* argv[], ZenServerOptions& ServerOptions) cxxopts::value<uint64_t>(ServerOptions.StructuredCacheConfig.BucketConfig.MemCacheSizeThreshold)->default_value("1024"), ""); + options.add_option("cache", + "", + "cache-bucket-limit-overwrites", + "Whether to require policy flag pattern before allowing overwrites in cache bucket", + cxxopts::value<bool>(ServerOptions.StructuredCacheConfig.BucketConfig.LimitOverwrites)->default_value("false"), + ""); + options.add_option("gc", "", "gc-cache-attachment-store", diff --git a/src/zenserver/config.h b/src/zenserver/config.h index 7d90aa4c1..4a022a807 100644 --- a/src/zenserver/config.h +++ b/src/zenserver/config.h @@ -125,6 +125,7 @@ struct ZenStructuredCacheBucketConfig uint32_t PayloadAlignment = 1u << 4; uint64_t MemCacheSizeThreshold = 1 * 1024; uint64_t LargeObjectThreshold = 128 * 1024; + bool LimitOverwrites = false; }; struct ZenStructuredCacheConfig @@ -132,7 +133,6 @@ struct ZenStructuredCacheConfig bool Enabled = true; bool WriteLogEnabled = false; bool AccessLogEnabled = false; - bool LimitOverwrites = false; std::vector<std::pair<std::string, ZenStructuredCacheBucketConfig>> PerBucketConfigs; ZenStructuredCacheBucketConfig BucketConfig; uint64_t MemTargetFootprintBytes = 512 * 1024 * 1024; diff --git a/src/zenserver/zenserver.cpp b/src/zenserver/zenserver.cpp index 6c9f2ed21..5307d58d9 100644 --- a/src/zenserver/zenserver.cpp +++ b/src/zenserver/zenserver.cpp @@ -560,7 +560,8 @@ ZenServer::InitializeStructuredCache(const ZenServerOptions& ServerOptions) ZenCacheDiskLayer::BucketConfiguration BucketConfig = {.MaxBlockSize = ZenBucketConfig.MaxBlockSize, .PayloadAlignment = ZenBucketConfig.PayloadAlignment, .MemCacheSizeThreshold = ZenBucketConfig.MemCacheSizeThreshold, - .LargeObjectThreshold = ZenBucketConfig.LargeObjectThreshold}; + .LargeObjectThreshold = ZenBucketConfig.LargeObjectThreshold, + .LimitOverwrites = ZenBucketConfig.LimitOverwrites}; Config.NamespaceConfig.DiskLayerConfig.BucketConfigMap.insert_or_assign(BucketName, BucketConfig); } Config.NamespaceConfig.DiskLayerConfig.BucketConfig.MaxBlockSize = ServerOptions.StructuredCacheConfig.BucketConfig.MaxBlockSize, @@ -570,7 +571,7 @@ ZenServer::InitializeStructuredCache(const ZenServerOptions& ServerOptions) ServerOptions.StructuredCacheConfig.BucketConfig.MemCacheSizeThreshold, Config.NamespaceConfig.DiskLayerConfig.BucketConfig.LargeObjectThreshold = ServerOptions.StructuredCacheConfig.BucketConfig.LargeObjectThreshold, - Config.NamespaceConfig.DiskLayerConfig.BucketConfig.LimitOverwrites = ServerOptions.StructuredCacheConfig.LimitOverwrites; + Config.NamespaceConfig.DiskLayerConfig.BucketConfig.LimitOverwrites = ServerOptions.StructuredCacheConfig.BucketConfig.LimitOverwrites; Config.NamespaceConfig.DiskLayerConfig.MemCacheTargetFootprintBytes = ServerOptions.StructuredCacheConfig.MemTargetFootprintBytes; Config.NamespaceConfig.DiskLayerConfig.MemCacheTrimIntervalSeconds = ServerOptions.StructuredCacheConfig.MemTrimIntervalSeconds; Config.NamespaceConfig.DiskLayerConfig.MemCacheMaxAgeSeconds = ServerOptions.StructuredCacheConfig.MemMaxAgeSeconds; |