diff options
| author | Dan Engelbrecht <[email protected]> | 2026-04-21 16:26:57 +0200 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2026-04-21 16:26:57 +0200 |
| commit | 6b59d3d37dcc6320929df2f0074f9a1cb506d1fd (patch) | |
| tree | 2ddd317e381c29a97c666e9d72cf5d614a13f6f8 /src/zenserver/hub/storageserverinstance.cpp | |
| parent | zen CLI security review fixes (#974) (diff) | |
| download | archived-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.cpp | 20 |
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( |