summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/buildtool/build_engine/target_map/export.cpp3
-rw-r--r--src/buildtool/build_engine/target_map/target_map.cpp2
-rw-r--r--src/buildtool/main/analyse.cpp2
-rw-r--r--src/buildtool/main/describe.cpp2
-rw-r--r--src/buildtool/main/main.cpp13
-rw-r--r--src/buildtool/serve_api/remote/config.hpp58
-rw-r--r--src/buildtool/serve_api/remote/configuration_client.cpp2
-rw-r--r--src/buildtool/serve_api/remote/serve_api.hpp2
-rw-r--r--src/buildtool/serve_api/serve_service/source_tree.cpp20
-rw-r--r--src/buildtool/serve_api/serve_service/target.cpp22
-rw-r--r--src/buildtool/serve_api/serve_service/target_utils.cpp2
-rw-r--r--src/other_tools/just_mr/setup_utils.cpp3
-rw-r--r--test/buildtool/serve_api/source_tree_client.test.cpp2
-rw-r--r--test/utils/serve_service/main-serve.cpp7
14 files changed, 72 insertions, 68 deletions
diff --git a/src/buildtool/build_engine/target_map/export.cpp b/src/buildtool/build_engine/target_map/export.cpp
index 96e2d299..3e309280 100644
--- a/src/buildtool/build_engine/target_map/export.cpp
+++ b/src/buildtool/build_engine/target_map/export.cpp
@@ -142,7 +142,8 @@ void ExportRule(
#ifndef BOOTSTRAP_BUILD_TOOL
// if not found locally, try the serve endpoint
- if (not target_cache_value and RemoteServeConfig::RemoteAddress()) {
+ if (not target_cache_value and
+ RemoteServeConfig::Instance().RemoteAddress()) {
Logger::Log(LogLevel::Debug,
"Querying serve endpoint for export target {}",
key.target.ToString());
diff --git a/src/buildtool/build_engine/target_map/target_map.cpp b/src/buildtool/build_engine/target_map/target_map.cpp
index 423835d3..fc19a6c6 100644
--- a/src/buildtool/build_engine/target_map/target_map.cpp
+++ b/src/buildtool/build_engine/target_map/target_map.cpp
@@ -1915,7 +1915,7 @@ auto CreateTargetMap(
#ifndef BOOTSTRAP_BUILD_TOOL
else if (repo_config->TargetRoot(key.target.ToModule().repository)
->IsAbsent()) {
- if (not RemoteServeConfig::RemoteAddress()) {
+ if (not RemoteServeConfig::Instance().RemoteAddress()) {
(*logger)(
fmt::format("Root for target {} is absent, but no serve "
"endpoint was configured. Please provide "
diff --git a/src/buildtool/main/analyse.cpp b/src/buildtool/main/analyse.cpp
index d93246f1..7acb33b6 100644
--- a/src/buildtool/main/analyse.cpp
+++ b/src/buildtool/main/analyse.cpp
@@ -146,7 +146,7 @@ namespace Target = BuildMaps::Target;
// we should only report served export targets if a serve endpoint exists
bool has_serve{false};
#ifndef BOOTSTRAP_BUILD_TOOL
- if (RemoteServeConfig::RemoteAddress()) {
+ if (RemoteServeConfig::Instance().RemoteAddress()) {
has_serve = true;
}
#endif // BOOTSTRAP_BUILD_TOOL
diff --git a/src/buildtool/main/describe.cpp b/src/buildtool/main/describe.cpp
index eb70f076..57a73cdb 100644
--- a/src/buildtool/main/describe.cpp
+++ b/src/buildtool/main/describe.cpp
@@ -274,7 +274,7 @@ auto DescribeTarget(BuildMaps::Target::ConfiguredTarget const& id,
// check if target root is absent
if (repo_config->TargetRoot(id.target.ToModule().repository)->IsAbsent()) {
// check that we have a serve endpoint configured
- if (not RemoteServeConfig::RemoteAddress()) {
+ if (not RemoteServeConfig::Instance().RemoteAddress()) {
Logger::Log(LogLevel::Error,
fmt::format("Root for target {} is absent but no serve "
"endpoint was configured. Please provide "
diff --git a/src/buildtool/main/main.cpp b/src/buildtool/main/main.cpp
index b8f5f36d..ae533515 100644
--- a/src/buildtool/main/main.cpp
+++ b/src/buildtool/main/main.cpp
@@ -155,7 +155,7 @@ void SetupServeConfig(ServeArguments const& srvargs,
BuildArguments const& bargs,
TCArguments const& tc) {
if (srvargs.remote_serve_address) {
- if (not RemoteServeConfig::SetRemoteAddress(
+ if (not RemoteServeConfig::Instance().SetRemoteAddress(
*srvargs.remote_serve_address)) {
Logger::Log(LogLevel::Error,
"Setting serve service address '{}' failed.",
@@ -164,26 +164,27 @@ void SetupServeConfig(ServeArguments const& srvargs,
}
}
if (not srvargs.repositories.empty() and
- not RemoteServeConfig::SetKnownRepositories(srvargs.repositories)) {
+ not RemoteServeConfig::Instance().SetKnownRepositories(
+ srvargs.repositories)) {
Logger::Log(LogLevel::Error,
"Setting serve service repositories failed.");
std::exit(kExitFailure);
}
// make parallelism and build options available for remote builds
- if (not RemoteServeConfig::SetJobs(cargs.jobs)) {
+ if (not RemoteServeConfig::Instance().SetJobs(cargs.jobs)) {
Logger::Log(LogLevel::Error, "Setting jobs failed.");
std::exit(kExitFailure);
}
if (bargs.build_jobs > 0 and
- not RemoteServeConfig::SetBuildJobs(bargs.build_jobs)) {
+ not RemoteServeConfig::Instance().SetBuildJobs(bargs.build_jobs)) {
Logger::Log(LogLevel::Error, "Setting build jobs failed.");
std::exit(kExitFailure);
}
- if (not RemoteServeConfig::SetActionTimeout(bargs.timeout)) {
+ if (not RemoteServeConfig::Instance().SetActionTimeout(bargs.timeout)) {
Logger::Log(LogLevel::Error, "Setting action timeout failed.");
std::exit(kExitFailure);
}
- RemoteServeConfig::SetTCStrategy(tc.target_cache_write_strategy);
+ RemoteServeConfig::Instance().SetTCStrategy(tc.target_cache_write_strategy);
if (tc.target_cache_write_strategy == TargetCacheWriteStrategy::Disable) {
Logger::Log(LogLevel::Info,
"Target-level cache writing of serve service is disabled.");
diff --git a/src/buildtool/serve_api/remote/config.hpp b/src/buildtool/serve_api/remote/config.hpp
index 17fe758e..30197b53 100644
--- a/src/buildtool/serve_api/remote/config.hpp
+++ b/src/buildtool/serve_api/remote/config.hpp
@@ -33,76 +33,70 @@ class RemoteServeConfig {
}
// Set remote execution and cache address, unsets if parsing `address` fails
- [[nodiscard]] static auto SetRemoteAddress(
- std::string const& address) noexcept -> bool {
- auto& inst = Instance();
- return static_cast<bool>(inst.remote_address_ = ParseAddress(address));
+ [[nodiscard]] auto SetRemoteAddress(std::string const& address) noexcept
+ -> bool {
+ return static_cast<bool>(remote_address_ = ParseAddress(address));
}
// Set the list of known repositories
- [[nodiscard]] static auto SetKnownRepositories(
+ [[nodiscard]] auto SetKnownRepositories(
std::vector<std::filesystem::path> const& repos) noexcept -> bool {
- auto& inst = Instance();
- inst.repositories_ = std::vector<std::filesystem::path>(
+ repositories_ = std::vector<std::filesystem::path>(
std::make_move_iterator(repos.begin()),
std::make_move_iterator(repos.end()));
- return repos.size() == inst.repositories_.size();
+ return repos.size() == repositories_.size();
}
// Set the number of jobs
- [[nodiscard]] static auto SetJobs(std::size_t jobs) noexcept -> bool {
- return static_cast<bool>(Instance().jobs_ = jobs);
+ [[nodiscard]] auto SetJobs(std::size_t jobs) noexcept -> bool {
+ return static_cast<bool>(jobs_ = jobs);
}
// Set the number of build jobs
- [[nodiscard]] static auto SetBuildJobs(std::size_t build_jobs) noexcept
- -> bool {
- return static_cast<bool>(Instance().build_jobs_ = build_jobs);
+ [[nodiscard]] auto SetBuildJobs(std::size_t build_jobs) noexcept -> bool {
+ return static_cast<bool>(build_jobs_ = build_jobs);
}
// Set the action timeout
- [[nodiscard]] static auto SetActionTimeout(
+ [[nodiscard]] auto SetActionTimeout(
std::chrono::milliseconds const& timeout) noexcept -> bool {
- Instance().timeout_ = timeout;
- return Instance().timeout_ > std::chrono::seconds{0};
+ timeout_ = timeout;
+ return timeout_ > std::chrono::seconds{0};
}
- static void SetTCStrategy(TargetCacheWriteStrategy strategy) noexcept {
- Instance().tc_strategy_ = strategy;
+ void SetTCStrategy(TargetCacheWriteStrategy strategy) noexcept {
+ tc_strategy_ = strategy;
}
// Remote execution address, if set
- [[nodiscard]] static auto RemoteAddress() noexcept
+ [[nodiscard]] auto RemoteAddress() const noexcept
-> std::optional<ServerAddress> {
- return Instance().remote_address_;
+ return remote_address_;
}
// Repositories known to 'just serve'
- [[nodiscard]] static auto KnownRepositories() noexcept
+ [[nodiscard]] auto KnownRepositories() const noexcept
-> const std::vector<std::filesystem::path>& {
- return Instance().repositories_;
+ return repositories_;
}
// Get the number of jobs
- [[nodiscard]] static auto Jobs() noexcept -> std::size_t {
- return Instance().jobs_;
- }
+ [[nodiscard]] auto Jobs() const noexcept -> std::size_t { return jobs_; }
// Get the number of build jobs
- [[nodiscard]] static auto BuildJobs() noexcept -> std::size_t {
- return Instance().build_jobs_;
+ [[nodiscard]] auto BuildJobs() const noexcept -> std::size_t {
+ return build_jobs_;
}
// Get the action timeout
- [[nodiscard]] static auto ActionTimeout() noexcept
+ [[nodiscard]] auto ActionTimeout() const noexcept
-> std::chrono::milliseconds {
- return Instance().timeout_;
+ return timeout_;
}
// Get the target-level cache write strategy
- [[nodiscard]] static auto TCStrategy() noexcept
- -> TargetCacheWriteStrategy {
- return Instance().tc_strategy_;
+ [[nodiscard]] auto TCStrategy() const noexcept -> TargetCacheWriteStrategy {
+ return tc_strategy_;
}
private:
diff --git a/src/buildtool/serve_api/remote/configuration_client.cpp b/src/buildtool/serve_api/remote/configuration_client.cpp
index d8e61b97..ccd4f2f9 100644
--- a/src/buildtool/serve_api/remote/configuration_client.cpp
+++ b/src/buildtool/serve_api/remote/configuration_client.cpp
@@ -30,7 +30,7 @@ auto ConfigurationClient::CheckServeRemoteExecution() noexcept -> bool {
"have been set.");
return false;
}
- auto client_serve_address = RemoteServeConfig::RemoteAddress();
+ auto client_serve_address = RemoteServeConfig::Instance().RemoteAddress();
if (!client_serve_address) {
logger_.Emit(
LogLevel::Error,
diff --git a/src/buildtool/serve_api/remote/serve_api.hpp b/src/buildtool/serve_api/remote/serve_api.hpp
index 4717c8a0..b7c40a7f 100644
--- a/src/buildtool/serve_api/remote/serve_api.hpp
+++ b/src/buildtool/serve_api/remote/serve_api.hpp
@@ -132,7 +132,7 @@ class ServeApi final {
ServeApi(ServeApi&& other) noexcept = default;
[[nodiscard]] static auto init() noexcept -> ServeApi {
- auto sadd = RemoteServeConfig::RemoteAddress();
+ auto sadd = RemoteServeConfig::Instance().RemoteAddress();
return ServeApi{sadd->host, sadd->port};
}
diff --git a/src/buildtool/serve_api/serve_service/source_tree.cpp b/src/buildtool/serve_api/serve_service/source_tree.cpp
index c152773f..493dd0eb 100644
--- a/src/buildtool/serve_api/serve_service/source_tree.cpp
+++ b/src/buildtool/serve_api/serve_service/source_tree.cpp
@@ -254,7 +254,7 @@ auto SourceTreeService::ServeCommitTree(
return ::grpc::Status::OK;
}
// try given extra repositories, in order
- for (auto const& path : RemoteServeConfig::KnownRepositories()) {
+ for (auto const& path : RemoteServeConfig::Instance().KnownRepositories()) {
auto res = GetSubtreeFromCommit(path, commit, subdir, logger_);
if (std::holds_alternative<std::string>(res)) {
auto tree_id = std::get<std::string>(res);
@@ -410,7 +410,7 @@ auto SourceTreeService::ResolveContentTree(
ResolvedGitObject resolved_tree{};
bool failed{false};
{
- TaskSystem ts{RemoteServeConfig::Jobs()};
+ TaskSystem ts{RemoteServeConfig::Instance().Jobs()};
resolve_symlinks_map_.ConsumeAfterKeysReady(
&ts,
{GitObjectToResolve{tree_id,
@@ -745,7 +745,8 @@ auto SourceTreeService::ServeArchiveTree(
return ::grpc::Status::OK;
}
// check known repositories
- for (auto const& path : RemoteServeConfig::KnownRepositories()) {
+ for (auto const& path :
+ RemoteServeConfig::Instance().KnownRepositories()) {
auto res =
GetSubtreeFromTree(path, *archive_tree_id, subdir, logger_);
if (std::holds_alternative<std::string>(res)) {
@@ -806,7 +807,8 @@ auto SourceTreeService::ServeArchiveTree(
}
if (not content_cas_path) {
// check if content blob is in a known repository
- for (auto const& path : RemoteServeConfig::KnownRepositories()) {
+ for (auto const& path :
+ RemoteServeConfig::Instance().KnownRepositories()) {
auto res = GetBlobFromRepo(path, content, logger_);
if (std::holds_alternative<std::string>(res)) {
// add to CAS
@@ -1052,7 +1054,7 @@ auto SourceTreeService::ServeDistdirTree(
}
// check known repositories
for (auto const& path :
- RemoteServeConfig::KnownRepositories()) {
+ RemoteServeConfig::Instance().KnownRepositories()) {
auto res = GetBlobFromRepo(path, content, logger_);
if (std::holds_alternative<std::string>(res)) {
// add content to local CAS
@@ -1215,7 +1217,7 @@ auto SourceTreeService::ServeDistdirTree(
return ::grpc::Status::OK;
}
// check if tree is in a known repository
- for (auto const& path : RemoteServeConfig::KnownRepositories()) {
+ for (auto const& path : RemoteServeConfig::Instance().KnownRepositories()) {
auto has_tree = IsTreeInRepo(tree_id, path, logger_);
if (not has_tree) {
logger_->Emit(LogLevel::Error,
@@ -1321,7 +1323,7 @@ auto SourceTreeService::ServeContent(
return ::grpc::Status::OK;
}
// check if content blob is in a known repository
- for (auto const& path : RemoteServeConfig::KnownRepositories()) {
+ for (auto const& path : RemoteServeConfig::Instance().KnownRepositories()) {
auto res = GetBlobFromRepo(path, content, logger_);
if (std::holds_alternative<std::string>(res)) {
// upload blob to remote CAS
@@ -1438,7 +1440,7 @@ auto SourceTreeService::ServeTree(
return ::grpc::Status::OK;
}
// check if tree is in a known repository
- for (auto const& path : RemoteServeConfig::KnownRepositories()) {
+ for (auto const& path : RemoteServeConfig::Instance().KnownRepositories()) {
auto has_tree = IsTreeInRepo(tree_id, path, logger_);
if (not has_tree) {
logger_->Emit(LogLevel::Error,
@@ -1542,7 +1544,7 @@ auto SourceTreeService::CheckRootTree(
return ::grpc::Status::OK;
}
// check if tree is in a known repository
- for (auto const& path : RemoteServeConfig::KnownRepositories()) {
+ for (auto const& path : RemoteServeConfig::Instance().KnownRepositories()) {
auto has_tree = IsTreeInRepo(tree_id, path, logger_);
if (not has_tree) {
logger_->Emit(LogLevel::Error,
diff --git a/src/buildtool/serve_api/serve_service/target.cpp b/src/buildtool/serve_api/serve_service/target.cpp
index 3fc22c73..e91d6dbf 100644
--- a/src/buildtool/serve_api/serve_service/target.cpp
+++ b/src/buildtool/serve_api/serve_service/target.cpp
@@ -422,7 +422,8 @@ auto TargetService::ServeTarget(
error_msg};
}
- BuildMaps::Target::ResultTargetMap result_map{RemoteServeConfig::Jobs()};
+ BuildMaps::Target::ResultTargetMap result_map{
+ RemoteServeConfig::Instance().Jobs()};
auto configured_target = BuildMaps::Target::ConfiguredTarget{
.target = std::move(*entity), .config = std::move(config)};
@@ -447,7 +448,7 @@ auto TargetService::ServeTarget(
&repository_config,
tc,
&stats,
- RemoteServeConfig::Jobs(),
+ RemoteServeConfig::Instance().Jobs(),
std::nullopt /*request_action_input*/,
&logger);
@@ -473,19 +474,20 @@ auto TargetService::ServeTarget(
// Clean up result map, now that it is no longer needed
{
- TaskSystem ts{RemoteServeConfig::Jobs()};
+ TaskSystem ts{RemoteServeConfig::Instance().Jobs()};
result_map.Clear(&ts);
}
- auto jobs = RemoteServeConfig::BuildJobs();
+ auto jobs = RemoteServeConfig::Instance().BuildJobs();
if (jobs == 0) {
- jobs = RemoteServeConfig::Jobs();
+ jobs = RemoteServeConfig::Instance().Jobs();
}
// setup graph traverser
GraphTraverser::CommandLineArguments traverser_args{};
traverser_args.jobs = jobs;
- traverser_args.build.timeout = RemoteServeConfig::ActionTimeout();
+ traverser_args.build.timeout =
+ RemoteServeConfig::Instance().ActionTimeout();
traverser_args.stage = std::nullopt;
traverser_args.rebuild = std::nullopt;
GraphTraverser const traverser{
@@ -515,7 +517,7 @@ auto TargetService::ServeTarget(
jobs,
traverser.GetLocalApi(),
traverser.GetRemoteApi(),
- RemoteServeConfig::TCStrategy(),
+ RemoteServeConfig::Instance().TCStrategy(),
tc,
&logger,
LogLevel::Error);
@@ -593,7 +595,8 @@ auto TargetService::ServeTargetVariables(
}
if (not target_file_content) {
// try given extra repositories, in order
- for (auto const& path : RemoteServeConfig::KnownRepositories()) {
+ for (auto const& path :
+ RemoteServeConfig::Instance().KnownRepositories()) {
if (auto res =
GetBlobContent(path, root_tree, target_file, logger_)) {
tree_found = true;
@@ -748,7 +751,8 @@ auto TargetService::ServeTargetDescription(
}
if (not target_file_content) {
// try given extra repositories, in order
- for (auto const& path : RemoteServeConfig::KnownRepositories()) {
+ for (auto const& path :
+ RemoteServeConfig::Instance().KnownRepositories()) {
if (auto res =
GetBlobContent(path, root_tree, target_file, logger_)) {
tree_found = true;
diff --git a/src/buildtool/serve_api/serve_service/target_utils.cpp b/src/buildtool/serve_api/serve_service/target_utils.cpp
index 7a94c9ee..7e99ff23 100644
--- a/src/buildtool/serve_api/serve_service/target_utils.cpp
+++ b/src/buildtool/serve_api/serve_service/target_utils.cpp
@@ -62,7 +62,7 @@ auto GetServingRepository(std::string const& tree_id,
return StorageConfig::GitRoot();
}
// check the known repositories
- for (auto const& path : RemoteServeConfig::KnownRepositories()) {
+ for (auto const& path : RemoteServeConfig::Instance().KnownRepositories()) {
if (IsTreeInRepo(tree_id, path, logger)) {
return path;
}
diff --git a/src/other_tools/just_mr/setup_utils.cpp b/src/other_tools/just_mr/setup_utils.cpp
index 7c78533c..916d1e60 100644
--- a/src/other_tools/just_mr/setup_utils.cpp
+++ b/src/other_tools/just_mr/setup_utils.cpp
@@ -271,7 +271,8 @@ auto SetupServeApi(std::optional<std::string> const& remote_serve_addr,
// setup authentication
SetupAuthConfig(auth);
// setup remote
- if (not RemoteServeConfig::SetRemoteAddress(*remote_serve_addr)) {
+ if (not RemoteServeConfig::Instance().SetRemoteAddress(
+ *remote_serve_addr)) {
Logger::Log(LogLevel::Error,
"setting remote serve service address '{}' failed.",
*remote_serve_addr);
diff --git a/test/buildtool/serve_api/source_tree_client.test.cpp b/test/buildtool/serve_api/source_tree_client.test.cpp
index f2620cc5..63f73155 100644
--- a/test/buildtool/serve_api/source_tree_client.test.cpp
+++ b/test/buildtool/serve_api/source_tree_client.test.cpp
@@ -30,7 +30,7 @@ auto const kRootSymId = std::string{"18770dacfe14c15d88450c21c16668e13ab0e7f9"};
auto const kBazSymId = std::string{"1868f82682c290f0b1db3cacd092727eef1fa57f"};
TEST_CASE("Serve service client: tree-of-commit request", "[serve_api]") {
- auto const& info = RemoteServeConfig::RemoteAddress();
+ auto const& info = RemoteServeConfig::Instance().RemoteAddress();
// Create TLC client
SourceTreeClient st_client(info->host, info->port);
diff --git a/test/utils/serve_service/main-serve.cpp b/test/utils/serve_service/main-serve.cpp
index 537293d2..32b0885e 100644
--- a/test/utils/serve_service/main-serve.cpp
+++ b/test/utils/serve_service/main-serve.cpp
@@ -79,14 +79,15 @@ void wait_for_grpc_to_shutdown() {
// just serve shares here compatibility and authentication args with
// remote execution, so no need to do those again
auto address = ReadRemoteServeAddressFromEnv();
- if (address and not RemoteServeConfig::SetRemoteAddress(*address)) {
+ if (address and
+ not RemoteServeConfig::Instance().SetRemoteAddress(*address)) {
Logger::Log(LogLevel::Error, "parsing address '{}' failed.", *address);
std::exit(EXIT_FAILURE);
}
auto repos = ReadRemoteServeReposFromEnv();
if (not repos.empty() and
- not RemoteServeConfig::SetKnownRepositories(repos)) {
+ not RemoteServeConfig::Instance().SetKnownRepositories(repos)) {
Logger::Log(LogLevel::Error, "setting serve repos failed.");
std::exit(EXIT_FAILURE);
}
@@ -105,7 +106,7 @@ void wait_for_grpc_to_shutdown() {
std::exit(EXIT_FAILURE);
}
- return static_cast<bool>(RemoteServeConfig::RemoteAddress());
+ return static_cast<bool>(RemoteServeConfig::Instance().RemoteAddress());
}
} // namespace