diff options
| author | Dan Engelbrecht <[email protected]> | 2026-03-17 22:57:20 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2026-03-17 22:57:20 +0100 |
| commit | d0d40b36b306236428a764349dbff98d38cf7dbd (patch) | |
| tree | 2a5511a99eea146b6f7f3632fb3194394e508360 /src/zenserver/hub/storageserverinstance.cpp | |
| parent | Suppressed C5105 when building rpmalloc (#852) (diff) | |
| download | zen-d0d40b36b306236428a764349dbff98d38cf7dbd.tar.xz zen-d0d40b36b306236428a764349dbff98d38cf7dbd.zip | |
zen hub port reuse (#850)
- Feature: Added `--allow-port-probing` option to control whether zenserver searches for a free port on startup (default: true, automatically false when --dedicated is set)
- Feature: Added new hub options for controlling provisioned storage server instances:
- `--hub-instance-http` - HTTP server implementation for instances (asio/httpsys)
- `--hub-instance-http-threads` - Number of HTTP connection threads per instance
- `--hub-instance-corelimit` - Limit CPU concurrency per instance
- Improvement: Hub now manages a deterministic port pool for provisioned instances allowing reuse of unused ports
Diffstat (limited to 'src/zenserver/hub/storageserverinstance.cpp')
| -rw-r--r-- | src/zenserver/hub/storageserverinstance.cpp | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/src/zenserver/hub/storageserverinstance.cpp b/src/zenserver/hub/storageserverinstance.cpp index f24379715..68de5e274 100644 --- a/src/zenserver/hub/storageserverinstance.cpp +++ b/src/zenserver/hub/storageserverinstance.cpp @@ -11,16 +11,13 @@ namespace zen { -StorageServerInstance::StorageServerInstance(ZenServerEnvironment& RunEnvironment, - std::string_view ModuleId, - std::filesystem::path FileHydrationPath, - std::filesystem::path HydrationTempPath) -: m_ModuleId(ModuleId) +StorageServerInstance::StorageServerInstance(ZenServerEnvironment& RunEnvironment, const Configuration& Config, std::string_view ModuleId) +: m_Config(Config) +, m_ModuleId(ModuleId) , m_ServerInstance(RunEnvironment, ZenServerInstance::ServerMode::kStorageServer) -, m_HydrationPath(FileHydrationPath) { m_BaseDir = RunEnvironment.CreateChildDir(ModuleId); - m_TempDir = HydrationTempPath / ModuleId; + m_TempDir = Config.HydrationTempPath / ModuleId; } StorageServerInstance::~StorageServerInstance() @@ -37,9 +34,20 @@ StorageServerInstance::SpawnServerProcess() #if ZEN_PLATFORM_WINDOWS m_ServerInstance.SetJobObject(m_JobObject); #endif - const uint16_t BasePort = m_ServerInstance.SpawnServerAndWaitUntilReady(); - ZEN_DEBUG("Storage server instance for module '{}' started, listening on port {}", m_ModuleId, BasePort); + ExtendableStringBuilder<256> AdditionalOptions; + AdditionalOptions << "--allow-port-probing=false"; + if (m_Config.HttpThreadCount != 0) + { + AdditionalOptions << " --http-threads=" << m_Config.HttpThreadCount; + } + if (m_Config.CoreLimit != 0) + { + AdditionalOptions << " --corelimit=" << m_Config.CoreLimit; + } + + m_ServerInstance.SpawnServerAndWaitUntilReady(m_Config.BasePort, AdditionalOptions.ToView()); + ZEN_DEBUG("Storage server instance for module '{}' started, listening on port {}", m_ModuleId, m_Config.BasePort); m_ServerInstance.EnableShutdownOnDestroy(); } @@ -178,7 +186,7 @@ StorageServerInstance::Hydrate() HydrationConfig Config{.ServerStateDir = m_BaseDir, .TempDir = m_TempDir, .ModuleId = m_ModuleId, - .TargetSpecification = WideToUtf8(m_HydrationPath.native())}; + .TargetSpecification = WideToUtf8(m_Config.FileHydrationPath.native())}; std::unique_ptr<HydrationStrategyBase> Hydrator = CreateFileHydrator(); @@ -192,7 +200,7 @@ StorageServerInstance::Dehydrate() HydrationConfig Config{.ServerStateDir = m_BaseDir, .TempDir = m_TempDir, .ModuleId = m_ModuleId, - .TargetSpecification = WideToUtf8(m_HydrationPath.native())}; + .TargetSpecification = WideToUtf8(m_Config.FileHydrationPath.native())}; std::unique_ptr<HydrationStrategyBase> Hydrator = CreateFileHydrator(); |