aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/hub/storageserverinstance.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2026-04-21 16:26:57 +0200
committerGitHub Enterprise <[email protected]>2026-04-21 16:26:57 +0200
commit6b59d3d37dcc6320929df2f0074f9a1cb506d1fd (patch)
tree2ddd317e381c29a97c666e9d72cf5d614a13f6f8 /src/zenserver/hub/storageserverinstance.cpp
parentzen CLI security review fixes (#974) (diff)
downloadarchived-zen-6b59d3d37dcc6320929df2f0074f9a1cb506d1fd.tar.xz
archived-zen-6b59d3d37dcc6320929df2f0074f9a1cb506d1fd.zip
improved s3 hydration (#997)
- Improvement: Hub shares a single S3 client and IMDS credential provider across all modules, reducing IMDS load and surviving transient IMDS blips during bulk provisioning - Improvement: Hub validates hydration config at startup; bad `--hub-hydration-target-spec` or `--hub-hydration-target-config` now fails `zen hub` at boot instead of per-module at first hydrate - Improvement: S3 hydration multipart chunk size configurable via `settings.chunk-size` (default 32 MiB) - Improvement: S3 client extracts `<Error><Code>` and `<Message>` from XML error bodies (previously logged as `<unhandled content format>`) - Improvement: S3 client fails fast with a "no credentials available" error when AWS credentials are missing, instead of sending an unsigned request that S3 rejects with a generic 400 - Improvement: IMDS credential provider retries transient connection failures (up to 3 attempts with backoff) - Improvement: HTTP clients with `RetryCount > 0` also retry on `CURLE_COULDNT_CONNECT`
Diffstat (limited to 'src/zenserver/hub/storageserverinstance.cpp')
-rw-r--r--src/zenserver/hub/storageserverinstance.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/zenserver/hub/storageserverinstance.cpp b/src/zenserver/hub/storageserverinstance.cpp
index af2c19113..97edc5223 100644
--- a/src/zenserver/hub/storageserverinstance.cpp
+++ b/src/zenserver/hub/storageserverinstance.cpp
@@ -11,8 +11,12 @@
namespace zen {
-StorageServerInstance::StorageServerInstance(ZenServerEnvironment& RunEnvironment, const Configuration& Config, std::string_view ModuleId)
-: m_Config(Config)
+StorageServerInstance::StorageServerInstance(ZenServerEnvironment& RunEnvironment,
+ HydrationBase& Hydration,
+ const Configuration& Config,
+ std::string_view ModuleId)
+: m_Hydration(Hydration)
+, m_Config(Config)
, m_ModuleId(ModuleId)
, m_ServerInstance(RunEnvironment, ZenServerInstance::ServerMode::kStorageServer)
{
@@ -156,7 +160,7 @@ StorageServerInstance::ObliterateLocked()
std::atomic<bool> AbortFlag{false};
std::atomic<bool> PauseFlag{false};
HydrationConfig Config = MakeHydrationConfig(AbortFlag, PauseFlag);
- std::unique_ptr<HydrationStrategyBase> Hydrator = CreateHydrator(Config);
+ std::unique_ptr<HydrationStrategyBase> Hydrator = m_Hydration.CreateHydrator(Config);
Hydrator->Obliterate();
}
@@ -204,7 +208,7 @@ StorageServerInstance::Hydrate()
std::atomic<bool> AbortFlag{false};
std::atomic<bool> PauseFlag{false};
HydrationConfig Config = MakeHydrationConfig(AbortFlag, PauseFlag);
- std::unique_ptr<HydrationStrategyBase> Hydrator = CreateHydrator(Config);
+ std::unique_ptr<HydrationStrategyBase> Hydrator = m_Hydration.CreateHydrator(Config);
m_HydrationState = Hydrator->Hydrate();
}
@@ -214,18 +218,14 @@ StorageServerInstance::Dehydrate()
std::atomic<bool> AbortFlag{false};
std::atomic<bool> PauseFlag{false};
HydrationConfig Config = MakeHydrationConfig(AbortFlag, PauseFlag);
- std::unique_ptr<HydrationStrategyBase> Hydrator = CreateHydrator(Config);
+ std::unique_ptr<HydrationStrategyBase> Hydrator = m_Hydration.CreateHydrator(Config);
Hydrator->Dehydrate(m_HydrationState);
}
HydrationConfig
StorageServerInstance::MakeHydrationConfig(std::atomic<bool>& AbortFlag, std::atomic<bool>& PauseFlag)
{
- HydrationConfig Config{.ServerStateDir = m_Config.StateDir,
- .TempDir = m_Config.TempDir,
- .ModuleId = m_ModuleId,
- .TargetSpecification = m_Config.HydrationTargetSpecification,
- .Options = m_Config.HydrationOptions};
+ HydrationConfig Config{.ServerStateDir = m_Config.StateDir, .TempDir = m_Config.TempDir, .ModuleId = m_ModuleId};
if (m_Config.OptionalWorkerPool)
{
Config.Threading.emplace(