aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/zenserver.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2025-09-12 15:09:57 +0200
committerGitHub Enterprise <[email protected]>2025-09-12 15:09:57 +0200
commita38e52255026b549c96e0e368d3b3566d295406b (patch)
tree1bb55cef8b5d6d02c0fe73f4958306abec00e5bd /src/zenserver/zenserver.cpp
parent5.7.1-pre2 (diff)
downloadzen-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.cpp93
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());