diff options
| author | Dan Engelbrecht <[email protected]> | 2025-04-07 14:05:57 +0200 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-04-07 14:05:57 +0200 |
| commit | cf99543cff63bb95d7b86a98d03c94857ef90ea4 (patch) | |
| tree | 5c1b283565914a749d85b2268681becbf3d83e0e /src | |
| parent | save global download info file for scavenging (#349) (diff) | |
| download | zen-cf99543cff63bb95d7b86a98d03c94857ef90ea4.tar.xz zen-cf99543cff63bb95d7b86a98d03c94857ef90ea4.zip | |
fixed host resolving if both host and and override-host (url) was given (#350)
Diffstat (limited to 'src')
| -rw-r--r-- | src/zen/cmds/builds_cmd.cpp | 57 |
1 files changed, 40 insertions, 17 deletions
diff --git a/src/zen/cmds/builds_cmd.cpp b/src/zen/cmds/builds_cmd.cpp index ebcbb59b7..7014a6f15 100644 --- a/src/zen/cmds/builds_cmd.cpp +++ b/src/zen/cmds/builds_cmd.cpp @@ -8928,6 +8928,23 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) std::string_view JsonResponse = ServerInfoResponse.AsText(); CbObject ResponseObjectView = LoadCompactBinaryFromJson(JsonResponse).AsObject(); + auto TestHostEndpoint = [](std::string_view BaseUrl, const bool AssumeHttp2) -> std::pair<bool, std::string> { + HttpClientSettings TestClientSettings{.LogCategory = "httpbuildsclient", + .ConnectTimeout = std::chrono::milliseconds{1000}, + .Timeout = std::chrono::milliseconds{2000}, + .AssumeHttp2 = AssumeHttp2, + .AllowResume = true, + .RetryCount = 0}; + + HttpClient TestHttpClient(BaseUrl, TestClientSettings); + HttpClient::Response TestResponse = TestHttpClient.Get("/health/live"); + if (TestResponse.IsSuccess()) + { + return {true, ""}; + } + return {false, TestResponse.ErrorMessage("")}; + }; + if (m_OverrideHost.empty()) { CbArrayView ServerEndpointsArray = ResponseObjectView["serverEndpoints"sv].AsArrayView(); @@ -8945,23 +8962,17 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) { const bool AssumeHttp2 = ServerEndpointObject["assumeHttp2"sv].AsBool(false); std::string_view Name = ServerEndpointObject["name"sv].AsString(); - - HttpClientSettings TestClientSettings{.LogCategory = "httpbuildsclient", - .ConnectTimeout = std::chrono::milliseconds{1000}, - .Timeout = std::chrono::milliseconds{2000}, - .AssumeHttp2 = AssumeHttp2, - .AllowResume = true, - .RetryCount = 0}; - - HttpClient TestHttpClient(BaseUrl, TestClientSettings); - HttpClient::Response TestResponse = TestHttpClient.Get("/health/live"); - if (TestResponse.IsSuccess()) + if (auto TestResult = TestHostEndpoint(BaseUrl, AssumeHttp2); TestResult.first) { CloudHost = BaseUrl; m_AssumeHttp2 = AssumeHttp2; BuildStorageName = Name; break; } + else + { + ZEN_DEBUG("Unable to reach host {}. Reason: {}", BaseUrl, TestResult.second); + } } } if (CloudHost.empty()) @@ -8970,8 +8981,16 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) fmt::format("Failed to find any usable builds hosts out of {} using {}", ServerCount, m_Host)); } } + else if (auto TestResult = TestHostEndpoint(m_OverrideHost, m_AssumeHttp2); TestResult.first) + { + CloudHost = m_OverrideHost; + } + else + { + throw std::runtime_error(fmt::format("Host {} could not be reached. Reason: {}", m_OverrideHost, TestResult.second)); + } - auto TestCacheEndpoint = [](std::string_view BaseUrl, const bool AssumeHttp2) -> bool { + auto TestCacheEndpoint = [](std::string_view BaseUrl, const bool AssumeHttp2) -> std::pair<bool, std::string> { HttpClientSettings TestClientSettings{.LogCategory = "httpcacheclient", .ConnectTimeout = std::chrono::milliseconds{1000}, .Timeout = std::chrono::milliseconds{2000}, @@ -8982,9 +9001,9 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) HttpClient::Response TestResponse = TestHttpClient.Get("/status/builds"); if (TestResponse.IsSuccess()) { - return true; + return {true, ""}; } - return false; + return {false, TestResponse.ErrorMessage("")}; }; if (m_ZenCacheHost.empty()) @@ -9001,7 +9020,7 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) const bool AssumeHttp2 = CacheEndpointObject["assumeHttp2"sv].AsBool(false); std::string_view Name = CacheEndpointObject["name"sv].AsString(); - if (TestCacheEndpoint(BaseUrl, AssumeHttp2)) + if (auto TestResult = TestCacheEndpoint(BaseUrl, AssumeHttp2); TestResult.first) { m_ZenCacheHost = BaseUrl; CacheAssumeHttp2 = AssumeHttp2; @@ -9020,7 +9039,7 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) { std::string ZenServerLocalHostUrl = fmt::format("http://127.0.0.1:{}", Entry.EffectiveListenPort.load()); - if (TestCacheEndpoint(ZenServerLocalHostUrl, false)) + if (auto TestResult = TestCacheEndpoint(ZenServerLocalHostUrl, false); TestResult.first) { m_ZenCacheHost = ZenServerLocalHostUrl; CacheAssumeHttp2 = false; @@ -9035,7 +9054,7 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) } } } - else if (TestCacheEndpoint(m_ZenCacheHost, false)) + else if (auto TestResult = TestCacheEndpoint(m_ZenCacheHost, false); TestResult.first) { std::string::size_type HostnameStart = 0; std::string::size_type HostnameLength = std::string::npos; @@ -9049,6 +9068,10 @@ BuildsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) } BuildCacheName = m_ZenCacheHost.substr(HostnameStart, HostnameLength); } + else + { + ZEN_WARN("Unable to reach cache host {}. Reason: {}", m_ZenCacheHost, TestResult.second); + } } } else |