aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2025-04-07 14:05:57 +0200
committerGitHub Enterprise <[email protected]>2025-04-07 14:05:57 +0200
commitcf99543cff63bb95d7b86a98d03c94857ef90ea4 (patch)
tree5c1b283565914a749d85b2268681becbf3d83e0e /src
parentsave global download info file for scavenging (#349) (diff)
downloadzen-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.cpp57
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