From 2ce2d82f693b7f4ce43605bb85acef59f975f479 Mon Sep 17 00:00:00 2001 From: Matt Peters Date: Tue, 25 Jan 2022 14:33:16 -0700 Subject: Temporary fix for ZEN_ASSERT(!Options.Name.empty()) failing when running as a service. --- zenserver/zenserver.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'zenserver/zenserver.cpp') diff --git a/zenserver/zenserver.cpp b/zenserver/zenserver.cpp index b8648c8ee..27d322f01 100644 --- a/zenserver/zenserver.cpp +++ b/zenserver/zenserver.cpp @@ -762,6 +762,10 @@ ZenServer::InitializeStructuredCache(const ZenServerOptions& ServerOptions) .Timeout = std::chrono::milliseconds(UpstreamConfig.TimeoutMilliseconds), .UseLegacyDdc = false}; } + else + { + Options = zen::CloudCacheClientOptions{.Name = "UninitializedName"sv}; + } Options.ServiceUrl = ValueOrDefault(UpstreamConfig.JupiterConfig.Url, Options.ServiceUrl); Options.DdcNamespace = ValueOrDefault(UpstreamConfig.JupiterConfig.DdcNamespace, Options.DdcNamespace); -- cgit v1.2.3 From 5291894278e160b9200b6ce261c6ab5437e45ccc Mon Sep 17 00:00:00 2001 From: Per Larsson Date: Wed, 26 Jan 2022 09:00:16 +0100 Subject: Fixed issue with missing endpoint name when configuring upstream cache from Lua. --- zenserver/zenserver.cpp | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) (limited to 'zenserver/zenserver.cpp') diff --git a/zenserver/zenserver.cpp b/zenserver/zenserver.cpp index 27d322f01..6a42a4044 100644 --- a/zenserver/zenserver.cpp +++ b/zenserver/zenserver.cpp @@ -678,7 +678,6 @@ void ZenServer::InitializeStructuredCache(const ZenServerOptions& ServerOptions) { using namespace std::literals; - auto ValueOrDefault = [](std::string_view Value, std::string_view Default) { return Value.empty() ? Default : Value; }; ZEN_INFO("instantiating structured cache service"); m_CacheStore = std::make_unique(m_CasGc, m_DataRoot / "cache"); @@ -722,8 +721,10 @@ ZenServer::InitializeStructuredCache(const ZenServerOptions& ServerOptions) if (!ZenUrls.empty()) { + const auto ZenEndpointName = UpstreamConfig.ZenConfig.Name.empty() ? "Zen"sv : UpstreamConfig.ZenConfig.Name; + std::unique_ptr ZenEndpoint = - zen::MakeZenUpstreamEndpoint({.Name = "Zen"sv, + zen::MakeZenUpstreamEndpoint({.Name = ZenEndpointName, .Urls = ZenUrls, .ConnectTimeout = std::chrono::milliseconds(UpstreamConfig.ConnectTimeoutMilliseconds), .Timeout = std::chrono::milliseconds(UpstreamConfig.TimeoutMilliseconds)}); @@ -737,7 +738,7 @@ ZenServer::InitializeStructuredCache(const ZenServerOptions& ServerOptions) if (UpstreamConfig.JupiterConfig.UseProductionSettings) { Options = - zen::CloudCacheClientOptions{.Name = "Horde"sv, + zen::CloudCacheClientOptions{.Name = "Jupiter-Prod"sv, .ServiceUrl = "https://jupiter.devtools.epicgames.com"sv, .DdcNamespace = "ue.ddc"sv, .BlobStoreNamespace = "ue.ddc"sv, @@ -751,7 +752,7 @@ ZenServer::InitializeStructuredCache(const ZenServerOptions& ServerOptions) else if (UpstreamConfig.JupiterConfig.UseDevelopmentSettings) { Options = - zen::CloudCacheClientOptions{.Name = "Horde"sv, + zen::CloudCacheClientOptions{.Name = "Jupiter-Dev"sv, .ServiceUrl = "https://jupiter.devtools-dev.epicgames.com"sv, .DdcNamespace = "ue.ddc"sv, .BlobStoreNamespace = "ue.ddc"sv, @@ -764,16 +765,21 @@ ZenServer::InitializeStructuredCache(const ZenServerOptions& ServerOptions) } else { - Options = zen::CloudCacheClientOptions{.Name = "UninitializedName"sv}; - } + const auto JupiterEndpointName = + UpstreamConfig.JupiterConfig.Name.empty() ? "Jupiter"sv : UpstreamConfig.JupiterConfig.Name; - Options.ServiceUrl = ValueOrDefault(UpstreamConfig.JupiterConfig.Url, Options.ServiceUrl); - Options.DdcNamespace = ValueOrDefault(UpstreamConfig.JupiterConfig.DdcNamespace, Options.DdcNamespace); - Options.BlobStoreNamespace = ValueOrDefault(UpstreamConfig.JupiterConfig.Namespace, Options.BlobStoreNamespace); - Options.OAuthProvider = ValueOrDefault(UpstreamConfig.JupiterConfig.OAuthProvider, Options.OAuthProvider); - Options.OAuthClientId = ValueOrDefault(UpstreamConfig.JupiterConfig.OAuthClientId, Options.OAuthClientId); - Options.OAuthSecret = ValueOrDefault(UpstreamConfig.JupiterConfig.OAuthClientSecret, Options.OAuthSecret); - Options.UseLegacyDdc |= UpstreamConfig.JupiterConfig.UseLegacyDdc; + Options = + zen::CloudCacheClientOptions{.Name = JupiterEndpointName, + .ServiceUrl = UpstreamConfig.JupiterConfig.Url, + .DdcNamespace = UpstreamConfig.JupiterConfig.DdcNamespace, + .BlobStoreNamespace = UpstreamConfig.JupiterConfig.Namespace, + .OAuthProvider = UpstreamConfig.JupiterConfig.OAuthProvider, + .OAuthClientId = UpstreamConfig.JupiterConfig.OAuthClientId, + .OAuthSecret = UpstreamConfig.JupiterConfig.OAuthClientSecret, + .ConnectTimeout = std::chrono::milliseconds(UpstreamConfig.ConnectTimeoutMilliseconds), + .Timeout = std::chrono::milliseconds(UpstreamConfig.TimeoutMilliseconds), + .UseLegacyDdc = false}; + } if (!Options.ServiceUrl.empty()) { -- cgit v1.2.3 From cf38d96543b2086a863ef4823ee769ec45cc45a4 Mon Sep 17 00:00:00 2001 From: zousar <2936246+zousar@users.noreply.github.com> Date: Thu, 27 Jan 2022 01:01:05 -0700 Subject: Handle HTTP port collisions when initializing server (#40) --- zenserver/zenserver.cpp | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) (limited to 'zenserver/zenserver.cpp') diff --git a/zenserver/zenserver.cpp b/zenserver/zenserver.cpp index 6a42a4044..c6a27ec44 100644 --- a/zenserver/zenserver.cpp +++ b/zenserver/zenserver.cpp @@ -155,7 +155,7 @@ namespace utils { class ZenServer : public IHttpStatusProvider { public: - void Initialize(const ZenServerOptions& ServerOptions, ZenServerState::ZenServerEntry* ServerEntry) + int Initialize(const ZenServerOptions& ServerOptions, ZenServerState::ZenServerEntry* ServerEntry) { m_UseSentry = ServerOptions.NoSentry == false; m_ServerEntry = ServerEntry; @@ -200,8 +200,8 @@ public: // Ok so now we're configured, let's kick things off - m_Http = zen::CreateHttpServer(ServerOptions.HttpServerClass); - m_Http->Initialize(ServerOptions.BasePort); + m_Http = zen::CreateHttpServer(ServerOptions.HttpServerClass); + int EffectiveBasePort = m_Http->Initialize(ServerOptions.BasePort); m_AuthService = std::make_unique(); m_Http->RegisterService(*m_AuthService); @@ -262,7 +262,7 @@ public: #if ZEN_ENABLE_MESH if (ServerOptions.MeshEnabled) { - StartMesh(BasePort); + StartMesh(EffectiveBasePort); } else { @@ -309,6 +309,8 @@ public: .Enabled = ServerOptions.GcConfig.Enabled, }; m_GcScheduler.Initialize(GcConfig); + + return EffectiveBasePort; } void InitializeState(const ZenServerOptions& ServerOptions); @@ -889,6 +891,20 @@ ZenEntryPoint::Run() Entry->AddSponsorProcess(ServerOptions.OwnerPid); } + ZenServer Server; + Server.SetDataRoot(ServerOptions.DataDir); + Server.SetContentRoot(ServerOptions.ContentDir); + Server.SetTestMode(ServerOptions.IsTest); + Server.SetDedicatedMode(ServerOptions.IsDedicated); + int EffectiveBasePort = Server.Initialize(ServerOptions, Entry); + + Entry->EffectiveListenPort = uint16_t(EffectiveBasePort); + if (EffectiveBasePort != ServerOptions.BasePort) + { + ZEN_INFO(ZEN_APP_NAME " - relocated to base port {}", EffectiveBasePort); + ServerOptions.BasePort = EffectiveBasePort; + } + std::unique_ptr ShutdownThread; std::unique_ptr ShutdownEvent; @@ -896,13 +912,6 @@ ZenEntryPoint::Run() ShutdownEventName << "Zen_" << ServerOptions.BasePort << "_Shutdown"; ShutdownEvent.reset(new zen::NamedEvent{ShutdownEventName}); - ZenServer Server; - Server.SetDataRoot(ServerOptions.DataDir); - Server.SetContentRoot(ServerOptions.ContentDir); - Server.SetTestMode(ServerOptions.IsTest); - Server.SetDedicatedMode(ServerOptions.IsDedicated); - Server.Initialize(ServerOptions, Entry); - // Monitor shutdown signals ShutdownThread.reset(new std::thread{[&] { -- cgit v1.2.3