aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2025-08-12 17:36:41 +0200
committerGitHub Enterprise <[email protected]>2025-08-12 17:36:41 +0200
commit39e750f78b0944157f0179266b7593b2e492453f (patch)
tree658fb9723889e857a118e01c5934c85df55aa45e /src
parent5.6.16-pre0 (diff)
downloadzen-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.cpp11
-rw-r--r--src/zenserver/config.cpp21
-rw-r--r--src/zenserver/config.h2
-rw-r--r--src/zenserver/zenserver.cpp5
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;