diff options
Diffstat (limited to 'src/zenserver/config.h')
| -rw-r--r-- | src/zenserver/config.h | 170 |
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 |