diff options
-rw-r--r-- | src/buildtool/build_engine/target_map/export.cpp | 3 | ||||
-rw-r--r-- | src/buildtool/build_engine/target_map/target_map.cpp | 2 | ||||
-rw-r--r-- | src/buildtool/main/analyse.cpp | 2 | ||||
-rw-r--r-- | src/buildtool/main/describe.cpp | 2 | ||||
-rw-r--r-- | src/buildtool/main/main.cpp | 13 | ||||
-rw-r--r-- | src/buildtool/serve_api/remote/config.hpp | 58 | ||||
-rw-r--r-- | src/buildtool/serve_api/remote/configuration_client.cpp | 2 | ||||
-rw-r--r-- | src/buildtool/serve_api/remote/serve_api.hpp | 2 | ||||
-rw-r--r-- | src/buildtool/serve_api/serve_service/source_tree.cpp | 20 | ||||
-rw-r--r-- | src/buildtool/serve_api/serve_service/target.cpp | 22 | ||||
-rw-r--r-- | src/buildtool/serve_api/serve_service/target_utils.cpp | 2 | ||||
-rw-r--r-- | src/other_tools/just_mr/setup_utils.cpp | 3 | ||||
-rw-r--r-- | test/buildtool/serve_api/source_tree_client.test.cpp | 2 | ||||
-rw-r--r-- | test/utils/serve_service/main-serve.cpp | 7 |
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 |