diff options
| author | Dan Engelbrecht <[email protected]> | 2025-09-12 15:09:57 +0200 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-09-12 15:09:57 +0200 |
| commit | a38e52255026b549c96e0e368d3b3566d295406b (patch) | |
| tree | 1bb55cef8b5d6d02c0fe73f4958306abec00e5bd /src/zenserver/zenserver.cpp | |
| parent | 5.7.1-pre2 (diff) | |
| download | zen-a38e52255026b549c96e0e368d3b3566d295406b.tar.xz zen-a38e52255026b549c96e0e368d3b3566d295406b.zip | |
initialize all services before healthy (#493)
* make sure all services are initialized and registered before we respond OK to health check
Diffstat (limited to 'src/zenserver/zenserver.cpp')
| -rw-r--r-- | src/zenserver/zenserver.cpp | 93 |
1 files changed, 58 insertions, 35 deletions
diff --git a/src/zenserver/zenserver.cpp b/src/zenserver/zenserver.cpp index 44c25368c..643f0a45a 100644 --- a/src/zenserver/zenserver.cpp +++ b/src/zenserver/zenserver.cpp @@ -234,18 +234,13 @@ ZenServer::Initialize(const ZenServerOptions& ServerOptions, ZenServerState::Zen } m_AuthService = std::make_unique<HttpAuthService>(*m_AuthMgr); - m_Http->RegisterService(*m_AuthService); - - m_Http->RegisterService(m_HealthService); - m_Http->RegisterService(m_StatsService); m_StatsReporter.Initialize(ServerOptions.StatsConfig); if (ServerOptions.StatsConfig.Enabled) { EnqueueStatsReportingTimer(); } - m_Http->RegisterService(m_StatusService); m_StatusService.RegisterHandler("status", *this); // Initialize storage and services @@ -301,29 +296,6 @@ ZenServer::Initialize(const ZenServerOptions& ServerOptions, ZenServerState::Zen ZEN_INFO("NOT instantiating structured cache service"); } - m_Http->RegisterService(m_TestService); // NOTE: this is intentionally not limited to test mode as it's useful for diagnostics - -#if ZEN_WITH_TESTS - m_Http->RegisterService(m_TestingService); -#endif - - if (m_HttpProjectService) - { - m_Http->RegisterService(*m_HttpProjectService); - } - - if (m_HttpWorkspacesService) - { - m_Http->RegisterService(*m_HttpWorkspacesService); - } - - m_FrontendService = std::make_unique<HttpFrontendService>(m_ContentRoot, m_StatusService); - - if (m_FrontendService) - { - m_Http->RegisterService(*m_FrontendService); - } - if (ServerOptions.ObjectStoreEnabled) { ObjectStoreConfig ObjCfg; @@ -337,21 +309,18 @@ ZenServer::Initialize(const ZenServerOptions& ServerOptions, ZenServerState::Zen } m_ObjStoreService = std::make_unique<HttpObjectStoreService>(m_StatusService, std::move(ObjCfg)); - m_Http->RegisterService(*m_ObjStoreService); } if (ServerOptions.BuildStoreConfig.Enabled) { m_BuildStoreService = std::make_unique<HttpBuildStoreService>(m_StatusService, m_StatsService, *m_BuildStore); - m_Http->RegisterService(*m_BuildStoreService); } #if ZEN_WITH_VFS m_VfsService = std::make_unique<VfsService>(m_StatusService); m_VfsService->AddService(Ref<ProjectStore>(m_ProjectStore)); m_VfsService->AddService(Ref<ZenCacheStore>(m_CacheStore)); - m_Http->RegisterService(*m_VfsService); -#endif +#endif // ZEN_WITH_VFS ZEN_INFO("initializing GC, enabled '{}', interval {}, lightweight interval {}", ServerOptions.GcConfig.Enabled, @@ -387,8 +356,65 @@ ZenServer::Initialize(const ZenServerOptions& ServerOptions, ZenServerState::Zen .HttpLogPath = ServerOptions.DataDir / "logs" / "http.log", .CacheLogPath = ServerOptions.DataDir / "logs" / "z$.log"}, ServerOptions); + + // Register all services when all initialization for all services are done + + m_Http->RegisterService(*m_AuthService); + + m_Http->RegisterService(m_StatsService); + m_Http->RegisterService(m_StatusService); + m_Http->RegisterService(m_TestService); // NOTE: this is intentionally not limited to test mode as it's useful for diagnostics + +#if ZEN_WITH_TESTS + m_Http->RegisterService(m_TestingService); +#endif + + if (m_StructuredCacheService) + { + m_Http->RegisterService(*m_StructuredCacheService); + } + + if (m_UpstreamService) + { + m_Http->RegisterService(*m_UpstreamService); + } + + if (m_HttpProjectService) + { + m_Http->RegisterService(*m_HttpProjectService); + } + + if (m_HttpWorkspacesService) + { + m_Http->RegisterService(*m_HttpWorkspacesService); + } + + m_FrontendService = std::make_unique<HttpFrontendService>(m_ContentRoot, m_StatusService); + + if (m_FrontendService) + { + m_Http->RegisterService(*m_FrontendService); + } + + if (m_ObjStoreService) + { + m_Http->RegisterService(*m_ObjStoreService); + } + + if (m_BuildStoreService) + { + m_Http->RegisterService(*m_BuildStoreService); + } +#if ZEN_WITH_VFS + m_Http->RegisterService(*m_VfsService); +#endif // ZEN_WITH_VFS + m_Http->RegisterService(*m_AdminService); + // Register health service last so if we return "OK" for health it means all services have been properly initialized + + m_Http->RegisterService(m_HealthService); + return EffectiveBasePort; } @@ -685,9 +711,6 @@ ZenServer::InitializeStructuredCache(const ZenServerOptions& ServerOptions) m_GcManager.GetDiskWriteBlocker(), *m_OpenProcessCache); - m_Http->RegisterService(*m_StructuredCacheService); - m_Http->RegisterService(*m_UpstreamService); - m_StatsReporter.AddProvider(m_CacheStore.Get()); m_StatsReporter.AddProvider(m_CidStore.get()); m_StatsReporter.AddProvider(m_BuildCidStore.get()); |