aboutsummaryrefslogtreecommitdiff
path: root/zenserver/zenserver.cpp
diff options
context:
space:
mode:
authorMartin Ridgers <[email protected]>2021-11-01 10:32:15 +0100
committerMartin Ridgers <[email protected]>2021-11-01 10:32:15 +0100
commit89bfb07a3f794b6a4d53cb442ea6f8fd021bbd3a (patch)
tree825bd1b0ec25feac76ff7e02c9d7fa559e656625 /zenserver/zenserver.cpp
parentFixed up some assumptions that satd::fs::path uses wchar_t (diff)
parentMinor cleanup (diff)
downloadzen-89bfb07a3f794b6a4d53cb442ea6f8fd021bbd3a.tar.xz
zen-89bfb07a3f794b6a4d53cb442ea6f8fd021bbd3a.zip
Merged main
Diffstat (limited to 'zenserver/zenserver.cpp')
-rw-r--r--zenserver/zenserver.cpp82
1 files changed, 78 insertions, 4 deletions
diff --git a/zenserver/zenserver.cpp b/zenserver/zenserver.cpp
index bcc93b169..f5c38baae 100644
--- a/zenserver/zenserver.cpp
+++ b/zenserver/zenserver.cpp
@@ -120,6 +120,37 @@ namespace zen {
using namespace std::literals;
using namespace fmt::literals;
+namespace utils {
+ asio::error_code ResolveHostname(asio::io_context& Ctx,
+ std::string_view Host,
+ std::string_view DefaultPort,
+ std::vector<std::string>& OutEndpoints)
+ {
+ std::string_view Port = DefaultPort;
+
+ if (const size_t Idx = Host.find(":"); Idx != std::string_view::npos)
+ {
+ Port = Host.substr(Idx + 1);
+ Host = Host.substr(0, Idx);
+ }
+
+ asio::ip::tcp::resolver Resolver(Ctx);
+
+ asio::error_code ErrorCode;
+ asio::ip::tcp::resolver::results_type Endpoints = Resolver.resolve(Host, Port, ErrorCode);
+
+ if (!ErrorCode)
+ {
+ for (const asio::ip::tcp::endpoint& Ep : Endpoints)
+ {
+ OutEndpoints.push_back("http://{}:{}"_format(Ep.address().to_string(), Ep.port()));
+ }
+ }
+
+ return ErrorCode;
+ }
+} // namespace utils
+
class ZenServer : public IHttpStatusProvider
{
public:
@@ -599,7 +630,7 @@ ZenServer::InitializeStructuredCache(ZenServiceConfig& ServiceConfig)
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<ZenCacheStore>(*m_CasStore, m_DataRoot / "cache");
+ m_CacheStore = std::make_unique<ZenCacheStore>(m_DataRoot / "cache");
std::unique_ptr<zen::UpstreamCache> UpstreamCache;
if (ServiceConfig.UpstreamCacheConfig.CachePolicy != UpstreamCachePolicy::Disabled)
@@ -619,12 +650,29 @@ ZenServer::InitializeStructuredCache(ZenServiceConfig& ServiceConfig)
UpstreamCache = zen::MakeUpstreamCache(UpstreamOptions, *m_CacheStore, *m_CidStore);
- if (!UpstreamConfig.ZenConfig.Urls.empty())
+ // Zen upstream
{
- std::unique_ptr<zen::UpstreamEndpoint> ZenEndpoint = zen::MakeZenUpstreamEndpoint(UpstreamConfig.ZenConfig.Urls);
- UpstreamCache->RegisterEndpoint(std::move(ZenEndpoint));
+ std::vector<std::string> ZenUrls = UpstreamConfig.ZenConfig.Urls;
+ if (!UpstreamConfig.ZenConfig.Dns.empty())
+ {
+ for (const std::string& Dns : UpstreamConfig.ZenConfig.Dns)
+ {
+ const asio::error_code Err = zen::utils::ResolveHostname(m_IoContext, Dns, "1337"sv, ZenUrls);
+ if (Err)
+ {
+ ZEN_ERROR("resolve '{}' FAILED, reason '{}'", Err.message());
+ }
+ }
+ }
+
+ if (!ZenUrls.empty())
+ {
+ std::unique_ptr<zen::UpstreamEndpoint> ZenEndpoint = zen::MakeZenUpstreamEndpoint(ZenUrls);
+ UpstreamCache->RegisterEndpoint(std::move(ZenEndpoint));
+ }
}
+ // Jupiter upstream
{
zen::CloudCacheClientOptions Options;
if (UpstreamConfig.JupiterConfig.UseProductionSettings)
@@ -845,6 +893,22 @@ ZenWindowsService::Run()
return 0;
}
+#if ZEN_WITH_TESTS
+int
+test_main(int argc, char** argv)
+{
+ zen::zencore_forcelinktests();
+ zen::zenhttp_forcelinktests();
+ zen::zenstore_forcelinktests();
+
+ zen::logging::InitializeLogging();
+
+ spdlog::set_level(spdlog::level::debug);
+
+ return doctest::Context(argc, argv).run();
+}
+#endif
+
int
main(int argc, char* argv[])
{
@@ -854,6 +918,16 @@ main(int argc, char* argv[])
mi_version();
#endif
+#if ZEN_WITH_TESTS
+ if (argc >= 2)
+ {
+ if (argv[1] == "test"sv)
+ {
+ return test_main(argc, argv);
+ }
+ }
+#endif
+
try
{
ZenServerOptions GlobalOptions;