aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/config.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenserver/config.h')
-rw-r--r--src/zenserver/config.h170
1 files changed, 13 insertions, 157 deletions
diff --git a/src/zenserver/config.h b/src/zenserver/config.h
index d2311396e..8471ee89b 100644
--- a/src/zenserver/config.h
+++ b/src/zenserver/config.h
@@ -10,108 +10,16 @@
#include <string>
#include <vector>
+namespace zen::LuaConfig {
+struct Options;
+}
+namespace cxxopts {
+class Options;
+class ParseResult;
+} // namespace cxxopts
namespace zen {
-struct ZenUpstreamJupiterConfig
-{
- std::string Name;
- std::string Url;
- std::string OAuthUrl;
- std::string OAuthClientId;
- std::string OAuthClientSecret;
- std::string OpenIdProvider;
- std::string AccessToken;
- std::string Namespace;
- std::string DdcNamespace;
-};
-
-struct ZenUpstreamZenConfig
-{
- std::string Name;
- std::vector<std::string> Urls;
- std::vector<std::string> Dns;
-};
-
-enum class UpstreamCachePolicy : uint8_t
-{
- Disabled = 0,
- Read = 1 << 0,
- Write = 1 << 1,
- ReadWrite = Read | Write
-};
-
-struct ZenUpstreamCacheConfig
-{
- ZenUpstreamJupiterConfig JupiterConfig;
- ZenUpstreamZenConfig ZenConfig;
- int32_t UpstreamThreadCount = 4;
- int32_t ConnectTimeoutMilliseconds = 5000;
- int32_t TimeoutMilliseconds = 0;
- UpstreamCachePolicy CachePolicy = UpstreamCachePolicy::ReadWrite;
-};
-
-struct ZenCacheEvictionPolicy
-{
- int32_t MaxDurationSeconds = 24 * 60 * 60;
-};
-
-struct ZenProjectStoreEvictionPolicy
-{
- int32_t MaxDurationSeconds = 7 * 24 * 60 * 60;
-};
-
-struct ZenBuildStoreEvictionPolicy
-{
- int32_t MaxDurationSeconds = 3 * 24 * 60 * 60;
-};
-
-struct ZenGcConfig
-{
- // ZenCasEvictionPolicy Cas;
- ZenCacheEvictionPolicy Cache;
- ZenProjectStoreEvictionPolicy ProjectStore;
- ZenBuildStoreEvictionPolicy BuildStore;
- int32_t MonitorIntervalSeconds = 30;
- int32_t IntervalSeconds = 0;
- bool CollectSmallObjects = true;
- bool Enabled = true;
- uint64_t DiskReserveSize = 1ul << 28;
- uint64_t DiskSizeSoftLimit = 0;
- int32_t LightweightIntervalSeconds = 0;
- uint64_t MinimumFreeDiskSpaceToAllowWrites = 1ul << 28;
- bool UseGCV2 = false;
- uint32_t CompactBlockUsageThresholdPercent = 90;
- bool Verbose = false;
- bool SingleThreaded = false;
- static constexpr uint16_t GcMaxAttachmentPassCount = 256;
- uint16_t AttachmentPassCount = 1;
- bool StoreCacheAttachmentMetaData = false;
- bool StoreProjectAttachmentMetaData = false;
- bool EnableValidation = true;
-};
-
-struct ZenOpenIdProviderConfig
-{
- std::string Name;
- std::string Url;
- std::string ClientId;
-};
-
-struct ZenAuthConfig
-{
- std::vector<ZenOpenIdProviderConfig> OpenIdProviders;
-};
-
-struct ZenObjectStoreConfig
-{
- struct BucketConfig
- {
- std::string Name;
- std::filesystem::path Directory;
- };
-
- std::vector<BucketConfig> Buckets;
-};
+struct ZenStorageServerOptions;
struct ZenStatsConfig
{
@@ -120,45 +28,6 @@ struct ZenStatsConfig
int StatsdPort = 8125;
};
-struct ZenStructuredCacheBucketConfig
-{
- uint64_t MaxBlockSize = 1ull << 30;
- uint32_t PayloadAlignment = 1u << 4;
- uint64_t MemCacheSizeThreshold = 1 * 1024;
- uint64_t LargeObjectThreshold = 128 * 1024;
- bool LimitOverwrites = false;
-};
-
-struct ZenStructuredCacheConfig
-{
- bool Enabled = true;
- bool WriteLogEnabled = false;
- bool AccessLogEnabled = false;
- std::vector<std::pair<std::string, ZenStructuredCacheBucketConfig>> PerBucketConfigs;
- ZenStructuredCacheBucketConfig BucketConfig;
- uint64_t MemTargetFootprintBytes = 512 * 1024 * 1024;
- uint64_t MemTrimIntervalSeconds = 60;
- uint64_t MemMaxAgeSeconds = gsl::narrow<uint64_t>(std::chrono::seconds(std::chrono::days(1)).count());
-};
-
-struct ZenProjectStoreConfig
-{
- bool StoreCacheAttachmentMetaData = false;
- bool StoreProjectAttachmentMetaData = false;
-};
-
-struct ZenBuildStoreConfig
-{
- bool Enabled = false;
- uint64_t MaxDiskSpaceLimit = 1u * 1024u * 1024u * 1024u * 1024u; // 1TB
-};
-
-struct ZenWorkspacesConfig
-{
- bool Enabled = false;
- bool AllowConfigurationChanges = false;
-};
-
struct ZenSentryConfig
{
bool Disable = false;
@@ -185,6 +54,7 @@ struct ZenServerOptions
bool IsDedicated = false; // Indicates a dedicated/shared instance, with larger resource requirements
bool ShouldCrash = false; // Option for testing crash handling
bool IsFirstRun = false;
+ std::filesystem::path ConfigFile; // Path to Lua config file
std::filesystem::path SystemRootDir; // System root directory (used for machine level config)
std::filesystem::path ContentDir; // Root directory for serving frontend content (experimental)
std::filesystem::path DataDir; // Root directory for state (used for testing)
@@ -202,25 +72,9 @@ struct ZenServerOptions
std::string EncryptionIV; // 128 bit AES initialization vector
ZenStatsConfig StatsConfig;
-};
-struct ZenStorageServerOptions : public ZenServerOptions
-{
- ZenUpstreamCacheConfig UpstreamCacheConfig;
- ZenGcConfig GcConfig;
- ZenAuthConfig AuthConfig;
- ZenObjectStoreConfig ObjectStoreConfig;
- ZenStructuredCacheConfig StructuredCacheConfig;
- ZenProjectStoreConfig ProjectStoreConfig;
- ZenBuildStoreConfig BuildStoreConfig;
- ZenWorkspacesConfig WorksSpacesConfig;
- std::filesystem::path ConfigFile; // Path to Lua config file
- std::filesystem::path PluginsConfigFile; // Path to plugins config file
- std::filesystem::path BaseSnapshotDir; // Path to server state snapshot (will be copied into data dir on start)
- bool InstallService = false; // Flag used to initiate service install (temporary)
- bool UninstallService = false; // Flag used to initiate service uninstall (temporary)
- bool ObjectStoreEnabled = false;
- std::string ScrubOptions;
+ bool InstallService = false; // Flag used to initiate service install (temporary)
+ bool UninstallService = false; // Flag used to initiate service uninstall (temporary)
};
void ParseCliOptions(int argc, char* argv[], ZenStorageServerOptions& ServerOptions);
@@ -228,4 +82,6 @@ void ParseCliOptions(int argc, char* argv[], ZenStorageServerOptions& ServerOpti
void EmitCentralManifest(const std::filesystem::path& SystemRoot, Oid Identifier, CbObject Manifest, std::filesystem::path ManifestPath);
std::vector<CbObject> ReadAllCentralManifests(const std::filesystem::path& SystemRoot);
+void AddServerConfigOptions(LuaConfig::Options& LuaOptions, ZenServerOptions& ServerOptions);
+
} // namespace zen